Step-8 prep: make V3 able to compile the compiler's own sources by removing gm2-dialect syntax from them (Kowarsch/Redux cleanups). Suite 103/103, build warning-free.
A scripted conversion (skipping string literals and (* *) comments)
applied to M2.atg, SymTab.mod, QbeGen.mod, compiler.frm,
parser.frm, scanner.frm:
& → AND, ~ → NOT, <> → #.NNC → CHR(decimal)
(0C→CHR(0), 15C→CHR(13), 32C→CHR(26), 177C→CHR(127), …).(FileIO.def/.mod untouched — it stays the host library for the
stage-1 build.)
Result: the sources are Redux-clean and still compile under gm2; the
full suite is green. Generated M2S/M2P/M2 are regenerated from
the swept frames/grammar.
FROM SYSTEM IMPORT TSIZE; (and any pervasive name) now parses:
TSIZE/SIZE/ADR/HIGH/LEN/CHR/ORD/VAL/ABS/INC/DEC
are accepted as import items and ignored (the built-in applies). gm2
still needs the import, V3 ignores it — one source, both compilers.
SymTab (still fails)Running V3 over SymTab.def + SymTab.mod (with Storage,
SysShim, FileIO) surfaces the next work:
ARRAY [0 .. MaxPend - 1] are "not supported yet": the grammar
only folds literals (ConstInt on an immediate), while a named
CONST loads as a temporary. V3 must fold constant expressions
(named CONSTs, +/-) at compile time. This is the dominant
cause of the mass of 230s.TSIZE/SIZE. TSIZE(ScopeNode) passes a type
name, not a designator; V3's built-in takes a designator.ident expected at END of records,
stray 201s) that clear once the above are fixed.These are the core of step 8 proper (plus cross-stage FileIO
selection and the fixpoint script).
compiler/src/M2.atg (lenient imports; swept actions),
SymTab.mod, QbeGen.mod, compiler.frm, parser.frm,
scanner.frm (Redux-clean). Harness/suite unchanged (103/103).