|
|
@@ -117,32 +117,26 @@ Done:
|
|
|
below.)
|
|
|
|
|
|
Still to do:
|
|
|
-4. **Expressions: PARTIALLY DONE (2026-10-08).** The runtime emit
|
|
|
- has been removed from `SimExpr`, `Term`, `Expr` and `Fact`'s
|
|
|
- always-runtime branches; a runtime result is the non-constant
|
|
|
- sentinel `"@"` (which `IsImm`/`ConstInt` reject), while constant
|
|
|
- folding (`NegFold`/`Fold2`/`StrFold`) and every check stay. This
|
|
|
- works because those productions' values only feed further value ops
|
|
|
- and constant checks.
|
|
|
- **The rest is one coupled change:** `Design` → `Fact` → `ArgList` →
|
|
|
- `ActParam` plus the `NoteAddr`/`AddrOfVal` chain. `Fact` records
|
|
|
- `NoteAddr(q, qd)`/`AddrOf(qn, qa)` and `ActParam` recovers the
|
|
|
- VAR-actual address with `AddrOfVal(qe, qa)` — and the note key is the
|
|
|
- actual's *emitted* value, so dropping `ArgList`'s `CallBegin` alone
|
|
|
- (fewer `NewTemp`s) shifts the keys and breaks calls (verified: 75
|
|
|
- suite failures). To finish: `Design` emits nothing (literal for a
|
|
|
- constant, `"@"` otherwise), `Fact` drops the notes, `ActParam`
|
|
|
- replaces `AddrOfVal` with an AST-kind addressability check and drops
|
|
|
- `CallArg`, then `ArgList` drops `CallBegin`/`CallEnd`; afterwards
|
|
|
- `NoteAddr`/`AddrOfVal`/`AddrOf` in `QbeGen` are dead.
|
|
|
-5. **Calls, proc headings, imports, classes: BLOCKED too, by fused
|
|
|
- validation.** The `QbeGen` emit functions double as semantic
|
|
|
- checks and the grammar depends on their result: `QbeGen.CallArg`
|
|
|
- (`IF NOT … THEN SemError(233)`), `AddrOfVal` (VAR-actual address +
|
|
|
- 233), `FuncParam` (`IF NOT …` on a heading). Removing the calls
|
|
|
- would remove error detection, so this needs the checks
|
|
|
- reimplemented in `SymTab`/the grammar first — again a real change,
|
|
|
- not cleanup.
|
|
|
+4. **Expressions/designators/calls: DONE (2026-10-08).** The runtime
|
|
|
+ emit is gone from `SimExpr`, `Term`, `Expr`, `Fact`, `Design`,
|
|
|
+ `ResultComp`, `ArgList`, `ActParam` and assignment; a runtime result
|
|
|
+ is the non-constant sentinel `"@"` (which `IsImm`/`ConstInt`
|
|
|
+ reject), while constant folding (`NegFold`/`Fold2`/`StrFold`) and
|
|
|
+ every check stay.
|
|
|
+ The coupled change that had blocked this landed together: `Fact`
|
|
|
+ drops the `NoteAddr` chain, `ActParam` checks VAR-actual
|
|
|
+ addressability by AST kind (`NkDesignator`, or `NkStrLit`) instead
|
|
|
+ of the `NoteAddr`/`AddrOfVal` chain and drops `CallArg`, and
|
|
|
+ `ArgList` drops `CallBegin`/`CallEnd`. (`NoteAddr`/`AddrOfVal`
|
|
|
+ remain, now used only by `Lower` for its own emit.)
|
|
|
+5. **Proc headings, set/ctor literals, string pooling: remaining.**
|
|
|
+ `ProcHeading` still calls `BeginFunc`/`FuncParam`/`EndFuncHeader`/
|
|
|
+ `EndFunc`/`Mangled`/`SetFuncRes`/`AbortFunc`; note `FuncParam` is a
|
|
|
+ check that relies on `BeginFunc` resetting `nPar`, so these must be
|
|
|
+ split rather than dropped. `SetLit`/`TypedBraceLit`
|
|
|
+ (`NewSetTemp`/`SetZero`/`SetRange`/`SetBit`/`Ctor*`) and the
|
|
|
+ `DeclStr`/`DeclUStr` string pool are value-ish; `CopyOp`/`IsImm`/
|
|
|
+ `IntStr`/`Fold2`/`Norm*`/`Conv*` are the value layer and stay.
|
|
|
6. Retire the `-lower` test flag and the now-degenerate byte-compare
|
|
|
tests in `run_tests.sh`.
|
|
|
7. Remove the dead scaffolding. Done 2026-10-08: `LowerSession`,
|