Status: compiler-core (Compiler.mod) + shell compiled clean with
gm2 -fiso -Wall, and the ISO shell tpshell builds and runs (ESC-key
driven, TP3-style DOS screen redraws). This is the working implementation
companion — the human overview is TP3-COMPILER.md history summary and
RESUME-TP3.md.
pass-3 "too many errors / too many identifiers" cap on compiler-sized whole-program programs)
gm2 -fiso -c Compiler.mod # phase A: small per-module pass
gm2 -fiso -fgen-module-list=modules.lst -o /dev/null \
Compiler.mod Term.o TextBuf.o Posix.o Editor.o # phase B1: build list
gm2 -fiso -fuse-module-list=modules.lst -o tpshell \
Shell.mod Compiler.mod Term.o TextBuf.o Posix.o Editor.o # phase B2: link
(Equivalent make target tpshell in shell/Makefile.) The single gm2 -o
whole-program pass 3 silently caps identifier/error counts — see
build_tpshell.sh.)
Compiler.mod (all ISO-legal, gm2-verifiable)CHAR is
not the ZType; ch = 09H → ORD (ch) = 09H (and likewise 0DH/0AH/0CH).-Wno-): added DropCh/DropB/DropC discard helpers
and wrapped ~39 statement call sites of GetCh, MatchKey, NewSym,
EmCall, EmJmpNear (no output reground clutter; TP3 TP5 cascadepos
waitkey semantics preserved via the editor's ESC wait).AND/OR/NOT on W16-folded CARDINAL (lines ~1233/1246/1454) are
illegal on ZType in gm2 → added BitAnd/BitOr/BitNot (BITSET */+/-
fold, VAL-projected back to LONGINT) and rewrote the operands.Compile error-return params aligned to Compiler.def
(errNo/errPos, was eNo/ePos) — gm2 ISO rejects a disparate name
in the proper procedure.The compiler's whole-program 8086-emit, TEXT-equivalent, pastres and errexit flow are unchanged (mirrors TP3 TPSRC file, ConvertTP3).
/tmp/tp_iso_mods.sh two-phase build → tpshell 120528B ELF, runs,
redraws, ESC quits. make test and editor/editor-round-trips covered in
the earlier TP3-EDITOR-PSEUDOCODE suite.Generated: 2026-09-22