DIRECTORY
RCMap: TYPE USING[Base, Index],
SymbolTable: TYPE USING[Base],
Symbols: TYPE USING[SEIndex, MDIndex];
MapMap: TYPE = LONG POINTER TO MapMapObj; -- built by Include
MapMapObj: TYPE = RECORD[SEQUENCE length: CARDINAL OF MapMapItem];
MapMapItem: TYPE = RECORD[old, new: RCMap.Index];
Establish the specified Base as the "current" one.
ASSUME ptr was allocated by VM.Allocate
Initialize:
PROC[ptr: RCMap.Base, nPages:
CARDINAL, expansionOK:
BOOL ←
FALSE];
Finalize: PROC;
EstablishOuter:
PROC[outerProc:
PROC [stb: SymbolTable.Base,
mdi: Symbols.MDIndex,
inner: PROC[base: SymbolTable.Base]]];
Retrieve info about the current RCMap.Base
GetBase: PROC RETURNS[base: RCMap.Base, nWords: CARDINAL];
Returns an RCMap.Index in the current RCMap.Base of the RCMap for the specified type.
Makes an entry if necessary.
Acquire: PROC[stb: SymbolTable.Base, sei: Symbols.SEIndex] RETURNS[rcmx: RCMap.Index];
Merges the specified RCMap.Base into the current one.
If zone # NIL, allocates and returns a MapMap
Include: PROC[rcmb: RCMap.Base, nWords: CARDINAL, zone: UNCOUNTED ZONE ← NIL] RETURNS[MapMap];
Does a MapMap lookup: returns the index in the current RCMap.Base that corresponds
to the specified index in the RCMap.Base that Include processed.
FindMapMapEntry: PROC[mapMap: MapMap, oldIndex: RCMap.Index] RETURNS[RCMap.Index];
Enumerate:
PROC[base: RCMap.Base,
nWords: CARDINAL,
proc: PROC[RCMap.Index] RETURNS[stop: BOOLEAN]]
RETURNS[stopped: BOOLEAN];