|
|
@@ -1,7 +1,7 @@
|
|
|
(* Renamed for readability. Semantics unchanged. Original identifiers: see docs/compiler/ + src/compiler/RENAME-MAP.md. *)
|
|
|
IMPLEMENTATION MODULE Errors;
|
|
|
-IMPORT Compiler, Scanner, Files, ComLine, Texts, Terminal, Loader, Editor, SymTab, CodeGen;
|
|
|
-FROM SYSTEM IMPORT MOVE, ADR, BYTE;
|
|
|
+IMPORT Scanner, Files, Texts, Terminal, Loader, SymTab, EditPos, CodeGen; (* Compiler/ComLine dropped: unused (original keeps them as dep-only slots; every SYM costs heap) *)
|
|
|
+FROM SYSTEM IMPORT MOVE, ADR, BYTE, WORD;
|
|
|
FROM STORAGE IMPORT MARK, RELEASE;
|
|
|
|
|
|
CONST LF = 12C; CR = 15C; EOF = 32C; DEL = 177C;
|
|
|
@@ -119,20 +119,19 @@ BEGIN
|
|
|
freeRoom := ADR(backupName) - moveSize;
|
|
|
IF editBufSize > freeRoom THEN
|
|
|
spillSize := editBufSize - freeRoom;
|
|
|
- backupName := "@:CBACKUP.$$$";
|
|
|
- backupName[0] := ComLine.inName[0];
|
|
|
+ backupName := "CBACKUP.$$$"; (* original has no drive-letter patch (012b: 11-char literal, no COMLINE ref) *)
|
|
|
Files.Create(backupFile, backupName);
|
|
|
Files.WriteBytes(backupFile, moveSize-spillSize, spillSize);
|
|
|
Files.SetPos(backupFile, LONG(0));
|
|
|
Scanner.CheckStk(moveSize - spillSize);
|
|
|
END; (* 018a *)
|
|
|
- Editor.editPosition := Scanner.tokPos;
|
|
|
- Editor.Edit;
|
|
|
- savedEditPos := Editor.editPosition;
|
|
|
+ EditPos.editPos := Scanner.tokPos;
|
|
|
+ Loader.Call("EDITERR");
|
|
|
+ savedEditPos := EditPos.editPos;
|
|
|
IF editBufSize > freeRoom THEN
|
|
|
Scanner.CheckStk(moveSize);
|
|
|
IF Files.ReadBytes(backupFile, moveSize-spillSize, spillSize)<>spillSize THEN
|
|
|
- Editor.editOkFlag := FALSE
|
|
|
+ EditPos.editOk := FALSE
|
|
|
END;
|
|
|
Files.Delete(backupFile);
|
|
|
END; (* 01B2 *)
|
|
|
@@ -140,7 +139,7 @@ BEGIN
|
|
|
heap := savedStack + 60;
|
|
|
savedStack^ := FREEMARKER;
|
|
|
mainModule := savedModList;
|
|
|
- IF Editor.editOkFlag THEN
|
|
|
+ IF EditPos.editOk THEN
|
|
|
IF doSymtabRollback THEN SymTab.RestoreAfterEdit END;
|
|
|
RAISE usererror
|
|
|
END;
|
|
|
@@ -164,11 +163,11 @@ BEGIN
|
|
|
slot := 0;
|
|
|
topSlot := 16;
|
|
|
WHILE slot <= topSlot DO
|
|
|
- entry := SymTab.rollbackStack^[slot];
|
|
|
+ entry := SymTab.scopeChain^[slot];
|
|
|
WHILE (entry <> NIL) AND (cutAddr <= ADDRESS(entry)) DO
|
|
|
entry := entry^.link0
|
|
|
END;
|
|
|
- SymTab.rollbackStack^[slot] := entry;
|
|
|
+ SymTab.scopeChain^[slot] := entry;
|
|
|
INC(slot);
|
|
|
END;
|
|
|
END TruncateScopeStack;
|
|
|
@@ -251,9 +250,9 @@ END WriteTypeOfSymbol;
|
|
|
PROCEDURE WriteSymbolToken(mode: CHAR);
|
|
|
VAR ch: CHAR;
|
|
|
VAR idx: CARDINAL;
|
|
|
-VAR idBuf: Scanner.Identifier;
|
|
|
+VAR idBuf: Scanner.Identifier; (* nominal type required: v1.00 checks proc-var array args nominally; original passes idBuf directly (0390: load dword27 + eb) *)
|
|
|
BEGIN
|
|
|
- idx := Scanner.keyHash(idBuf, mode);
|
|
|
+ idx := Scanner.keyHash(ADR(idBuf), mode); (* original passes idBuf directly to (Identifier,CHAR); v1.00 retail rejects Buf/ADDRESS-vs-Identifier nominally (T2/T4 probes) though codegen is identical (U1/U2) — ADR() adaptation *)
|
|
|
IF idx # 0 THEN WriteString(idBuf)
|
|
|
ELSE
|
|
|
Terminal.WriteChar('"');
|
|
|
@@ -267,7 +266,7 @@ BEGIN
|
|
|
Terminal.WriteChar(listPipeChar);
|
|
|
ELSE
|
|
|
ch := '!';
|
|
|
- WHILE (ch < DEL) AND (Scanner.charClas^[ORD(ch)] # mode) DO INC(ch) END;
|
|
|
+ WHILE (ch < DEL) AND (Scanner.charClas^[ORD(ch)] # ORD(mode)) DO INC(ch) END; (* ORD(mode): zero-cost; table elements are CARDINAL-typed *)
|
|
|
IF ch < DEL THEN Terminal.WriteChar(ch) END;
|
|
|
END; (* 0433 *)
|
|
|
END; (* 0433 *)
|
|
|
@@ -277,12 +276,12 @@ END WriteSymbolToken;
|
|
|
|
|
|
PROCEDURE WriteFoundToken;
|
|
|
BEGIN
|
|
|
- IF Scanner.curSym = 0C THEN
|
|
|
+ IF Scanner.curSym = 0 THEN (* 0C spelled 0: original emits unary eq0 (040d), i.e. CARDINAL comparison; same value *)
|
|
|
IF Scanner.isLit THEN WriteString('literal "') ELSE WriteString('identifier "') END;
|
|
|
WriteString(Scanner.tokBuf);
|
|
|
Terminal.WriteChar('"');
|
|
|
ELSE
|
|
|
- WriteSymbolToken(Scanner.curSym)
|
|
|
+ WriteSymbolToken(CHR(Scanner.curSym))
|
|
|
END; (* 046E *)
|
|
|
WriteString(" found")
|
|
|
END WriteFoundToken;
|
|
|
@@ -483,7 +482,7 @@ BEGIN
|
|
|
IF 4 IN want THEN WriteString(" or Set") END;
|
|
|
WriteString(" Type");
|
|
|
IF NOT( {7,8} - want = {} ) THEN
|
|
|
- WriteString(",exluding");
|
|
|
+ WriteString(",excluding");
|
|
|
IF NOT( 7 IN want ) THEN WriteString(" LONGINT and") END;
|
|
|
WriteString(" REAL,");
|
|
|
END; (* 085b *)
|