PackageSymbols.Mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Sweet, May 12, 1980 3:21 PM
Satterthwaite, December 4, 1985 9:47:05 am PST
Russ Atkinson (RRA) January 31, 1985 1:19:59 pm PST
DIRECTORY
PrincOps: TYPE USING [BytePC, EPRange, MaxNGfi],
Symbols: TYPE USING [Name],
SymbolSegment: TYPE USING [constType],
Table: TYPE USING [Limit, Selector];
PackageSymbols:
DEFINITIONS =
BEGIN
MaxEntries: CARDINAL = PrincOps.EPRange*PrincOps.MaxNGfi;
constant table declarations
WordIndex: TYPE = CARDINAL;
PCSeqBody:
TYPE =
RECORD[
SEQUENCE length: CARDINAL OF PrincOps.BytePC];
PCSeq:
TYPE =
LONG
POINTER
TO PCSeqBody;
JIData: TYPE = RECORD[pc: PrincOps.BytePC, tableSize: CARDINAL];
JISeqBody:
TYPE =
RECORD[
SEQUENCE length: CARDINAL OF JIData];
JISeq:
TYPE =
LONG
POINTER
TO JISeqBody;
ConstRecord:
TYPE =
RECORD[
offset: WordIndex,
length: CARDINAL];
ConstIndex: TYPE = CARDINAL [0..Table.Limit/ConstRecord.SIZE);
constType: Table.Selector = SymbolSegment.constType;
-- symbol table region contains:
-- count of ConstRecords
-- ConstRecords
-- PCSeqBody for LCO's
-- PCSeqBody for LIO's
-- JISeqBody for JIB's or JIW's (one table serves both)
body data for outer callable bodies
OuterPackRecord:
TYPE =
MACHINE
DEPENDENT
RECORD[
hti: Symbols.Name,
placed, resident: BOOL ← FALSE,
needsFixup: BOOL,
length: CARDINAL,
firstSon: IPIndex,
entryIndex: [0..MaxEntries]];
OPIndex: TYPE = CARDINAL [0..MaxEntries+2];
OPMain: OPIndex = 0;
OPCatch: OPIndex = MaxEntries;
OPEntry: OPIndex = MaxEntries+1;
OPNull: OPIndex = OPIndex.LAST;
body data for inner callable bodies
InnerPackRecord:
TYPE =
RECORD[
length: CARDINAL,
lastSon, needsFixup: BOOL,
entryIndex: [0..MaxEntries)];
IPIndex: TYPE = CARDINAL [0..MaxEntries]; -- waste a bit to get a null
IPNull: IPIndex = IPIndex.LAST;