lua: table constructors (array/hash/computed/mixed/nested) +20 tests
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Has been cancelled

This commit is contained in:
2026-04-24 17:17:35 +00:00
parent 2b448d99bc
commit fe0fafe8e9
2 changed files with 81 additions and 1 deletions

View File

@@ -482,6 +482,63 @@ cat > "$TMPFILE" << 'EPOCHS'
(epoch 579)
(eval "(lua-eval-ast \"local a = 0 local b = 0 local function m() return 7, 11 end a, b = m() return a + b\")")
;; ── Phase 3: table constructors ────────────────────────────────
;; Array part
(epoch 600)
(eval "(lua-eval-ast \"local t = {10, 20, 30} return t[1]\")")
(epoch 601)
(eval "(lua-eval-ast \"local t = {10, 20, 30} return t[3]\")")
(epoch 602)
(eval "(lua-eval-ast \"local t = {10, 20, 30} if t[4] == nil then return 1 else return 0 end\")")
;; Hash part
(epoch 610)
(eval "(lua-eval-ast \"local t = {x = 1, y = 2} return t.x + t.y\")")
(epoch 611)
(eval "(lua-eval-ast \"local t = {name = \\\"bob\\\", age = 30} return t.name\")")
(epoch 612)
(eval "(lua-eval-ast \"local t = {name = \\\"bob\\\", age = 30} return t.age\")")
;; Computed keys
(epoch 620)
(eval "(lua-eval-ast \"local k = \\\"answer\\\" local t = {[k] = 42} return t.answer\")")
(epoch 621)
(eval "(lua-eval-ast \"local t = {[1+1] = \\\"two\\\"} return t[2]\")")
(epoch 622)
(eval "(lua-eval-ast \"local t = {[\\\"a\\\" .. \\\"b\\\"] = 99} return t.ab\")")
(epoch 623)
(eval "(lua-eval-ast \"local t = {[true] = \\\"yes\\\", [false] = \\\"no\\\"} return t[true]\")")
;; Mixed array + hash
(epoch 630)
(eval "(lua-eval-ast \"local t = {1, 2, 3, key = \\\"v\\\"} return t[2]\")")
(epoch 631)
(eval "(lua-eval-ast \"local t = {1, 2, 3, key = \\\"v\\\"} return t.key\")")
;; Separators
(epoch 640)
(eval "(lua-eval-ast \"local t = {1, 2, 3,} return t[3]\")")
(epoch 641)
(eval "(lua-eval-ast \"local t = {1; 2; 3} return t[2]\")")
(epoch 642)
(eval "(lua-eval-ast \"local t = {1, 2; 3, 4} return t[4]\")")
;; Nested
(epoch 650)
(eval "(lua-eval-ast \"local t = {{1, 2}, {3, 4}} return t[2][1]\")")
(epoch 651)
(eval "(lua-eval-ast \"local t = {inner = {a = 1, b = 2}} return t.inner.b\")")
;; Dynamic values
(epoch 660)
(eval "(lua-eval-ast \"local x = 7 local t = {x, x * 2, x * 3} return t[2]\")")
(epoch 661)
(eval "(lua-eval-ast \"local function f(n) return n + 1 end local t = {f(1), f(2), f(3)} return t[3]\")")
;; Functions as values
(epoch 670)
(eval "(lua-eval-ast \"local t = {fn = function(x) return x * 2 end} return t.fn(5)\")")
EPOCHS
OUTPUT=$(timeout 60 "$SX_SERVER" < "$TMPFILE" 2>/dev/null)
@@ -744,6 +801,28 @@ check 577 "single-assign truncates to 1st" '5'
check 578 "empty return → all nil" '99'
check 579 "multi-assign (non-local)" '18'
# ── Phase 3: table constructors ────────────────────────────────
check 600 "array t[1]" '10'
check 601 "array t[3]" '30'
check 602 "array out-of-range is nil" '1'
check 610 "hash t.x+t.y" '3'
check 611 "hash name lookup" '"bob"'
check 612 "hash age lookup" '30'
check 620 "computed [k]=v" '42'
check 621 "computed [1+1]" '"two"'
check 622 "computed [concat]" '99'
check 623 "boolean key [true]" '"yes"'
check 630 "mixed array part" '2'
check 631 "mixed hash part" '"v"'
check 640 "trailing comma" '3'
check 641 "semicolon separators" '2'
check 642 "mixed separators" '4'
check 650 "nested array" '3'
check 651 "nested hash" '2'
check 660 "dynamic pos values" '14'
check 661 "function calls as values" '4'
check 670 "function-valued field + call" '10'
TOTAL=$((PASS + FAIL))
if [ $FAIL -eq 0 ]; then
echo "ok $PASS/$TOTAL Lua-on-SX tests passed"

View File

@@ -53,7 +53,7 @@ Each item: implement → tests → tick box → update progress log.
### Phase 3 — tables + functions + first PUC-Rio slice
- [x] `function` (anon, local, top-level), closures
- [x] Multi-return: return as list, unpack at call sites
- [ ] Table constructors (array + hash + computed keys)
- [x] Table constructors (array + hash + computed keys)
- [ ] Raw table access `t.k` / `t[k]` (no metatables yet)
- [ ] Vendor PUC-Rio 5.1.5 suite to `lib/lua/lua-tests/` (just `.lua` files)
- [ ] `lib/lua/conformance.sh` + Python runner (model on `lib/js/test262-runner.py`)
@@ -82,6 +82,7 @@ Each item: implement → tests → tick box → update progress log.
_Newest first. Agent appends on every commit._
- 2026-04-24: lua: phase 3 — table constructors verified (array, hash, computed keys, mixed, nested, dynamic values, fn values, sep variants). 205 total tests.
- 2026-04-24: lua: multi-return — `lua-multi` tagged value, `lua-first`/`lua-nth-ret`/`lua-pack-return` runtime, tail-position spread in return/local/assign. 185 total tests.
- 2026-04-24: lua: phase 3 — functions (anon/local/top-level) + closures verified (lexical capture, mutation-through-closure, recursion, HOFs). 175 total tests.
- 2026-04-24: lua: phase 2 transpile — arithmetic, comparison, short-circuit logical, `..` concat, if/while/repeat/for-num/local/assign. 157 total tests green.