State: master at tag v3-wrap-modules (bdcefbb). Suite
177/177, fixpoint OK (2,899,706 bytes). Working tree clean
except the user's compiler/toto.mod.
The single biggest blocker identified this session is the
single-pass, no-AST frontend (declaration-before-use, emit-during-
parse). It is the root cause of: text-patched forward variables,
forward procedures needing a DEFINITION, set values in CONST, and
the statement-context suffix difficulty.
Decided plan for tomorrow: options 1 and 2.
CONST constructors) resolve naturally. This would
delete the FwdPatchAll / placeholder / text-rewriting machinery.FlushPend
discipline to procedure bodies).Suggested order: do 2 first as the structural stepping stone, then 1 if the goal is to compile gm2's corpus as-is. Ask/confirm the long-term target before committing to 1: "compile gm2 corpus as-is" (→ both) vs "clean classic Modula-2 that self-hosts" (→ neither is a blocker; forward references stay out of scope).
Work on a branch off v3-session-2026-10-01; run fixpoint.sh and
run_tests.sh after every increment; revert the increment if either
fails; commit only when both are green.
| Tag | Commit | What |
|---|---|---|
| (prev) | 678f20e |
showcase21: expression result suffixes, coroutines, core library |
v3-fwdvars-resultsfx |
a613e7b |
forward module-level variables, expression result suffixes, LongIO/LongWholeIO/DynamicStrings/SysStorage |
v3-wrap-modules |
05d9bd0 |
StdChans, TimeString, wrapclock, wraptime, wrapc |
v3-wrap-modules |
bdcefbb |
showcase22 + docs/summary_wrap-modules.md |
Docs: docs/language-report.md (feature set + gaps),
docs/summary_fwdvars-resultsfx.md, docs/summary_wrap-modules.md.
ChanConsts and StreamFile are written and parked in
docs/wip/ (not compiled into the tree). They are blocked by a single
missing language feature:
Aggregate (set) values in
CONSTdeclarations.read = FlagSet{readFlag}— and evenCONST b = BITSET{0}— is rejected withnot supported yet.
Important precision: this is not a "typed set constructor"
problem. T{…} constructors already work in expression/assignment
position, including a := FSet{r} over an enum base. The gap is
specifically that ConstDecl (compiler/src/M2.atg) accepts only
ClArray/ClRecord/ClClass/ClStr/ClUStr as aggregate constants
and has no set case; a set value has no single immediate operand.
It touches the riskiest area of the frontend (M2.atg) across
ConstDecl, TypedBraceLit/BraceElem and Design, plus new
SymTab set-word storage and QbeGen set-constant materialisation —
a multi-step change, each step needing the full
build → suite → fixpoint loop. Today's session showed that grammar
edits here can silently break self-hosting; doing it unreliably would
risk the green state.
Work on a branch off bdcefbb; after every increment run
./bootstrap/fixpoint.sh and cd compiler && ./build.sh &&
./run_tests.sh. Revert the increment (git checkout -- compiler/src)
if either fails. Commit only when both are green.
Increments:
SymTab: store a set constant's bit words per symbol
(SetSymSet/GetSymSet), reusing SymNode.val or a small array.QbeGen: SetConstBegin/SetConstBit/SetConstEnd accumulating words,
and SetConstLoad(name) materialising NewSetTemp + Zero +
word stores at a use site.constCtx flag set in ConstDecl; in TypedBraceLit
(set branch) accumulate words when constCtx; ConstDecl stores
them; Design's KindConst + ClSet calls SetConstLoad.docs/wip/chanconsts.* and docs/wip/streamfile.*
(move back to stdlib/), add them to run_tests.sh, and add a
wrapflags.mod test.docs/language-report.md §9)GOTO/labels.F()[i] := x).BITSET is not accepted as a function-result type (hence
wrapc.ReadOnly/WriteOnly return CARDINAL).cd ~/Projets/Projets-Modula2/MyWork/m2compiler-V3
./bootstrap/fixpoint.sh # FIXPOINT OK
cd compiler && ./build.sh && ./run_tests.sh # 177/177