1
0
mirror of https://github.com/janet-lang/janet synced 2024-11-29 03:19:54 +00:00

Update janet_pcall interface

The programmer can now not only get the used fiber, but
provide a fiber to reuse if many calls are made in succession.
This commit is contained in:
Calvin Rose 2019-02-22 17:10:24 -05:00
parent 2ea28f29b0
commit b14fcb068b
3 changed files with 9 additions and 2 deletions

View File

@ -198,6 +198,9 @@ static Janet cfun_io_fread(int32_t argc, Janet *argv) {
if (fsize < 0) { if (fsize < 0) {
janet_panicf("could not get file size of %v", argv[0]); janet_panicf("could not get file size of %v", argv[0]);
} }
if (fsize > (INT32_MAX)) {
janet_panic("file to large to read into buffer");
}
fseek(iof->file, 0, SEEK_SET); fseek(iof->file, 0, SEEK_SET);
read_chunk(iof, buffer, (int32_t) fsize); read_chunk(iof, buffer, (int32_t) fsize);
} }

View File

@ -1057,7 +1057,6 @@ static Janet cfun_peg_match(int32_t argc, Janet *argv) {
s.captures = janet_array(0); s.captures = janet_array(0);
s.scratch = janet_buffer(10); s.scratch = janet_buffer(10);
s.tags = janet_buffer(10); s.tags = janet_buffer(10);
s.constants = peg->constants; s.constants = peg->constants;
s.bytecode = peg->bytecode; s.bytecode = peg->bytecode;
const uint8_t *result = peg_rule(&s, s.bytecode, bytes.bytes + start); const uint8_t *result = peg_rule(&s, s.bytecode, bytes.bytes + start);

View File

@ -852,7 +852,12 @@ JanetSignal janet_pcall(
const Janet *argv, const Janet *argv,
Janet *out, Janet *out,
JanetFiber **f) { JanetFiber **f) {
JanetFiber *fiber = janet_fiber(fun, 64, argc, argv); JanetFiber *fiber;
if (f && *f) {
fiber = janet_fiber_reset(*f, fun, argc, argv);
} else {
fiber = janet_fiber(fun, 64, argc, argv);
}
if (f) *f = fiber; if (f) *f = fiber;
if (!fiber) { if (!fiber) {
*out = janet_cstringv("arity mismatch"); *out = janet_cstringv("arity mismatch");