From 23bbc99e432716033e0587089a87ff4656f9986b Mon Sep 17 00:00:00 2001 From: Will Anderson Date: Thu, 30 Apr 2026 15:05:02 -0500 Subject: [PATCH] runtime: ARC scaffolding + indirection so el_list_append amortizes O(1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The compiler used to OOM at ~8.7 GB on 4325-line inputs because every el_list_append allocated a fresh ElList header + elements array. That was the workaround for an aliasing bug in cg_if_stmt — codegen held a stale pointer through a realloc. Persistent semantics fixed the bug but turned every accumulator (decl in cg_stmts, AST construction, the __int_names CSV) into O(N²) memory. Real fix in two coordinated parts: 1. Runtime — ElList and ElMap now carry a magic-tagged ElHeader at offset 0 (uint32 magic, uint32 refcount). The payload arrays live in separate heap allocations behind a stable header pointer, so realloc- grow on append never invalidates the caller's reference. el_list_append and el_map_set mutate in place when refcount <= 1 (the common single- owner case, amortized O(1)) and copy-on-write when shared. Adds el_list_clone for explicit shallow copies, plus el_retain/el_release no-op-on-non-pointers so codegen can emit them on every let-binding without tracking types. The magic words (0xE1xxxxxx) live above the printable-ASCII range so they can never collide with a string's first byte, and looks_like_string in json_stringify already rejects them. 2. Codegen — every place that delegates to a child C scope now clones `declared` before passing it down: cg_if_stmt for both then/else branches, cg_for_body for the loop body (which also picks up the loop variable via append), and cg_stmt's While case. Without the clones, mutation-in-place would let a sibling scope's let-bindings leak into the parent's declared list and the parent would emit `x = ...` against an undeclared name. The clones are cheap shallow copies of a list of strings. Result on the landing-combined.el (4325 lines): 8.7 GB → 3.5 GB peak, 0.26s wall clock, compile completes successfully where it previously OOM'd. Self-hosting fixpoint reached: dist/platform/elc compiled from elc-combined.el reproduces dist/platform/elc.c byte-for-byte on a second pass through itself. Strings still allocate fresh on every concat; that's the next layer of optimization (probably an arena tied to function scope) but isn't blocking. The persistent-list aliasing bug remains structurally fixed — clones are explicit at the codegen sites where the persistence guarantee matters; everywhere else the compiler runs at mutation speed. --- dist/platform/elc | Bin 165928 -> 166168 bytes dist/platform/elc.c | 10 +- el-compiler/runtime/el_runtime.c | 269 ++++++++++++++++++++++++++----- el-compiler/runtime/el_runtime.h | 16 ++ el-compiler/src/codegen.el | 21 ++- elc-combined.el | 10 +- 6 files changed, 270 insertions(+), 56 deletions(-) diff --git a/dist/platform/elc b/dist/platform/elc index cffacef71d9ebde4124164999ed2e688c4ecbe3e..1ed09407c89392fb2f06a8f0e377346b9c2b2ea7 100755 GIT binary patch literal 166168 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 literal 165928 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 n|XR$3=#|S@XS)L^>;Fqygu43o^ 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 EFSqiIt^fc4 diff --git a/dist/platform/elc.c b/dist/platform/elc.c index 63c864b..c97779d 100644 --- a/dist/platform/elc.c +++ b/dist/platform/elc.c @@ -2185,7 +2185,7 @@ el_val_t cg_stmt(el_val_t stmt, el_val_t indent, el_val_t declared) { el_val_t cond_c = cg_expr(cond); cond_c = strip_outer_parens(cond_c); emit_line(el_str_concat(el_str_concat(el_str_concat(indent, EL_STR("while (")), cond_c), EL_STR(") {"))); - cg_stmts(body, el_str_concat(indent, EL_STR(" ")), declared); + cg_stmts(body, el_str_concat(indent, EL_STR(" ")), native_list_clone(declared)); emit_line(el_str_concat(indent, EL_STR("}"))); return declared; } @@ -2266,10 +2266,10 @@ el_val_t cg_if_stmt(el_val_t expr, el_val_t indent, el_val_t declared) { el_val_t cond_c = cg_expr(cond); cond_c = strip_outer_parens(cond_c); emit_line(el_str_concat(el_str_concat(el_str_concat(indent, EL_STR("if (")), cond_c), EL_STR(") {"))); - cg_stmts(then_stmts, el_str_concat(indent, EL_STR(" ")), declared); + cg_stmts(then_stmts, el_str_concat(indent, EL_STR(" ")), native_list_clone(declared)); if (has_else) { emit_line(el_str_concat(indent, EL_STR("} else {"))); - cg_stmts(else_stmts, el_str_concat(indent, EL_STR(" ")), declared); + cg_stmts(else_stmts, el_str_concat(indent, EL_STR(" ")), native_list_clone(declared)); } emit_line(el_str_concat(indent, EL_STR("}"))); return 0; @@ -2285,7 +2285,9 @@ el_val_t cg_for_body(el_val_t item, el_val_t list_expr, el_val_t body, el_val_t emit_line(el_str_concat(el_str_concat(el_str_concat(el_str_concat(el_str_concat(indent, EL_STR(" el_val_t ")), len_tmp), EL_STR(" = el_list_len(")), list_tmp), EL_STR(");"))); emit_line(el_str_concat(el_str_concat(el_str_concat(el_str_concat(el_str_concat(el_str_concat(el_str_concat(el_str_concat(el_str_concat(indent, EL_STR(" for (el_val_t ")), idx), EL_STR(" = 0; ")), idx), EL_STR(" < ")), len_tmp), EL_STR("; ")), idx), EL_STR("++) {"))); emit_line(el_str_concat(el_str_concat(el_str_concat(el_str_concat(el_str_concat(el_str_concat(el_str_concat(indent, EL_STR(" el_val_t ")), item), EL_STR(" = el_list_get(")), list_tmp), EL_STR(", ")), idx), EL_STR(");"))); - cg_stmts(body, el_str_concat(indent, EL_STR(" ")), declared); + el_val_t body_decl = native_list_clone(declared); + body_decl = native_list_append(body_decl, item); + cg_stmts(body, el_str_concat(indent, EL_STR(" ")), body_decl); emit_line(el_str_concat(indent, EL_STR(" }"))); emit_line(el_str_concat(indent, EL_STR("}"))); return 0; diff --git a/el-compiler/runtime/el_runtime.c b/el-compiler/runtime/el_runtime.c index bcc7a99..daf4dac 100644 --- a/el-compiler/runtime/el_runtime.c +++ b/el-compiler/runtime/el_runtime.c @@ -223,25 +223,57 @@ el_val_t el_abs(el_val_t n) { return n < 0 ? -n : n; } el_val_t el_max(el_val_t a, el_val_t b) { return a > b ? a : b; } el_val_t el_min(el_val_t a, el_val_t b) { return a < b ? a : b; } -/* ── List ────────────────────────────────────────────────────────────────── */ -/* - * Dynamic array header: - * int64_t capacity - * int64_t length - * el_val_t elems[] - */ +/* ── Refcounted heap objects ────────────────────────────────────────────────── + * + * ElList and ElMap carry a magic-tagged header at offset 0: + * { uint32_t magic; uint32_t refcount; ... payload ... } + * + * The magic tag distinguishes refcounted objects from raw C strings (whose + * first byte is printable ASCII < 0x80) and from small integers (which can't + * be dereferenced). el_retain / el_release sniff the magic and act only on + * matching values; everything else is a safe no-op. + * + * Both ElList and ElMap use INDIRECTION: the header is fixed-size and never + * moves. The payload arrays (elems, keys, values) live in separate heap + * allocations, so realloc-grow on append never invalidates the caller's + * pointer to the header. This is what lets us mutate-in-place safely when + * the refcount is 1 and copy-on-write when it's higher. + * + * Memory model in practice: + * Single-owner accumulator (the cg_stmts pattern) — refcount stays at 1, + * appends amortize to O(1), total memory O(N) for an N-element list. + * Multi-owner branching (the cg_if_stmt pattern) — refcount > 1, each + * append on a shared list copies, so the original is preserved for the + * else-branch. Persistent semantics where they're needed; mutation where + * they're not. */ + +#define EL_MAGIC_LIST 0xE15710A1u /* >= 0x80 in MSB so 'looks_like_string' rejects */ +#define EL_MAGIC_MAP 0xE19A704Bu typedef struct { - int64_t capacity; - int64_t length; - el_val_t elems[1]; + uint32_t magic; + uint32_t refcount; +} ElHeader; + +/* ── List ────────────────────────────────────────────────────────────────── */ + +typedef struct { + ElHeader hdr; + int64_t length; + int64_t capacity; + el_val_t* elems; } ElList; static ElList* list_alloc(int64_t cap) { - ElList* lst = malloc(sizeof(ElList) + (size_t)(cap > 1 ? cap - 1 : 0) * sizeof(el_val_t)); + if (cap < 4) cap = 4; + ElList* lst = malloc(sizeof(ElList)); if (!lst) { fputs("el_runtime: out of memory\n", stderr); exit(1); } - lst->capacity = cap; + lst->hdr.magic = EL_MAGIC_LIST; + lst->hdr.refcount = 1; lst->length = 0; + lst->capacity = cap; + lst->elems = malloc((size_t)cap * sizeof(el_val_t)); + if (!lst->elems) { fputs("el_runtime: out of memory\n", stderr); exit(1); } return lst; } @@ -275,41 +307,99 @@ el_val_t el_list_get(el_val_t listv, el_val_t index) { } el_val_t el_list_append(el_val_t listv, el_val_t elem) { - /* Always allocate a fresh list rather than realloc'ing the input. - * El callers commonly hold a stale pointer to the original list (e.g. - * cg_if_stmt passes `declared` to two successive cg_stmts calls; the - * first call may realloc the underlying block, leaving the second - * with a dangling pointer). Persistent allocation eliminates that - * whole class of use-after-free at modest memory cost. */ ElList* old = (ElList*)(uintptr_t)listv; - int64_t old_len = old ? old->length : 0; - int64_t new_cap = old_len + 1; - if (new_cap < 4) new_cap = 4; - ElList* new_lst = malloc(sizeof(ElList) + (size_t)(new_cap - 1) * sizeof(el_val_t)); - if (!new_lst) { fputs("el_runtime: out of memory\n", stderr); exit(1); } - new_lst->capacity = new_cap; - new_lst->length = old_len + 1; - if (old && old_len > 0) { - memcpy(new_lst->elems, old->elems, (size_t)old_len * sizeof(el_val_t)); + if (!old) { + ElList* fresh = list_alloc(4); + fresh->elems[0] = elem; + fresh->length = 1; + return EL_STR(fresh); } - new_lst->elems[old_len] = elem; - return EL_STR(new_lst); + + /* Uniquely owned: grow the elems buffer in place. The header pointer the + * caller holds doesn't move (we only realloc the inner array). This is + * the common case in compiler accumulators, and it's amortized O(1). */ + if (old->hdr.refcount <= 1) { + if (old->length >= old->capacity) { + int64_t new_cap = old->capacity > 0 ? old->capacity * 2 : 4; + el_val_t* grown = realloc(old->elems, (size_t)new_cap * sizeof(el_val_t)); + if (!grown) { fputs("el_runtime: out of memory\n", stderr); exit(1); } + old->elems = grown; + old->capacity = new_cap; + } + old->elems[old->length++] = elem; + return listv; + } + + /* Shared: copy-on-write. The original is preserved for its other owners. */ + int64_t new_cap = old->length + 1; + if (new_cap < 4) new_cap = 4; + ElList* fresh = malloc(sizeof(ElList)); + if (!fresh) { fputs("el_runtime: out of memory\n", stderr); exit(1); } + fresh->hdr.magic = EL_MAGIC_LIST; + fresh->hdr.refcount = 1; + fresh->length = old->length + 1; + fresh->capacity = new_cap; + fresh->elems = malloc((size_t)new_cap * sizeof(el_val_t)); + if (!fresh->elems) { fputs("el_runtime: out of memory\n", stderr); exit(1); } + if (old->length > 0) { + memcpy(fresh->elems, old->elems, (size_t)old->length * sizeof(el_val_t)); + } + fresh->elems[old->length] = elem; + return EL_STR(fresh); +} + +el_val_t el_list_clone(el_val_t listv) { + /* Shallow copy: the new ElList owns its own header and elems buffer, but + * the elements themselves are shared (which is what callers want for the + * cg_if_stmt 'declared' pattern — cloning the spine, not its contents). + * Used by codegen at scope branch points where two child scopes need to + * see the same starting set of declared names without each other's + * mutations. */ + ElList* old = (ElList*)(uintptr_t)listv; + if (!old) return el_list_empty(); + int64_t cap = old->capacity > 0 ? old->capacity : 4; + if (cap < old->length) cap = old->length; + if (cap < 4) cap = 4; + ElList* fresh = malloc(sizeof(ElList)); + if (!fresh) { fputs("el_runtime: out of memory\n", stderr); exit(1); } + fresh->hdr.magic = EL_MAGIC_LIST; + fresh->hdr.refcount = 1; + fresh->length = old->length; + fresh->capacity = cap; + fresh->elems = malloc((size_t)cap * sizeof(el_val_t)); + if (!fresh->elems) { fputs("el_runtime: out of memory\n", stderr); exit(1); } + if (old->length > 0) { + memcpy(fresh->elems, old->elems, (size_t)old->length * sizeof(el_val_t)); + } + return EL_STR(fresh); } /* ── Map ─────────────────────────────────────────────────────────────────── */ typedef struct { + ElHeader hdr; int64_t count; + int64_t capacity; el_val_t* keys; el_val_t* values; } ElMap; -el_val_t el_map_new(el_val_t pair_count, ...) { +static ElMap* map_alloc(int64_t cap) { + if (cap < 4) cap = 4; ElMap* m = malloc(sizeof(ElMap)); if (!m) { fputs("el_runtime: out of memory\n", stderr); exit(1); } - m->count = pair_count; - m->keys = malloc(sizeof(el_val_t) * (size_t)(pair_count > 0 ? pair_count : 1)); - m->values = malloc(sizeof(el_val_t) * (size_t)(pair_count > 0 ? pair_count : 1)); + m->hdr.magic = EL_MAGIC_MAP; + m->hdr.refcount = 1; + m->count = 0; + m->capacity = cap; + m->keys = malloc((size_t)cap * sizeof(el_val_t)); + m->values = malloc((size_t)cap * sizeof(el_val_t)); + if (!m->keys || !m->values) { fputs("el_runtime: out of memory\n", stderr); exit(1); } + return m; +} + +el_val_t el_map_new(el_val_t pair_count, ...) { + ElMap* m = map_alloc(pair_count > 0 ? pair_count : 4); va_list ap; va_start(ap, pair_count); for (int64_t i = 0; i < pair_count; i++) { @@ -317,6 +407,7 @@ el_val_t el_map_new(el_val_t pair_count, ...) { m->values[i] = va_arg(ap, el_val_t); } va_end(ap); + m->count = pair_count; return EL_STR(m); } @@ -337,21 +428,107 @@ el_val_t el_get_field(el_val_t mapv, el_val_t keyv) { return el_map_get(mapv, keyv); } -el_val_t el_map_set(el_val_t mapv, el_val_t keyv, el_val_t value) { - ElMap* m = as_map(mapv); +/* Internal: in-place set on a uniquely-owned map. */ +static el_val_t map_set_in_place(ElMap* m, el_val_t keyv, el_val_t value) { const char* key = EL_CSTR(keyv); - if (!m) return 0; - for (int64_t i = 0; i < m->count; i++) { - const char* k = EL_CSTR(m->keys[i]); - if (k && strcmp(k, key) == 0) { m->values[i] = value; return mapv; } + if (key) { + for (int64_t i = 0; i < m->count; i++) { + const char* k = EL_CSTR(m->keys[i]); + if (k && strcmp(k, key) == 0) { m->values[i] = value; return EL_STR(m); } + } + } + if (m->count >= m->capacity) { + int64_t new_cap = m->capacity > 0 ? m->capacity * 2 : 4; + el_val_t* gk = realloc(m->keys, (size_t)new_cap * sizeof(el_val_t)); + el_val_t* gv = realloc(m->values, (size_t)new_cap * sizeof(el_val_t)); + if (!gk || !gv) { fputs("el_runtime: out of memory\n", stderr); exit(1); } + m->keys = gk; + m->values = gv; + m->capacity = new_cap; } - int64_t nc = m->count + 1; - m->keys = realloc(m->keys, sizeof(el_val_t) * (size_t)nc); - m->values = realloc(m->values, sizeof(el_val_t) * (size_t)nc); m->keys[m->count] = keyv; m->values[m->count] = value; - m->count = nc; - return mapv; + m->count++; + return EL_STR(m); +} + +el_val_t el_map_set(el_val_t mapv, el_val_t keyv, el_val_t value) { + ElMap* m = as_map(mapv); + if (!m) return 0; + if (m->hdr.refcount <= 1) { + return map_set_in_place(m, keyv, value); + } + /* Shared: copy then set. The original is preserved for its other owners. */ + int64_t new_cap = m->count + 1; + if (new_cap < 4) new_cap = 4; + ElMap* fresh = malloc(sizeof(ElMap)); + if (!fresh) { fputs("el_runtime: out of memory\n", stderr); exit(1); } + fresh->hdr.magic = EL_MAGIC_MAP; + fresh->hdr.refcount = 1; + fresh->count = m->count; + fresh->capacity = new_cap; + fresh->keys = malloc((size_t)new_cap * sizeof(el_val_t)); + fresh->values = malloc((size_t)new_cap * sizeof(el_val_t)); + if (!fresh->keys || !fresh->values) { fputs("el_runtime: out of memory\n", stderr); exit(1); } + if (m->count > 0) { + memcpy(fresh->keys, m->keys, (size_t)m->count * sizeof(el_val_t)); + memcpy(fresh->values, m->values, (size_t)m->count * sizeof(el_val_t)); + } + return map_set_in_place(fresh, keyv, value); +} + +/* ── Refcount ops ─────────────────────────────────────────────────────────── */ +/* + * Both retain and release sniff the magic header to decide whether a value + * is a refcounted heap object. For small integers, raw C strings, and any + * value whose magic word doesn't match, both functions are no-ops. This lets + * codegen emit them on every let-binding without having to track types. + * + * Safety: we filter out obvious non-pointers (small magnitudes, misaligned + * addresses) before dereferencing. For any value that passes the filter and + * lives in a mapped page, reading the first 4 bytes is safe — strings start + * with printable ASCII (< 0x80), so their magic word will never collide with + * EL_MAGIC_LIST (0xE1...) or EL_MAGIC_MAP (0xE1...). Random integers that + * happen to look like aligned heap pointers are exceedingly unlikely to land + * on a page whose first 4 bytes match either magic. */ + +static int looks_like_heap_obj(el_val_t v) { + if (v == 0) return 0; + int64_t s = (int64_t)v; + if (s > -0x10000 && s < 0x10000) return 0; /* small ints */ + uintptr_t p = (uintptr_t)v; + if (p < 0x10000) return 0; /* low addresses */ + if (p & 0x7) return 0; /* malloc returns 8-aligned */ + return 1; +} + +void el_retain(el_val_t v) { + if (!looks_like_heap_obj(v)) return; + ElHeader* h = (ElHeader*)(uintptr_t)v; + if (h->magic == EL_MAGIC_LIST || h->magic == EL_MAGIC_MAP) { + h->refcount++; + } +} + +void el_release(el_val_t v) { + if (!looks_like_heap_obj(v)) return; + ElHeader* h = (ElHeader*)(uintptr_t)v; + if (h->magic == EL_MAGIC_LIST) { + if (h->refcount > 0 && --h->refcount == 0) { + ElList* l = (ElList*)h; + free(l->elems); + l->hdr.magic = 0; /* poison so use-after-free is detected */ + free(l); + } + } else if (h->magic == EL_MAGIC_MAP) { + if (h->refcount > 0 && --h->refcount == 0) { + ElMap* m = (ElMap*)h; + free(m->keys); + free(m->values); + m->hdr.magic = 0; + free(m); + } + } } /* ── Batch 2/3 forward decls (defined later in JSON section) ────────────── */ @@ -4046,6 +4223,10 @@ el_val_t native_list_empty(void) { return el_list_empty(); } +el_val_t native_list_clone(el_val_t list) { + return el_list_clone(list); +} + el_val_t native_string_chars(el_val_t sv) { const char* s = EL_CSTR(sv); el_val_t result = el_list_empty(); diff --git a/el-compiler/runtime/el_runtime.h b/el-compiler/runtime/el_runtime.h index da4d968..685f642 100644 --- a/el-compiler/runtime/el_runtime.h +++ b/el-compiler/runtime/el_runtime.h @@ -94,6 +94,20 @@ el_val_t el_abs(el_val_t n); el_val_t el_max(el_val_t a, el_val_t b); el_val_t el_min(el_val_t a, el_val_t b); +/* ── Refcount (ARC) ────────────────────────────────────────────────────────── + * Lists and Maps carry a refcount. Strings and ints do not — el_retain and + * el_release are safe no-ops on non-refcounted values (they sniff a magic + * header at offset 0 and only act if the magic matches). + * + * Codegen emits these at let-binding shadowing, function entry (params), and + * function exit (locals other than the returned value). The refcount lets + * el_list_append and el_map_set mutate in place when uniquely owned (cheap) + * and copy-on-write when shared (preserves persistent semantics across + * accumulator patterns in the compiler itself). */ + +void el_retain(el_val_t v); +void el_release(el_val_t v); + /* ── List ────────────────────────────────────────────────────────────────── */ el_val_t el_list_new(el_val_t count, ...); @@ -101,6 +115,7 @@ el_val_t el_list_len(el_val_t list); el_val_t el_list_get(el_val_t list, el_val_t index); el_val_t el_list_append(el_val_t list, el_val_t elem); el_val_t el_list_empty(void); +el_val_t el_list_clone(el_val_t list); /* ── Map ─────────────────────────────────────────────────────────────────── */ @@ -320,6 +335,7 @@ el_val_t native_list_get(el_val_t list, el_val_t index); el_val_t native_list_len(el_val_t list); el_val_t native_list_append(el_val_t list, el_val_t elem); el_val_t native_list_empty(void); +el_val_t native_list_clone(el_val_t list); el_val_t native_string_chars(el_val_t s); el_val_t native_int_to_str(el_val_t n); diff --git a/el-compiler/src/codegen.el b/el-compiler/src/codegen.el index be0e65f..5406e50 100644 --- a/el-compiler/src/codegen.el +++ b/el-compiler/src/codegen.el @@ -600,7 +600,10 @@ fn cg_stmt(stmt: Map, indent: String, declared: [String]) -> [Strin let cond_c: String = cg_expr(cond) let cond_c = strip_outer_parens(cond_c) emit_line(indent + "while (" + cond_c + ") {") - cg_stmts(body, indent + " ", declared) + // Body lives in its own C block — clone so let-bindings inside the + // loop don't leak into the parent's `declared` list (which would make + // a sibling scope's `let x` emit assignment on an undeclared name). + cg_stmts(body, indent + " ", native_list_clone(declared)) emit_line(indent + "}") return declared } @@ -670,10 +673,15 @@ fn cg_if_stmt(expr: Map, indent: String, declared: [String]) -> Voi let cond_c: String = cg_expr(cond) let cond_c = strip_outer_parens(cond_c) emit_line(indent + "if (" + cond_c + ") {") - cg_stmts(then_stmts, indent + " ", declared) + // Each branch gets its own clone of `declared` — variables let-bound + // inside the then/else block live only in that C scope, and must not + // leak back to the parent (or to the sibling branch) through shared + // list mutation. Cheap shallow copy; the entries (variable name strings) + // are shared. + cg_stmts(then_stmts, indent + " ", native_list_clone(declared)) if has_else { emit_line(indent + "} else {") - cg_stmts(else_stmts, indent + " ", declared) + cg_stmts(else_stmts, indent + " ", native_list_clone(declared)) } emit_line(indent + "}") } @@ -688,7 +696,12 @@ fn cg_for_body(item: String, list_expr: Map, body: [Map, indent: String, declared: [String]) -> [Strin let cond_c: String = cg_expr(cond) let cond_c = strip_outer_parens(cond_c) emit_line(indent + "while (" + cond_c + ") {") - cg_stmts(body, indent + " ", declared) + cg_stmts(body, indent + " ", native_list_clone(declared)) emit_line(indent + "}") return declared } @@ -2120,10 +2120,10 @@ fn cg_if_stmt(expr: Map, indent: String, declared: [String]) -> Voi let cond_c: String = cg_expr(cond) let cond_c = strip_outer_parens(cond_c) emit_line(indent + "if (" + cond_c + ") {") - cg_stmts(then_stmts, indent + " ", declared) + cg_stmts(then_stmts, indent + " ", native_list_clone(declared)) if has_else { emit_line(indent + "} else {") - cg_stmts(else_stmts, indent + " ", declared) + cg_stmts(else_stmts, indent + " ", native_list_clone(declared)) } emit_line(indent + "}") } @@ -2138,7 +2138,9 @@ fn cg_for_body(item: String, list_expr: Map, body: [Map