From ce31db09e4d9fa22c1289aba78adf15c951f2f3e Mon Sep 17 00:00:00 2001 From: Jona Ekenberg Date: Wed, 1 Feb 2023 11:45:13 +0100 Subject: [PATCH] symbolslots should be gc'd, local_symbols always pushed in case *debug* is set in middle of function --- src/core/bytecode.c | 2 +- src/core/compile.c | 4 +--- src/core/gc.c | 1 + src/core/marsh.c | 2 ++ src/core/specials.c | 9 ++------- 5 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/core/bytecode.c b/src/core/bytecode.c index 3f3202b8..54a80333 100644 --- a/src/core/bytecode.c +++ b/src/core/bytecode.c @@ -218,7 +218,7 @@ JanetFuncDef *janet_funcdef_alloc(void) { def->closure_bitset = NULL; def->flags = 0; def->slotcount = 0; - def->symbolslots = 0; + def->symbolslots = NULL; def->arity = 0; def->min_arity = 0; def->max_arity = INT32_MAX; diff --git a/src/core/compile.c b/src/core/compile.c index eb6448a3..cff26a91 100644 --- a/src/core/compile.c +++ b/src/core/compile.c @@ -1012,9 +1012,7 @@ JanetCompileResult janet_compile_lint(Janet source, janetc_init(&c, env, where, lints); /* Push a function scope */ - if (janet_truthy(janet_dyn("debug"))) { - janet_v_push(c.local_symbols, NULL); - } + janet_v_push(c.local_symbols, NULL); janetc_scope(&rootscope, &c, JANET_SCOPE_FUNCTION | JANET_SCOPE_TOP, "root"); /* Set initial form options */ diff --git a/src/core/gc.c b/src/core/gc.c index 9e80b9a6..9eb1fb8f 100644 --- a/src/core/gc.c +++ b/src/core/gc.c @@ -314,6 +314,7 @@ static void janet_deinit_block(JanetGCObject *mem) { janet_free(def->bytecode); janet_free(def->sourcemap); janet_free(def->closure_bitset); + janet_free(def->symbolslots); } break; } diff --git a/src/core/marsh.c b/src/core/marsh.c index f27a1374..969f3ac3 100644 --- a/src/core/marsh.c +++ b/src/core/marsh.c @@ -824,6 +824,8 @@ static const uint8_t *unmarshal_one_def( def->constants = NULL; def->bytecode = NULL; def->sourcemap = NULL; + def->symbolslots = NULL; + def->symbolslots_length = 0; janet_v_push(st->lookup_defs, def); /* Set default lengths to zero */ diff --git a/src/core/specials.c b/src/core/specials.c index 2435ba2b..17ae7f96 100644 --- a/src/core/specials.c +++ b/src/core/specials.c @@ -753,10 +753,7 @@ static JanetSlot janetc_while(JanetFopts opts, int32_t argn, const Janet *argv) if (c->buffer) janet_v__cnt(c->buffer) = labelwt; if (c->mapbuffer) janet_v__cnt(c->mapbuffer) = labelwt; - - if (janet_truthy(janet_dyn("debug"))) { - janet_v_push(c->local_symbols, NULL); - } + janet_v_push(c->local_symbols, NULL); janetc_scope(&tempscope, c, JANET_SCOPE_FUNCTION, "while-iife"); /* Recompile in the function scope */ @@ -833,9 +830,7 @@ static JanetSlot janetc_fn(JanetFopts opts, int32_t argn, const Janet *argv) { /* Begin function */ c->scope->flags |= JANET_SCOPE_CLOSURE; - if (janet_truthy(janet_dyn("debug"))) { - janet_v_push(c->local_symbols, NULL); - } + janet_v_push(c->local_symbols, NULL); janetc_scope(&fnscope, c, JANET_SCOPE_FUNCTION, "function"); if (argn == 0) {