Two coupled defects surfaced during ecdsa cross-tier validation against the asm tier. Defect #28 — _start ignored argv. Invoking `asm/lumbda-gc file.lsp` silently discarded argv[1] and dropped into a REPL that blocked on a pty when run under SSH. Walk argc/argv after init_builtins + prelude load and before repl_top: for each argv[i] starting at i=1, skip arg if it begins with '-' (flag stub), otherwise allocate a Scheme string from the C string, wrap in a 1-element arg list, dispatch through apply_proc_raw on the BI_LOAD builtin. If any non-flag arg ran, jump to repl_exit instead of entering the REPL. Mirrors the c/main.c script-mode semantics. The RET_VAL macro on the builtin return path pops r12/rbp/rbx in an order that corrupts %rbp (it restores the pre-call %r12 into rbp), so the loop counter saves %rbp around the apply_proc_raw call. Defect #30 — eq? was only present under CL_FULL. The plain `lumbda` and `lumbda-gc` binaries shipped without the alias `(define eq? eqv?)`, so any .lsp expecting eq? (every cross-tier file we own) hit "unbound variable: eq?" the moment it tried a status check. Lift that single alias into a new always-on `default_prelude` block with its own `load_default_prelude` loader (modelled after load_cl_full_prelude), and call it unconditionally from _start between rng_seed and the CL_FULL block. Verification: - `make asm-build` clean - `make asm-test`: 158 passed, 0 failed (full suite green) - `(eq? 1 1)` -> #t on all three tiers via stdin pipe AND file arg - `~/git/lumbda/asm/lumbda-gc /tmp/asm-test.lsp` exits 0 with #t printed
68 KiB
Executable file
68 KiB
Executable file