|
|
@@ -98,13 +98,29 @@ not change any emitted image.
|
|
|
|
|
|
## What remains
|
|
|
|
|
|
-Purely mechanical cleanup — no codegen gaps left:
|
|
|
-
|
|
|
-1. Delete the grammar's inline emit (the 533 `QbeGen.*` call sites),
|
|
|
- keeping the AST-building actions.
|
|
|
-2. Retire the `-lower` test flag and the now-degenerate byte-compare
|
|
|
+Cleanup with no codegen gaps left. **Not** purely mechanical: many
|
|
|
+`QbeGen.*` calls are semantic queries or parser state, not emit, and
|
|
|
+must stay — `TopLoop`/`PushLoop`/`PopLoop` (validates `EXIT`),
|
|
|
+`TopWith`/`PushWith`/`PopWith` (validates a bare field name in `WITH`),
|
|
|
+`IsImm`/`Fold2`/`NormInt`/`NormReal`/`StrFold`/… (constant values that
|
|
|
+`Lower` consumes via `NoteConstVal`), `LocFull`, `Mangled`, `ConstInt`.
|
|
|
+Only the true emission calls are removed, production group by group,
|
|
|
+with suite + fixpoint after each.
|
|
|
+
|
|
|
+Done:
|
|
|
+1. Builtin statements (`EXIT`, `INCL/EXCL`, `INC/DEC`, `NEW`, `DISPOSE`).
|
|
|
+2. Control flow (`IF`/`WHILE`/`REPEAT`/`LOOP`/`FOR`/`CASE`), `RETURN`,
|
|
|
+ `HALT`.
|
|
|
+
|
|
|
+Still to do:
|
|
|
+3. Expressions / `Fact` / `Term` (the big one: `CopyOp`, `IntStr`,
|
|
|
+ `Op3*`, `WidenLong`, `Cmp*`, `AddrOf*`, `Set*`, folding), and
|
|
|
+ designators.
|
|
|
+4. Calls (`ArgList`/`ActParam`), declarations/proc headings,
|
|
|
+ imports, classes.
|
|
|
+5. Retire the `-lower` test flag and the now-degenerate byte-compare
|
|
|
tests in `run_tests.sh`.
|
|
|
-3. Remove the dead scaffolding: `LowerSession`, `MaterializeGlobals`,
|
|
|
+6. Remove the dead scaffolding: `LowerSession`, `MaterializeGlobals`,
|
|
|
`SaveSession`/`RestoreSession` and the `SetNoEmit` machinery (once
|
|
|
nothing emits inline), plus the dead `SetLower`/`lowerRequested`.
|
|
|
|