v3-strcat, 128/128 green)Pipeline: Coco/R M2.atg (1748 lines, 73 productions) → gm2-built
M2 → QBE .ssa → qbe → cc → run. SymTab.mod 1623 lines,
QbeGen.mod 2193 lines. Regenerate with
cd compiler && ./build.sh && ./run_tests.sh.
Legend: ✅ done · 🔄 partial · ⏸ not started / deferred.
_), 0x/0X hex (no H), reals with E
exponents, # < <= > >= =, // + nested (* *),
strings '…'/"…", 0x array bounds.NOT/AND/OR (no ~/&), unary minus at expr start,
no octal B/C suffixes.INTEGER/CARDINAL/SHORTINT/LONGINT (one family, QBE w),
REAL/LONGREAL (d, widened), BOOLEAN, CHAR.CASE labels, CONST and as parameter/value types).ARRAY [lo..hi,…] (multi-dim) and open ARRAY OF formals.RECORD (flat blobs, nested inline, array fields as pointers).SET OF bool/char/subrange (multi-word masks).POINTER TO, NIL as a real type.UCHAR (32-bit codepoint) + U'a'/U"…" literals (strict
RFC3629 decode → 234 on bad bytes) and UCHR/CHR8/UORD.TYPE T; + completion in the implementation.RECORD CASE).CONST (integer/char/real literals, folded), VAR, TYPE,
PROCEDURE headings + bodies, FORWARD.DEFINITION/IMPLEMENTATION modules, IMPORT/FROM … IMPORT,
EXPORT (parsed), nested local MODULE (parsed; lowering pending).BEGIN init bodies.IF/ELSIF/ELSE, CASE (labels, ranges, ELSE),
WHILE, REPEAT/UNTIL, LOOP/EXIT, FOR/TO/BY (static sign),
WITH (single/multi/nested), RETURN (232-checked),
NEW/DISPOSE (builtins), bare and parenthesized calls.HIGH/LEN; ⏸ GOTO/labels.+ - * / DIV MOD, comparisons, eager
AND/OR/NOT, IN, set ops (+ - * / = union/diff/inter/symdiff),
pointer =/#, int→real conversion, ^ deref, indexing, field
access, qualified L.x/L.P.=/# (content), string + (concatenation, incl. a
CHAR operand), string assignment (content copy, truncated to the
array capacity, NUL-terminated), LEN/LENGTH of arrays and string
literals.NIL comparisons/assignment.VAL/ADR/TSIZE/SIZE/HIGH/LEN work. ⏸ Result suffixes
(F()^).VAR params, function results, recursion, mutual
recursion (FORWARD), nested procedures with static-link display
(any depth), array/record/set/pointer params, open-array VAR
formals.lib.def lib.mod prog.mod → one image;
module init functions; opaque completion.$abort, rc 134), multi-word sets, alloc8 heap
(malloc/free), static-link frames, deterministic %tN/@LN,
whole-image buffering.REAL runtime const flush, string literals as descriptors.runtime/syslib/Trap (traps are $abort for now), recursive
DISPOSE.invalid call, 234 invalid UTF-8 in U-literal, plus
file:line:col console format.runtime/syslib: SysShim, FileIO, Utf8 (UTF-8 codec).stdlib: SysIO, TextIO (+ UTF-8 U*), WholeIO, Math,
Strings, CharClass, Files, Conversions, RealIO,
ProgramArgs, IOChan, Storage.CLASS lowering (declared + checked only); Unicode
UString whole-string assignment; strict 231 def/impl signature
checks; IOChan beyond the standard streams; variant records. (ISO
ConvResults enumerations are now expressible.) The TopSpeed
legacy grammar (TopSpeed-V3-M2.atg) is a separate sidecar, not
merged.(Self-hosting is reached: bootstrap/fixpoint.sh builds a
byte-identical compiler image; stdlib/ + runtime/syslib are in
use. See docs/summary_selfhosting.md.)
Next: strict 231 def/impl signature checks, variant records,
IOChan over files. Roadmap: docs/plan.md,
docs/blaise-phases-map.md.