-- Pc.mesa last edit, Bruce October 9, 1980 2:23 PM
DIRECTORY
DebugFormat USING [EXOI],
MachineDefs USING [FHandle, GFHandle, NullGF],
PrincOps USING [BytePC, ControlLink, EPRange, SVPointer],
Symbols USING [BTIndex, CBTIndex, ContextLevel, CTXIndex, ISEIndex, MDIndex];
Pc: DEFINITIONS =
BEGIN OPEN MachineDefs, Symbols;
BytePC: TYPE = PrincOps.BytePC;
NullPC: BytePC = [0];
EVRange: TYPE = [0..4*PrincOps.EPRange);
ResetCache: PROC;
Entry: PROCEDURE [f: FHandle ← NIL, pc: BytePC ← NullPC] RETURNS [BOOLEAN];
Exit: PROCEDURE [f: FHandle ← NIL, pc: BytePC ← NullPC] RETURNS [BOOLEAN];
EvalStackEmpty: PROCEDURE [sp: PrincOps.SVPointer ← NIL] RETURNS [BOOLEAN];
GetPc: PROC [gf: GFHandle, i: EVRange] RETURNS [pc: BytePC];
Son: PROC [CBTIndex] RETURNS [BOOLEAN];
EntryPC: PROCEDURE [ep: EVRange, gf: GFHandle, noSyms: BOOLEAN ← FALSE]
RETURNS [pc: BytePC];
ExitPC: PROCEDURE [CBTIndex] RETURNS [BytePC];
EVSize: PROC [Symbols.MDIndex] RETURNS [EVRange];
Ep: PROC [pc: BytePC, gf: GFHandle] RETURNS [ep: EVRange, start: BytePC];
EpToCBti: PROC [ep: EVRange, gf: GFHandle, start: BytePC ← NullPC]
RETURNS [cbti: CBTIndex];
LinkToCbti: PROC [PrincOps.ControlLink] RETURNS [CBTIndex];
LinkToIsei: PROC [PrincOps.ControlLink] RETURNS [Symbols.ISEIndex];
Bti: PROC [pc: BytePC ← NullPC, gf: GFHandle ← NullGF]
RETURNS [bti: BTIndex]; -- in user's symbol table
CBti: PROC [pc: BytePC ← NullPC, gf: GFHandle ← NullGF]
RETURNS [cbti: CBTIndex];
CacheCBti: PROC [mdi: Symbols.MDIndex, gf: GFHandle, cbti: CBTIndex]
RETURNS [CBTIndex];
CtxLink: TYPE = POINTER TO CtxItem;
CtxItem: TYPE = RECORD [
link: CtxLink,
indirect: BOOLEAN,
onStack: BOOLEAN,
indent: [0..37777B],
mapped: BOOLEAN,
null: BOOLEAN,
body: SELECT OVERLAID * FROM
context => [ictx: Symbols.CTXIndex],
empty => [level: Symbols.ContextLevel],
ENDCASE];
Reason: TYPE = {print,search};
FreeContextList: PROC [CtxLink];
ContextList: PROC [
pc: BytePC, gf: GFHandle, reason: Reason, exoi: DebugFormat.EXOI ← in]
RETURNS [CtxLink];
NotInAnyProcedure: SIGNAL;
END.