Check redef only once per compile call.

This commit is contained in:
Calvin Rose
2026-03-15 12:56:10 -05:00
parent c63c6740d9
commit 1197cfe433
3 changed files with 8 additions and 4 deletions
+1
View File
@@ -1120,6 +1120,7 @@ static void janetc_init(JanetCompiler *c, JanetTable *env, const uint8_t *where,
c->current_mapping.line = -1;
c->current_mapping.column = -1;
c->lints = lints;
c->is_redef = janet_truthy(janet_table_get_keyword(c->env, "redef"));
/* Init result */
c->result.error = NULL;
c->result.status = JANET_COMPILE_OK;
+3
View File
@@ -184,6 +184,9 @@ struct JanetCompiler {
/* Collect linting results */
JanetArray *lints;
/* Cached version of (dyn *redef*) */
int is_redef;
};
#define JANET_FOPTS_TAIL 0x10000
+4 -4
View File
@@ -442,8 +442,7 @@ static int varleaf(
JanetSlot refslot;
JanetTable *entry = janet_table_clone(reftab);
/* TODO - hoist to top level "compile" entry */
int is_redef = janet_truthy(janet_table_get_keyword(c->env, "redef"));
int is_redef = c->is_redef;
JanetArray *ref;
JanetBinding old_binding;
@@ -510,12 +509,13 @@ static int defleaf(
JanetSlot s,
JanetTable *tab) {
JanetTable *entry = NULL;
int is_redef = 0;
if (c->scope->flags & JANET_SCOPE_TOP) {
entry = janet_table_clone(tab);
janet_table_put(entry, janet_ckeywordv("source-map"),
janet_wrap_tuple(janetc_make_sourcemap(c)));
int is_redef = janet_truthy(janet_table_get_keyword(c->env, "redef"));
is_redef = c->is_redef;
if (is_redef) janet_table_put(entry, janet_ckeywordv("redef"), janet_wrap_true());
if (is_redef) {
@@ -537,7 +537,7 @@ static int defleaf(
}
}
int no_unused = tab && tab->count && janet_truthy(janet_table_get_keyword(tab, "unused"));
int no_shadow = tab && tab->count && janet_truthy(janet_table_get_keyword(tab, "shadow"));
int no_shadow = is_redef || (tab && tab->count && janet_truthy(janet_table_get_keyword(tab, "shadow")));
uint32_t def_flags = 0;
if (no_unused) def_flags |= JANET_DEFFLAG_NO_UNUSED;
if (no_shadow) def_flags |= JANET_DEFFLAG_NO_SHADOWCHECK;