DEFINITION MODULE CompilerSymbols ; (* Symbol table management: entry type, storage, insertion, lookup and scope hiding. Compiler.mod imports these names unqualified. *) FROM CompilerShared IMPORT MaxName ; CONST MaxSym = 3000 ; TYPE SymEntry = RECORD name : ARRAY [0..MaxName] OF CHAR ; tag : CARDINAL ; cls : CARDINAL ; size : CARDINAL ; elem : CARDINAL ; off : CARDINAL ; lval : LONGINT ; lo, hi : LONGINT ; (* an ORDINAL type's bounds: an enumeration (0..n-1) or a subrange. Needed so `set of T' can size its base. *) fldFirst, fldLast : CARDINAL ; (* a RECORD type's field range in the field table (0,0 when not a record) *) arrIdx : CARDINAL ; (* an ARRAY type's shape in ArrRec (0 = no) *) parmFirst, parmCount : CARDINAL ; (* a PROCEDURE/FUNCTION's parameters: symtab indices, in declaration order *) isKbd : BOOLEAN ; (* the predefined KBD file: reads are console *) isPort : BOOLEAN ; (* the predefined PORT byte array *) isVar : BOOLEAN ; (* a VAR parameter: the slot holds an address *) level : CARDINAL ; local : BOOLEAN ; parent : CARDINAL ; (* lexical parent procedure, 0 at top level *) staticOff : CARDINAL ; (* nested proc's hidden static-link local *) resvar : CARDINAL ; goPos : CARDINAL ; defnd : BOOLEAN ; fwd : BOOLEAN ; END ; VAR symtab : ARRAY [0..MaxSym - 1] OF SymEntry ; symTop : CARDINAL ; lexnest : CARDINAL ; wrd : ARRAY [0..MaxName] OF CHAR ; PROCEDURE CopyWord (name : ARRAY OF CHAR) ; PROCEDURE SaveWord (VAR dst : ARRAY OF CHAR) ; PROCEDURE NewSym (name : ARRAY OF CHAR ; tag : CARDINAL ; cls, size, elem, off : CARDINAL ; v : LONGINT ; local : BOOLEAN) : CARDINAL ; PROCEDURE Search (nm : ARRAY OF CHAR ; VAR idx : CARDINAL) : BOOLEAN ; PROCEDURE DupTest (nm : ARRAY OF CHAR) ; PROCEDURE HideLocals (from : CARDINAL) ; END CompilerSymbols.