v3-charcat-convresults, 139/139 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),
including variant records (RECORD … ; CASE tag : T OF … END): plain
fields pack before the tag, each branch's fields overlay after it.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), UCHR/CHR8/UORD, U"…"
whole-string assignment to a 1-D ARRAY OF UCHAR, +
concatenation of U"…" (and single-codepoint operands), and
LEN/LENGTH/HIGH of a UString.TYPE T; + completion in the implementation.RECORD CASE … OF … END); ⏸ whole-record
equality/assignment for variants is 236 (overlapping storage).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.VAR-ness are compared against the
DEFINITION (was arity-only).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 for literals,
CHAR arrays and CHAR operands), string assignment (content copy,
truncated to the array capacity, NUL-terminated), LEN/LENGTH of
arrays and string literals. UString +/LEN likewise.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; strict 235 signature
checks between a definition and its implementation.$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,
235 implementation does not match definition, 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 (layered on IOChan),
Conversions (ISO ConvResults statuses + BOOLEAN shortcuts),
RealIO, ProgramArgs,
IOChan (streams + files; Position/Seek/Rewind), Storage.CLASS lowering — declared and checked only (fields,
methods, single inheritance, VIRTUAL); bodies/dispatch need a
receiver-passing design (see docs/summary_class-lowering.md).
⏸ VAL(LONGINT|REAL, x) and long→int narrowing (V3 has no 64→32
conversion; Conversions works around it). 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: variant records, UString assignment, Files on IOChan.
Roadmap: docs/plan.md, docs/blaise-phases-map.md.