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:
parent
f18ad36b1b
commit
e3f4142d2a
5
.gitignore
vendored
5
.gitignore
vendored
@ -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
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user