| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- DEFINITION MODULE Compiler ;
- (* TP3 single-pass Pascal -> 8086 compiler, in GNU Modula-2 (-fiso).
- Mirrors the original Turbo Pascal 3.0 compiler (TPSRC6 'turbo' entry,
- TPSRC7-10): a one-pass parser that reads the shared TextBuf as source
- and emits 8086 machine code directly into an internal code buffer, a
- patch list resolving forward references, TP3-style error reporting
- (error number + relative text position) and code/data size accounting.
- The shell (CmdCompile) will call Compile, then jump the editor to
- errPos on failure - exactly like the original errexit + editor2 path. *)
- FROM SYSTEM IMPORT BYTE ;
- FROM CompilerShared IMPORT ERes ;
- FROM CompilerSymbols IMPORT SymEntry ;
- PROCEDURE Compile (VAR errNo, errPos : CARDINAL) : BOOLEAN ;
- (* Compile the current TextBuf as a Pascal program. Returns TRUE on
- success (sizes available via CodeBytes / DataBytes). On failure
- returns FALSE, errNo carries the TP3-style error number and errPos
- the relative source offset (0-based) for the editor. *)
- PROCEDURE SetSource (path : ARRAY OF CHAR) ;
- (* Name the file the current TextBuf was loaded from. Only its directory is
- used: a {$I file} directive resolves the name against the including file's
- directory, so the compiler has to know where that file came from. The
- loaders (Shell.LoadWorkFile, CompileTest/ComTest LoadFile) call this; an
- unset name means includes resolve against the current directory. *)
- PROCEDURE CodeBytes () : CARDINAL ;
- (* emitted code size in bytes *)
- PROCEDURE DataBytes () : CARDINAL ;
- (* emitted data size in bytes - the program's own data, not counting the
- runtime or the fixed 4 KiB gap between code and data *)
- PROCEDURE ImageBytes () : CARDINAL ;
- (* total linked image size = runtime + program. This is what a .COM writer
- must emit, padded on to DataBase + DataBytes by the linker. *)
- PROCEDURE DataBase () : CARDINAL ;
- (* image-absolute offset of the data area, rtSz + 1000H. The linker places
- the program's globals here and zero-fills the gap after the code. *)
- PROCEDURE ImageByteAt (i : CARDINAL) : BYTE ;
- (* i-th byte of the whole image, runtime included, 0 past the end. This is
- what a .COM would actually start with. *)
- PROCEDURE CodeByteAt (i : CARDINAL) : BYTE ;
- (* i-th byte of the emitted image (0 past the end), so tests can check the
- generated 8086 code itself and not only its size *)
- (* Internal interface used by the expression and I/O modules. These are not
- part of the public shell/linker API. *)
- PROCEDURE Assignment (r : ERes) ;
- PROCEDURE BoundsOf (r : ERes ; VAR lo, hi : CARDINAL) : BOOLEAN ;
- PROCEDURE Compound () ;
- PROCEDURE DefBuiltins () ;
- PROCEDURE DefConst () ;
- PROCEDURE DefLabelPart () ;
- PROCEDURE DefPart () ;
- PROCEDURE DefType () ;
- PROCEDURE DefVar () ;
- PROCEDURE EmAddBxAx () ;
- PROCEDURE EmAddDiAx () ;
- PROCEDURE EmAddDiImm (n : CARDINAL) ;
- PROCEDURE EmAddSp (n : CARDINAL) ;
- PROCEDURE EmAndAlDl () ;
- PROCEDURE EmAndAlImm (v : CARDINAL) ;
- PROCEDURE EmAndClImm (v : CARDINAL) ;
- PROCEDURE EmCmpAlImm (v : CARDINAL) ;
- PROCEDURE EmCrtSeq (which : CARDINAL) ;
- PROCEDURE EmFileIo (reading : BOOLEAN ; fileLocal : BOOLEAN ; fileOff : CARDINAL ; addrKind : CARDINAL ; addrLocal : BOOLEAN ; addrOff, count : CARDINAL ; stringArg : BOOLEAN) ;
- PROCEDURE EmIncDi () ;
- PROCEDURE EmIncSi () ;
- PROCEDURE EmInlineCh (ch : CARDINAL) : CARDINAL ;
- PROCEDURE EmInlineCrLf () : CARDINAL ;
- PROCEDURE EmLdAlBx () ;
- PROCEDURE EmLdAlDi () ;
- PROCEDURE EmLdAlDiOff (off : CARDINAL) ;
- PROCEDURE EmLdAlSi () ;
- PROCEDURE EmLdAxDi () ;
- PROCEDURE EmLdDiGlob (off : CARDINAL) ;
- PROCEDURE EmLeaBx (off : CARDINAL) ;
- PROCEDURE EmLeaDi (local : BOOLEAN ; off : CARDINAL) ;
- PROCEDURE EmLeave () ;
- PROCEDURE EmLoadVar (local : BOOLEAN ; off, nbytes : CARDINAL) ;
- PROCEDURE EmLoadVarInd (off, nbytes : CARDINAL) ;
- PROCEDURE EmLoadVarIndSym (idx, nbytes : CARDINAL) ;
- PROCEDURE EmMovAxDi () ;
- PROCEDURE EmMovAxDs () ;
- PROCEDURE EmMovBxAx () ;
- PROCEDURE EmMovBxDi () ;
- PROCEDURE EmMovBxi (v : CARDINAL) ;
- PROCEDURE EmMovClAl () ;
- PROCEDURE EmMovDiAx () ;
- PROCEDURE EmMovDlImm (v : CARDINAL) ;
- PROCEDURE EmPopDi () ;
- PROCEDURE EmPushBp () ;
- PROCEDURE EmPushDi () ;
- PROCEDURE EmPushSi () ;
- PROCEDURE EmPushSymAddr (idx, off : CARDINAL) ;
- PROCEDURE EmPushVarAddr (local : BOOLEAN ; off : CARDINAL) ;
- PROCEDURE EmRet () ;
- PROCEDURE EmShlAxCl () ;
- PROCEDURE EmShlDlCl () ;
- PROCEDURE EmShrAx1 () ;
- PROCEDURE EmShrAxCl () ;
- PROCEDURE EmStDiAl () ;
- PROCEDURE EmStDiAlOff (off : CARDINAL) ;
- PROCEDURE EmStDiGlob (off : CARDINAL) ;
- PROCEDURE EmStDiImm (off, v : CARDINAL) ;
- PROCEDURE EmStoreInd (nbytes : CARDINAL) ;
- PROCEDURE EmStoreVar (local : BOOLEAN ; off, nbytes : CARDINAL) ;
- PROCEDURE EmStoreVarIndPrep (off : CARDINAL) ;
- PROCEDURE EmSubAlImm (v : CARDINAL) ;
- PROCEDURE EmSubSp (n : CARDINAL) ;
- PROCEDURE EmXorByteGlob (off, v : CARDINAL) ;
- PROCEDURE EmitFrameBase (level : CARDINAL) ;
- PROCEDURE EmitStaticLink (idx : CARDINAL) ;
- PROCEDURE HeadWord (VAR slot : CARDINAL) ;
- PROCEDURE IfMatchSemi () ;
- PROCEDURE Inittur () ;
- PROCEDURE IsOuterLocal (idx : CARDINAL) : BOOLEAN ;
- PROCEDURE LabelColonAhead () : BOOLEAN ;
- PROCEDURE LeaDiSym (idx, off : CARDINAL) ;
- PROCEDURE LoadSymVar (idx, off, nbytes : CARDINAL) ;
- PROCEDURE ParamSlotBytes (e : SymEntry) : CARDINAL ;
- PROCEDURE ParseType (VAR cls, size, elem : CARDINAL) ;
- PROCEDURE ProcFunc () ;
- PROCEDURE SlotSize (cls, size : CARDINAL) : CARDINAL ;
- PROCEDURE Statmnt () ;
- PROCEDURE StoreSymVar (idx, off, nbytes : CARDINAL) ;
- PROCEDURE StoreVarIndPrepSym (idx : CARDINAL) ;
- PROCEDURE SymEpi () ;
- PROCEDURE ParseLabelStmt () ;
- END Compiler.
|