-- file P4.Mesa -- last modified by Satterthwaite, January 10, 1980 10:26 AM DIRECTORY ControlDefs: FROM "controldefs" USING [ControlLink, GFTIndex], Literals: FROM "literals" USING [LitDescriptor], Symbols: FROM "symbols", Table: FROM "table" USING [Notifier], Tree: FROM "tree" USING [Index, Link, Map, NodeName, Scan]; P4: DEFINITIONS = BEGIN OPEN Symbols; Mark: BOOLEAN = FALSE; -- representations (temporary) Repr: TYPE = [none..all]; signed: CARDINAL = 1; unsigned: CARDINAL = 2; long: CARDINAL = 4; other: CARDINAL = 8; none: CARDINAL = 0; both: CARDINAL = signed+unsigned; all: CARDINAL = other+long+both; -- register counts RegCount: TYPE = [0..256); MaxRegs: RegCount = LAST[RegCount]; -- notifiers BCDNotify, DeclNotify, LayoutNotify, StmtNotify: Table.Notifier; OpsNotify, ExpANotify, ExpBNotify: Table.Notifier; -- exported by Pass4B AssignImports: Tree.Scan; InitBCD: PROCEDURE; FinishBCD: PROCEDURE; MakeEPLink: PROCEDURE [ep: CARDINAL, gfi: ControlDefs.GFTIndex] RETURNS [ControlDefs.ControlLink]; ProcessExports: Tree.Map; ProcessImports: Tree.Scan; -- exported by Pass4D BiasForType: PROCEDURE [CSEIndex] RETURNS [INTEGER]; ComparableType: PROCEDURE [CSEIndex] RETURNS [BOOLEAN]; DeclItem: Tree.Scan; DeclUpdate: Tree.Map; RepForType: PROCEDURE [CSEIndex] RETURNS [Repr]; TypeExp: PROCEDURE [typeExp: Tree.Link, body: BOOLEAN ← FALSE]; TypeForTree: PROCEDURE [Tree.Link] RETURNS [SEIndex]; WordsForType: PROCEDURE [CSEIndex] RETURNS [CARDINAL]; VarInit: SIGNAL RETURNS [BOOLEAN]; -- exported by Pass4L AssignEntries: PROCEDURE [BTIndex]; BitsForType: PROCEDURE [SEIndex] RETURNS [CARDINAL]; CheckBlock: PROCEDURE [BTIndex]; LayoutArgs: PROCEDURE [RecordSEIndex, CARDINAL, BOOLEAN] RETURNS [CARDINAL]; LayoutBlock: PROCEDURE [BTIndex, CARDINAL] RETURNS [CARDINAL]; LayoutFields: PROCEDURE [RecordSEIndex, CARDINAL]; LayoutGlobals: PROCEDURE [CBTIndex] RETURNS [CARDINAL]; LayoutInterface: PROCEDURE [CBTIndex] RETURNS [CARDINAL]; LayoutLocals: PROCEDURE [CBTIndex] RETURNS [CARDINAL]; -- exported by Pass4S Binding: PROCEDURE [ Tree.Index, Tree.NodeName, PROCEDURE [Tree.Link, INTEGER] RETURNS [Tree.Link]] RETURNS [Tree.Link]; BodyList: PROCEDURE [BTIndex]; CaseDriver: PROCEDURE [Tree.Index, Tree.Map, INTEGER] RETURNS [Tree.Link]; CatchNest: PROCEDURE [Tree.Link]; Subst: PROCEDURE [Tree.Index] RETURNS [Tree.Link]; -- exported by Pass4Ops RelOp: TYPE = Tree.NodeName [relE .. relLE]; FoldExpr: PROCEDURE [Tree.Index, Repr] RETURNS [Tree.Link]; IntervalTest: PROCEDURE [l,r: Tree.Link, rep: Repr] RETURNS [BOOLEAN]; LiteralRep: PROCEDURE [Tree.Link, Repr] RETURNS [Repr]; MakeTreeLiteral: PROCEDURE [WORD] RETURNS [Tree.Link]; RelTest: PROCEDURE [l,r: Tree.Link, op: RelOp, rep: Repr] RETURNS [BOOLEAN]; TreeLiteralDesc: PROCEDURE [Tree.Link] RETURNS [Literals.LitDescriptor]; TreeLiteralValue: PROCEDURE [Tree.Link] RETURNS [WORD]; ZeroP: PROCEDURE [Tree.Link] RETURNS [BOOLEAN]; -- exported by Pass4Xa Covering: TYPE = {none, partial, full}; AddrOp: PROCEDURE [Tree.Index] RETURNS [Tree.Link]; All: PROCEDURE [Tree.Index] RETURNS [Tree.Link]; Assignment: PROCEDURE [Tree.Index] RETURNS [Tree.Link]; Call: PROCEDURE [Tree.Index] RETURNS [Tree.Link]; Construct: PROCEDURE [node: Tree.Index, nested: BOOLEAN ← FALSE] RETURNS [Tree.Link]; Cover: PROCEDURE [lType: CSEIndex, lRep: Repr, rType: CSEIndex, rRep: Repr] RETURNS [Covering]; Dollar: PROCEDURE [Tree.Index] RETURNS [Tree.Link]; Index: PROCEDURE [Tree.Index] RETURNS [Tree.Link]; MakeArgRecord: PROCEDURE [RecordSEIndex, Tree.Link] RETURNS [Tree.Link]; MiscXfer: PROCEDURE [Tree.Index] RETURNS [Tree.Link]; New: PROCEDURE [Tree.Index] RETURNS [Tree.Link]; PadRecord: PROCEDURE [t: Tree.Link, lType: CSEIndex] RETURNS [Tree.Link]; PushAssignment: PROCEDURE [id, val: Tree.Link, type: CSEIndex]; Reloc: PROCEDURE [Tree.Index] RETURNS [Tree.Link]; Rhs: PROCEDURE [exp: Tree.Link, lType: CSEIndex, voidOK: BOOLEAN ← FALSE] RETURNS [Tree.Link]; RowConstruct: PROCEDURE [Tree.Index] RETURNS [Tree.Link]; TargetRep: PROCEDURE [Repr] RETURNS [Repr]; Union: PROCEDURE [node: Tree.Index, nested: BOOLEAN ← FALSE] RETURNS [Tree.Link]; -- exported by Pass4Xb Pass4XInit: PROCEDURE; AdjustBias: PROCEDURE [Tree.Link, INTEGER] RETURNS [Tree.Link]; ComputeIndexRegs: PROCEDURE [Tree.Index] RETURNS [RegCount]; ConstantInterval: PROCEDURE [Tree.Index] RETURNS [origin, range: INTEGER]; Exp: PROCEDURE [Tree.Link, Repr] RETURNS [Tree.Link]; ForceType: PROCEDURE [Tree.Link, CSEIndex] RETURNS [Tree.Link]; Interval: PROCEDURE [Tree.Index, INTEGER, Repr] RETURNS [const: BOOLEAN]; MakeStructuredLiteral: PROCEDURE [val: WORD, type: CSEIndex] RETURNS [Tree.Link]; NeutralExp: Tree.Map; OperandType: PROCEDURE [Tree.Link] RETURNS [CSEIndex]; NormalizeRange: PROCEDURE [Tree.Link] RETURNS [Tree.Link]; RegsForType: PROCEDURE [CSEIndex] RETURNS [RegCount]; RValue: PROCEDURE [exp: Tree.Link, bias: INTEGER, target: Repr] RETURNS [Tree.Link]; StructuredLiteral: PROCEDURE [Tree.Link] RETURNS [BOOLEAN]; TreeLiteral: PROCEDURE [Tree.Link] RETURNS [BOOLEAN]; VBias: PROCEDURE RETURNS [INTEGER]; VPop: PROCEDURE; VPush: PROCEDURE [bias: INTEGER, rep: Repr, nRegs: RegCount]; VRegs: PROCEDURE RETURNS [RegCount]; VRep: PROCEDURE RETURNS [Repr]; EmptyInterval: SIGNAL; -- the global frames Pass4B, Pass4D, Pass4L, Pass4S, Pass4Ops, Pass4Xa, Pass4Xb: PROGRAM; END.