No .MOD decompiled yet — only
compile.txt (74) / pass1.txt (2975) / statement.txt (1793) /
express.txt (3898). Names below are inferred (~ = internal, no header).
COMPILE.DIR/ = COMPILE.MCD (link stub) + PASS1/STATEMEN/EXPRESS.MCD.
compile.txt is a char-compare + byte-copy loop with call .proc24
(~FindKeyword/~StrCmp), i.e. the link stub's keyword-hash helper,
not a parser. Loaded by Scanner.Compile; GENZ80 loaded afterwards
if Compiler.global25.
Token codes used everywhere: Scanner.word5 = current symbol,
word9 = ident class, word11 = text, word12 = type.
| proc | proposed |
|---|---|
| proc4/5 | ~PushTempMark/~PopTempMark (bracket EXPRESS.proc1(err 82)) |
| proc6/7 | ~AllocSymEntry/~LinkSymEntry |
| proc1 | ~InsertSetConst |
| proc2/3 | ~CondInsert/~InsertEntry |
| proc8 | ~OpenScopeEmit (CODEGEN.proc18/21/3) |
| proc12 | ~TypeSizeRec (recursive, self-call) |
| proc13 | ~GetIdent (returns Scanner.word12) |
| proc16 | ~ParseImportItem (Expect(42)=FROM?) |
| proc17 | ~ParseConstDecl |
| proc18 | ~ParseVarDecl |
| proc19 | ~ParseType (largest: enum/subrange/pointer/PROC/record/array) |
| proc14 | ~ParseRecordType (incl. variant) |
| proc15/20/21 | ~ParseFormals/~ParseValParam/~ParseVarParam |
| proc22 | ~ParseFieldList |
| proc23 | ~EvalConstExpr |
| proc25 | ~CloseScopeFixup |
| PROCDE | ParseProcedureDecl |
| MODULD/MODBLO/MAINDE | ParseModuleHead/ParseBlock/ParseMain(DEFINITION/IMPLEMENTATION/PROGRAM) |
| proc28 | ~ParseExportList |
| DCL/DCLS/IMEXDC | ParseOneDecl/ParseDecls/ParseImports (ERRORS.proc11, CODEGEN.proc22 recovery) |
| proc9/33/35/34/36/PASS1 | ~WriteSym/~WriteMcdHeader/~EmitConst/~EmitType/~CheckForwards/Main |
proc1 ~NextSymWrap, proc4 ~ParseStatSeqLoop, proc15 ~EmitJumpFixup, proc2 ~CalcMemOffset, proc3 ~SyncToStatStart.STMT = ParseStatement: switch(word5): 121..130 -> proc10..proc5
(IF/WHILE/REPEAT/LOOP/WITH/CASE/...); ident-led: word9=4 call
(EXPRESS.proc15+Expect(43)=(), =5 assign
(EXPRESS.proc17/18+Expect(27)=:=), =0 error 128.proc5 = ParseFOR (largest frame), proc16 = ParseCASE,
proc6..14 = ParseIF/WHILE/REPEAT/..., proc17/18/19 block tails,
BODY = ParseBeginBlock, STATSE = GuardedStatSeq (saves
Scanner.word2/25, CODEGEN.word2, SYMTAB.word5; ERRORS.proc11 recovery).EXPRES = ParseExpression: proc48 SimpleExpr then relops 51..57
(=/#/</<=/>/>=/IN), CODEGEN.proc17(23)+proc6, proc35-fold,
proc27-join; const path CODEGEN.proc4, general CODEGEN.proc10(4).proc48 ~ParseSimpleExpr, proc37/38/40/41/42 ~Term/Factor/Set/Call/Cast,
proc21/20/15 ~DesignatorBase/Selector/Tail,
ASSIGN ~ParseAssign (stmt + func-result),
proc35 ~FoldConstOp, proc9 ~MatchOpClass,
proc7/8/13/14/16 ~ConstToCard/Int/GetVal/GetType/EvalConst,
proc43..46 ~ExpandStdProc, proc47/51/50/49 ~FoldRel/CheckRel/EmitCmp/EmitRange,
proc18/19 ~Load/StoreOperand, proc4/5 ~Push/PopExprDesc.Shared: Scanner.proc1/4/8/9/13/17/19/20 (Get/Accept/Expect/Test/OpenScope/entries),
EXPRESS.proc1 central error (47/52/61/82/73/74), CODEGEN.proc1/3/4/6/10/12/13/14/16/17/18/19/21/22.
Decompile order: EXPRES/proc48/proc35/proc9 -> STMT/STATSE/proc4 -> CASE/FOR ->
Pass1 proc13/19/14 -> DCL/DCLS/IMEXDC -> PROCDE/MODBLO/MAINDE -> WriteSym.