From 0f9d361a921515e03227c639277bf9fe55108c61 Mon Sep 17 00:00:00 2001 From: giles Date: Sat, 25 Apr 2026 12:19:07 +0000 Subject: [PATCH] plans: tick var hoisting, add progress log entry --- plans/js-on-sx.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plans/js-on-sx.md b/plans/js-on-sx.md index 59fb903e..49df6cac 100644 --- a/plans/js-on-sx.md +++ b/plans/js-on-sx.md @@ -124,7 +124,7 @@ Each item: implement → tests → update progress. Mark `[x]` when tests green. - [x] Closures — work via SX `fn` env capture - [x] Rest params (`...rest` → `&rest`) - [x] Default parameters (desugar to `if (param === undefined) param = default`) -- [ ] `var` hoisting (deferred — treated as `let` for now) +- [x] `var` hoisting (shallow — collects direct `var` decls, emits `(define name :js-undefined)` before funcdecls) - [ ] `let`/`const` TDZ (deferred) ### Phase 8 — Objects, prototypes, `this` @@ -158,6 +158,8 @@ Each item: implement → tests → update progress. Mark `[x]` when tests green. Append-only record of completed iterations. Loop writes one line per iteration: date, what was done, test count delta. +- 2026-04-25 — **`var` hoisting.** Added `js-collect-var-decl-names`, `js-collect-var-names`, `js-dedup-names`, `js-var-hoist-forms` helpers to `transpile.sx`. Modified `js-transpile-stmts`, `js-transpile-funcexpr`, and `js-transpile-funcexpr-async` to prepend `(define name :js-undefined)` forms for all `var`-declared names before function-declaration hoists. Shallow collection (direct statements only). 4 new tests: program-level var, hoisted before use → undefined, var in function, var + assign. 529/530 unit (+4), 148/148 slice unchanged. Commit `11315d91`. + - 2026-04-25 — **ASI (Automatic Semicolon Insertion).** Lexer: added `:nl` (newline-before) boolean to every token dict; `skip-ws!` sets it true when consuming `\n`/`\r`; `scan!` resets it to `false` at the start of each token scan. Parser: new `jp-token-nl?` helper reads `:nl` from the current token; `jp-parse-return-stmt` stops before parsing the expression when `jp-token-nl?` is true (restricted production: `return\nvalue` → `return undefined`). 4 new tests (flag presence, flag value, restricted return). 525/526 unit (+4), 148/148 slice unchanged. Commit `ae86579a`. - 2026-04-23 — scaffold landed: lib/js/{lexer,parser,transpile,runtime}.sx stubs + test.sh. 7/7 smoke tests pass (js-tokenize/js-parse/js-transpile stubs + js-to-boolean coercion cases).