DIRECTORY
CodeDefs USING [Byte, CodeList, CompareClass, LabelInfoIndex, StoreOptions],
IntCodeDefs USING [Label, Node, NodeList, OperRep, Var],
Symbols USING [BTIndex, CBTIndex, CSEIndex, ContextLevel, ISEIndex, RecordSEIndex, WordLength],
Tree USING [Index, Link];
P5:
DEFINITIONS = {
OPEN Symbols, IntCodeDefs, CodeDefs;
CodeOper: TYPE = REF IntCodeDefs.OperRep.code;
from FOpTable.mesa
NumberOfParams: PROC[b: Byte] RETURNS[[0..3]];
PopEffect: PROC[b: Byte] RETURNS[[0..7]];
PushEffect: PROC[b: Byte] RETURNS[[0..3]];
from Calls.mesa
BuildArgRecord:
PROC[t: Tree.Link, rsei: RecordSEIndex, sigerr, isResume:
BOOL]
RETURNS[nparms: CARDINAL];
CallCatch: PROC[t: Tree.Link];
ConstructOnStack: PROC[maint: Tree.Link, rcsei: RecordSEIndex];
LogHeapFree: SIGNAL[calltree: Tree.Link] RETURNS[BOOL, Lexeme.se];
PRetLex: PROC[nrets: CARDINAL, node: Tree.Index, sig: BOOL←FALSE] RETURNS[Lexeme];
PushArgRecord:
PROC[t: Tree.Link, rsei: RecordSEIndex, sigerr, isResume:
BOOL]
RETURNS[nparms: CARDINAL];
SysCall: PROC[alpha: Byte];
SysCallN: PROC[alpha: Byte, n: CARDINAL];
SysError: PROC RETURNS [Node];
ZoneOp:
PROC[
zone: Tree.Link, procOffset: INT, args: NodeList, catch: Tree.Link] RETURNS [Node];
from Driver.mesa
Module: PROC RETURNS [Node];
P5Error: PROC[n: CARDINAL];
PopInVals: PROC[irecord: RecordSEIndex, isenable: BOOL];
ReleaseLock: PROC [cl: CodeList];
visibleContext: ARRAY Symbols.ContextLevel OF IntCodeDefs.Label;
FillProcLabel: PROC [op: CodeOper, bti: CBTIndex];
from Flow.mesa
CompareFn: PROC[class: CompareClass, code: BOOL, length: [1..2]] RETURNS[Byte];
GetLabelMark: PROC RETURNS[LabelInfoIndex];
LabelList: PROC[cl: CodeList, t: Tree.Link, elabel: Label, mark: LabelInfoIndex];
LabelCreate: PROC[t: Tree.Link];
MakeExitLabel: PROC RETURNS[exit, loop: Label];
from Constructor.mesa
All: PROC[t: Tree.Link, node: Tree.Index, options: StoreOptions] RETURNS [Node];
Construct: PROC[t: Tree.Link, node: Tree.Index, options: StoreOptions] RETURNS [Node];
ListCons: PROC[node: Tree.Index] RETURNS[Node];
New: PROC[node: Tree.Index] RETURNS[Node];
RowCons: PROC[t: Tree.Link, node: Tree.Index, options: StoreOptions] RETURNS [Node];
TransferConstruct: PROC[nparms: CARDINAL, resident: BOOL, t: Tree.Link, tsei: CSEIndex];
VariantConstruct: PROC[t1, t2: Tree.Link, options: StoreOptions] RETURNS [Node];
from Store.mesa
ExtractFrom: PROC[cl: CodeList, t1: Tree.Link, tsei: RecordSEIndex, sourceNode: Node];
SAssign: PROC[sei: ISEIndex];
TTAssign: PROC[t1, t2: Tree.Link];
from Expression
AdjustNilCheck: PROC[t: Tree.Link, wordOffset: CARDINAL];
VarForSei: PROC [sei: ISEIndex] RETURNS [l: Var];
ExpList: PROC [t: Tree.Link] RETURNS [head, tail: NodeList ← NIL];
Exp: PROC[t: Tree.Link] RETURNS[IntCodeDefs.Node];
LPushLex: PROC[l: Lexeme] RETURNS[Lexeme];
MultiZero: PROC[t: Tree.Link, minWords: CARDINAL𡤃] RETURNS[BOOL];
PushConst: PROC[t: Tree.Link];
PushLex: PROC[l: Lexeme];
PushLProcDesc: PROC[bti: CBTIndex];
PushNestedProcDesc: PROC[bti: CBTIndex];
PushNonnestedProcDesc: PROC[n: CARDINAL];
PushRhs: PROC[t: Tree.Link];
Reloc: PROC[node: Tree.Index] RETURNS[Node];
StoreMod: PROC[t: Tree.Link, bSize: [0..WordLength)] RETURNS[Tree.Link];
from FlowExpression
FlowExp: PROC[node: Tree.Index] RETURNS[l: Node];
from Statement
CatchPhrase: PROC[node: Tree.Index] RETURNS[Node];
EnterBlock: PROC[cl: CodeList, bti: BTIndex];
ExitBlock: PROC[bti: BTIndex];
DeclList: PROC [cl: CodeList, t: Tree.Link]; -- maybe some statements, too
StatementList: PROC [cl: CodeList, t: Tree.Link];
StatementTree: PROC[t: Tree.Link] RETURNS[Node];
SCatchPhrase: PROC[node: Tree.Link] RETURNS[Node];
from Selection
BindStmtExp: PROC[rootNode: Tree.Index, isExp: BOOL] RETURNS[Node];
CaseStmtExp: PROC[rootNode: Tree.Index, isExp: BOOL] RETURNS[Node];
CaseTest: PROC[t: Tree.Link, failLabel: Label];
NarrowExp: PROC[node: Tree.Index] RETURNS[Node];
GetCanonicalType: PROC[node: Tree.Index] RETURNS[Node];
TypeRel: PROC[node: Tree.Index, tf: BOOL, label: Label];
}.