-- file P4.Mesa -- last modified by Satterthwaite, 29-Jan-82 11:31:15 DIRECTORY Alloc: TYPE USING [Notifier], BcdDefs: TYPE USING [GFTIndex, Link], Inline: TYPE USING [BITAND], LiteralOps: TYPE USING [ValueDescriptor], Literals: TYPE USING [LitDescriptor], Symbols: TYPE, Tree: TYPE USING [Index, Link, Map, NodeName, Scan]; P4: DEFINITIONS IMPORTS Inline = { OPEN Symbols; Mark: BOOLEAN = FALSE; OwnGfi: BcdDefs.GFTIndex = 1; -- representations (interim) 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; CommonRep: PROC [Repr, Repr] RETURNS [Repr] = LOOPHOLE[Inline.BITAND]; -- register counts RegCount: TYPE = [0..256); MaxRegs: RegCount = LAST[RegCount]; -- notifiers BCDNotify, DeclNotify, LayoutNotify, StmtNotify: Alloc.Notifier; OpsNotify, ExpANotify, ExpBNotify, ExpCNotify: Alloc.Notifier; -- exported by Pass4B AssignImports: Tree.Scan; InitBCD: PROC [Tree.Link, UNCOUNTED ZONE]; FinishBCD: Tree.Scan; MakeEPLink: PROC [ep: CARDINAL, gfi: BcdDefs.GFTIndex] RETURNS [BcdDefs.Link]; MatchBCD: PROC RETURNS [BOOLEAN]; ProcessDirectory: Tree.Scan; ProcessExports: Tree.Map; ProcessImports: Tree.Scan; ProcessSymLiterals: PROC; -- exported by Pass4D BiasForType: PROC [CSEIndex] RETURNS [INTEGER]; CanonicalType: PROC [CSEIndex] RETURNS [CSEIndex]; ComparableType: PROC [CSEIndex] RETURNS [BOOLEAN]; DeclItem: Tree.Scan; DeclUpdate: Tree.Map; DefaultBasicOps: PROC [SEIndex, CARDINAL] RETURNS [BOOLEAN]; RepForType: PROC [CSEIndex] RETURNS [Repr]; SparseRep: PROC [CSEIndex] RETURNS [BOOLEAN]; TypeExp: PROC [typeExp: Tree.Link, body, indirect: BOOLEAN ← FALSE]; TypeForTree: PROC [Tree.Link] RETURNS [SEIndex]; WordsForType: PROC [CSEIndex] RETURNS [CARDINAL]; VarInit: SIGNAL RETURNS [BOOLEAN]; -- exported by Pass4L AssignEntries: PROC [BTIndex]; BitsForType: PROC [SEIndex] RETURNS [CARDINAL]; CheckBlock: PROC [BTIndex]; CheckFields: PROC [RecordSEIndex, CARDINAL]; LayoutArgs: PROC [RecordSEIndex, CARDINAL, BOOLEAN] RETURNS [CARDINAL]; LayoutBlock: PROC [BTIndex, CARDINAL] RETURNS [CARDINAL]; LayoutFields: PROC [RecordSEIndex, CARDINAL]; LayoutGlobals: PROC [bti: CBTIndex, stopping, fragments: BOOLEAN] RETURNS [CARDINAL]; LayoutInterface: PROC [CBTIndex] RETURNS [CARDINAL]; LayoutLocals: PROC [CBTIndex] RETURNS [CARDINAL]; -- exported by Pass4S currentLevel: ContextLevel; checked: BOOLEAN; BindCase: PROC [ Tree.Index, Tree.NodeName, PROC [Tree.Link, INTEGER] RETURNS [Tree.Link]] RETURNS [Tree.Link]; BindType: PROC [Tree.Index, Tree.Map] RETURNS [Tree.Link]; Body: PROC [CBTIndex]; CaseDriver: PROC [Tree.Index, Tree.Map, INTEGER] RETURNS [Tree.Link]; CatchNest: PROC [Tree.Link]; MarkString: PROC [local: BOOLEAN ← TRUE]; Subst: PROC [Tree.Index] RETURNS [Tree.Link]; -- exported by Pass4Ops RelOp: TYPE = Tree.NodeName [relE .. relLE]; FoldExpr: PROC [Tree.Index, Repr] RETURNS [Tree.Link]; IntervalTest: PROC [l,r: Tree.Link, rep: Repr] RETURNS [BOOLEAN]; IntToReal: PROC [Tree.Index] RETURNS [Tree.Link]; LiteralRep: PROC [Tree.Link, Repr] RETURNS [Repr]; LongToShort: PROC [Tree.Index, Repr] RETURNS [Tree.Link]; MakeTreeLiteral: PROC [WORD] RETURNS [Tree.Link]; RelTest: PROC [l,r: Tree.Link, op: RelOp, rep: Repr] RETURNS [BOOLEAN]; ShortToLong: PROC [Tree.Index, Repr] RETURNS [Tree.Link]; TreeLiteralDesc: PROC [Tree.Link] RETURNS [Literals.LitDescriptor]; TreeLiteralValue: PROC [Tree.Link] RETURNS [WORD]; ZeroP: PROC [Tree.Link] RETURNS [BOOLEAN]; -- exported by Pass4Xa Covering: TYPE = {none, partial, full}; All: PROC [Tree.Index] RETURNS [Tree.Link]; Assignment: PROC [Tree.Index] RETURNS [Tree.Link]; Call: PROC [Tree.Index] RETURNS [Tree.Link]; CheckRange: PROC [Tree.Link, CARDINAL, CSEIndex] RETURNS [Tree.Link]; Construct: PROC [node: Tree.Index, nested: BOOLEAN ← FALSE] RETURNS [Tree.Link]; Cover: PROC [lType: CSEIndex, lRep: Repr, rType: CSEIndex, rRep: Repr] RETURNS [Covering]; Dollar: PROC [Tree.Index] RETURNS [Tree.Link]; Extract: PROC [Tree.Index] RETURNS [Tree.Link]; Index: PROC [Tree.Index] RETURNS [Tree.Link]; MakeArgRecord: PROC [RecordSEIndex, Tree.Link] RETURNS [Tree.Link]; Narrow: PROC [Tree.Index] RETURNS [Tree.Link]; New: PROC [Tree.Index] RETURNS [Tree.Link]; PadRecord: PROC [t: Tree.Link, lType: CSEIndex] RETURNS [Tree.Link]; RewriteAssign: PROC [Tree.Index, CSEIndex] RETURNS [Tree.Link]; Reloc: PROC [Tree.Index] RETURNS [Tree.Link]; Rhs: PROC [exp: Tree.Link, lType: CSEIndex, voidOK: BOOLEAN ← FALSE] RETURNS [Tree.Link]; RowConstruct: PROC [Tree.Index] RETURNS [Tree.Link]; SeqIndex: PROC [Tree.Index] RETURNS [Tree.Link]; Union: PROC [node: Tree.Index, nested: BOOLEAN ← FALSE] RETURNS [Tree.Link]; -- exported by Pass4Xb ExpInit: PROC [UNCOUNTED ZONE]; ExpReset: PROC; AdjustBias: PROC [Tree.Link, INTEGER] RETURNS [Tree.Link]; BoolValue: PROC [t: Tree.Link] RETURNS [Tree.Link] = INLINE { RETURN [RValue[t, 0, unsigned]]}; ComputeIndexRegs: PROC [Tree.Index] RETURNS [RegCount]; Exp: PROC [Tree.Link, Repr] RETURNS [Tree.Link]; FillMultiWord: PROC [ words: LiteralOps.ValueDescriptor, origin: CARDINAL, t: Tree.Link]; ForceType: PROC [Tree.Link, CSEIndex] RETURNS [Tree.Link]; MakeStructuredLiteral: PROC [val: WORD, type: CSEIndex] RETURNS [Tree.Link]; NeutralExp: Tree.Map; OperandType: PROC [Tree.Link] RETURNS [CSEIndex]; RegsForType: PROC [CSEIndex] RETURNS [RegCount]; RValue: PROC [exp: Tree.Link, bias: INTEGER, target: Repr] RETURNS [Tree.Link]; StructuredLiteral: PROC [Tree.Link] RETURNS [BOOLEAN]; TreeLiteral: PROC [Tree.Link] RETURNS [BOOLEAN]; VBias: PROC RETURNS [INTEGER]; VPop: PROC; VPush: PROC [bias: INTEGER, rep: Repr, nRegs: RegCount]; VRegs: PROC RETURNS [RegCount]; VRep: PROC RETURNS [Repr]; -- exported by Pass4Xc AddrOp: PROC [Tree.Index] RETURNS [Tree.Link]; ConstantInterval: PROC [Tree.Index] RETURNS [origin, range: INTEGER]; Interval: PROC [Tree.Index, INTEGER, Repr] RETURNS [const: BOOLEAN]; NormalizeRange: PROC [Tree.Link] RETURNS [Tree.Link]; MiscXfer: PROC [Tree.Index] RETURNS [Tree.Link]; TypeOp: PROC [Tree.Index] RETURNS [Tree.Link]; EmptyInterval: SIGNAL; }.