1
0
mirror of https://github.com/janet-lang/janet synced 2024-12-28 09:20:26 +00:00

Update result value from janet_do* functions.

This commit is contained in:
Calvin Rose 2023-10-12 05:26:23 -05:00
parent f18ad36b1b
commit e3f4142d2a
2 changed files with 13 additions and 4 deletions

5
.gitignore vendored
View File

@ -34,8 +34,11 @@ local
# Common test files I use. # Common test files I use.
temp.janet temp.janet
temp*.janet temp.c
temp*janet
temp*.c
scratch.janet scratch.janet
scratch.c
# Emscripten # Emscripten
*.bc *.bc

View File

@ -32,6 +32,7 @@ int janet_dobytes(JanetTable *env, const uint8_t *bytes, int32_t len, const char
int errflags = 0, done = 0; int errflags = 0, done = 0;
int32_t index = 0; int32_t index = 0;
Janet ret = janet_wrap_nil(); Janet ret = janet_wrap_nil();
JanetFiber *fiber = NULL;
const uint8_t *where = sourcePath ? janet_cstring(sourcePath) : NULL; const uint8_t *where = sourcePath ? janet_cstring(sourcePath) : NULL;
if (where) janet_gcroot(janet_wrap_string(where)); if (where) janet_gcroot(janet_wrap_string(where));
@ -47,7 +48,7 @@ int janet_dobytes(JanetTable *env, const uint8_t *bytes, int32_t len, const char
JanetCompileResult cres = janet_compile(form, env, where); JanetCompileResult cres = janet_compile(form, env, where);
if (cres.status == JANET_COMPILE_OK) { if (cres.status == JANET_COMPILE_OK) {
JanetFunction *f = janet_thunk(cres.funcdef); JanetFunction *f = janet_thunk(cres.funcdef);
JanetFiber *fiber = janet_fiber(f, 64, 0, NULL); fiber = janet_fiber(f, 64, 0, NULL);
fiber->env = env; fiber->env = env;
JanetSignal status = janet_continue(fiber, janet_wrap_nil(), &ret); JanetSignal status = janet_continue(fiber, janet_wrap_nil(), &ret);
if (status != JANET_SIGNAL_OK && status != JANET_SIGNAL_EVENT) { if (status != JANET_SIGNAL_OK && status != JANET_SIGNAL_EVENT) {
@ -112,9 +113,14 @@ int janet_dobytes(JanetTable *env, const uint8_t *bytes, int32_t len, const char
#ifdef JANET_EV #ifdef JANET_EV
/* Enter the event loop if we are not already in it */ /* Enter the event loop if we are not already in it */
if (janet_vm.stackn == 0) { if (janet_vm.stackn == 0) {
janet_gcroot(ret); if (fiber) {
janet_gcroot(janet_wrap_fiber(fiber));
}
janet_loop(); janet_loop();
janet_gcunroot(ret); if (fiber) {
janet_gcunroot(janet_wrap_fiber(fiber));
ret = fiber->last_value;
}
} }
#endif #endif
if (out) *out = ret; if (out) *out = ret;