DIRECTORY Alloc: TYPE USING [Notifier], Copier: TYPE USING [SEToken], PrincOpsUtils: TYPE USING [BITAND], Symbols: TYPE USING [ HTIndex, SEIndex, ISEIndex, CSEIndex, RecordSEIndex, RefSEIndex, CTXIndex, IncludedCTXIndex, MDIndex, BTIndex, Closure], Tree: TYPE USING [Index, Link, Map, Scan]; P3: DEFINITIONS IMPORTS PrincOpsUtils = { OPEN Symbols; mark: BOOL = TRUE; -- mark in tree as set by pass 3 TextForm: TYPE = {text, rope, ropeText}; Attr: TYPE = RECORD [ noAssign: BOOL, noXfer: BOOL, const: BOOL]; emptyAttr: Attr = [noAssign:FALSE, noXfer:FALSE, const:FALSE]; fullAttr: Attr = [noAssign:TRUE, noXfer:TRUE, const:TRUE]; voidAttr: Attr = [noAssign:TRUE, noXfer:TRUE, const:FALSE]; And: PROC [Attr, Attr] RETURNS [Attr] = LOOPHOLE[PrincOpsUtils.BITAND]; Safety: TYPE = {none, asserted, checked}; NarrowOp: TYPE = RECORD [ error, indirect, rtTest, tagTest, computed, unImpl: BOOL_FALSE]; NPUse: TYPE = {none, ref, set, refset, unsafe}; -- (name) param use NPMap: TYPE = ARRAY NPUse OF ARRAY NPUse OF NPUse; SetNP: ARRAY NPUse OF NPUse = [set, refset, set, refset, unsafe]; MergeNP: NPMap = [[ none, ref, set, refset, unsafe], [ ref, ref, unsafe, unsafe, unsafe], [ set, unsafe, set, unsafe, unsafe], [refset, unsafe, unsafe, unsafe, unsafe], [unsafe, unsafe, unsafe, unsafe, unsafe]]; SequenceNP: NPMap = [[ none, ref, set, refset, unsafe], [ ref, ref, refset, refset, unsafe], [ set, unsafe, set, unsafe, unsafe], [refset, unsafe, refset, unsafe, unsafe], [unsafe, unsafe, unsafe, unsafe, unsafe]]; BoundNP: NPMap = [[ none, ref, set, refset, unsafe], [ ref, ref, unsafe, refset, unsafe], [ set, unsafe, set, refset, unsafe], [refset, refset, refset, refset, unsafe], [unsafe, unsafe, unsafe, unsafe, unsafe]]; DeclNotify, MiscNotify, StmtNotify, VRNotify: Alloc.Notifier; ExpANotify, ExpBNotify, ExpCNotify: Alloc.Notifier; Header: PROC [node: Tree.Index]; SetDefaultImport: PROC [iCtx: IncludedCTXIndex, implicitOK: BOOL_FALSE]; DeclList: Tree.Scan; FirstId: PROC [Tree.Index] RETURNS [ISEIndex]; InitialExp: PROC [Tree.Link, SEIndex] RETURNS [v: Tree.Link, extended: BOOL]; MakeLongType: PROC [SEIndex, CSEIndex] RETURNS [CSEIndex]; MakeRefType: PROC [cType: SEIndex, hint: CSEIndex, readOnly,counted,var: BOOL_FALSE] RETURNS [RefSEIndex]; ResolveType: PROC [ISEIndex]; ResolveValue: PROC [ISEIndex]; TypeAppl: Tree.Map; TypeExp: Tree.Map; IdInit: PROC [UNCOUNTED ZONE]; IdReset: Tree.Scan; ArrangeKeys: PROC [ expList: Tree.Link, nextKey: PROC RETURNS [HTIndex], omittedValue: PROC RETURNS [Tree.Link]] RETURNS [CARDINAL]; BaseTree: PROC [Tree.Link, CSEIndex] RETURNS [Tree.Link]; BindTree: PROC [Tree.Link, PROC [ISEIndex] RETURNS [Tree.Link]] RETURNS [Tree.Link]; BumpCount: PROC [ISEIndex]; CheckDisjoint: PROC [ctx1, ctx2: CTXIndex]; ClearRefStack: PROC; CloseBase: PROC [Tree.Link, HTIndex]; ClusterId: PROC [HTIndex, CTXIndex] RETURNS [found: BOOL, sei: ISEIndex]; CompleteRecord: PROC [rSei: RecordSEIndex, depth: Closure_$unit]; CopyTree: Tree.Map; EnterIdList: PROC [IncludedCTXIndex, Tree.Link]; EnterComposite: PROC [type: CSEIndex, t: Tree.Link, init: BOOL]; EnterType: PROC [type: SEIndex, canonical: BOOL_TRUE]; FieldId: PROC [HTIndex, RecordSEIndex] RETURNS [CARDINAL, ISEIndex]; FindSe: PROC [HTIndex] RETURNS [symbol: ISEIndex, base: Tree.Link, indirect: BOOL]; Id: PROC [HTIndex] RETURNS [Tree.Link]; InterfaceId: PROC [HTIndex, CTXIndex] RETURNS [found: BOOL, sei: ISEIndex]; MainIncludedCtx: PROC [MDIndex] RETURNS [IncludedCTXIndex]; MakeIdTable: PROC [CARDINAL]; OpenBase: PROC [Tree.Link, HTIndex] RETURNS [Tree.Link]; OpenPointer: PROC [Tree.Link, CSEIndex] RETURNS [Tree.Link, CSEIndex]; PopCtx: PROC; PushCtx: PROC [CTXIndex]; PushHtCtx: PROC [HTIndex, Tree.Link, BOOL]; PushRecordCtx: PROC [RecordSEIndex, Tree.Link, BOOL]; RecordLhs: PROC [ISEIndex]; RecordMention: PROC [ISEIndex]; SealRefStack: PROC; SearchCtxList: PROC [HTIndex, CTXIndex] RETURNS [found: BOOL, sei: ISEIndex]; Shared: PROC [CTXIndex] RETURNS [BOOL]; TopCtx: PROC RETURNS [CTXIndex]; UnsealRefStack: PROC; UpdateTreeAttr: PROC [Tree.Link] RETURNS [attr: Attr]; CatchPhrase: PROC [Tree.Link] RETURNS [unwindCaught: BOOL]; CopyLock: PROC RETURNS [Tree.Link]; FindLockParams: PROC RETURNS [formal, actual: ISEIndex]; LockVar: PROC [Tree.Link] RETURNS [Tree.Link]; MakeFrameRecord: PROC [Tree.Link] RETURNS [CSEIndex]; MiscStmt: PROC [Tree.Index] RETURNS [Tree.Link]; MiscXfer: PROC [Tree.Index, CSEIndex] RETURNS [Tree.Link]; TextRep: PROC [SEIndex] RETURNS [TextForm]; XferForFrame: PROC [CTXIndex] RETURNS [CSEIndex]; InsertCatchLabel: SIGNAL [catchSeen, exit: BOOL]; pathNP: VAR NPUse; BodyList: PROC [firstBti: BTIndex]; BumpArgRefs: PROC [record: RecordSEIndex, write: BOOL]; Case: PROC [Tree.Index, Tree.Map]; CheckLocals: PROC [Tree.Link] RETURNS [localsOnly: BOOL]; SafetyAttr: PROC [Tree.Index] RETURNS [Safety]; SetSafety: PROC [Safety]; Scope: PROC [Tree.Index, Tree.Map]; Stmt: Tree.Map; DiscriminatedType: PROC [CSEIndex, Tree.Link] RETURNS [CSEIndex]; Discrimination: PROC [Tree.Index, Tree.Map]; Narrowing: PROC [type, target: CSEIndex] RETURNS [NarrowOp]; SelectVariantType: PROC [SEIndex, HTIndex] RETURNS [ISEIndex]; SequenceField: PROC [RecordSEIndex] RETURNS [ISEIndex]; VariantUnionType: PROC [SEIndex] RETURNS [CSEIndex]; phraseNP: VAR NPUse; All: PROC [node: Tree.Index, target: CSEIndex, init: BOOL_FALSE]; Apply: PROC [Tree.Index, CSEIndex, BOOL] RETURNS [Tree.Index]; Assignment: PROC [Tree.Index]; CheckScope: PROC [Tree.Link, CSEIndex] RETURNS [Tree.Link]; Dot: PROC [Tree.Index, CSEIndex] RETURNS [Tree.Index]; Extract: PROC [Tree.Index]; FieldDefault: PROC [ISEIndex] RETURNS [Tree.Link]; Initialization: PROC [CSEIndex, Tree.Link] RETURNS [Tree.Link]; InterfaceCtx: PROC [CSEIndex, Tree.Link] RETURNS [CTXIndex]; MatchFields: PROC [ record: RecordSEIndex, expList: Tree.Link, init: BOOL_FALSE, scopeCheck: BOOL_TRUE] RETURNS [Tree.Link]; ExpInit: PROC [UNCOUNTED ZONE]; ExpReset: PROC; Exp: PROC [Tree.Link, CSEIndex] RETURNS [Tree.Link]; Interval: PROC [Tree.Link, CSEIndex, BOOL]; ForceType: PROC [Tree.Link, CSEIndex] RETURNS [Tree.Link]; RAttr: PROC RETURNS [Attr]; Rhs: PROC [Tree.Link, CSEIndex] RETURNS [Tree.Link]; RPop: PROC; RPush: PROC [CSEIndex, Attr]; RType: PROC RETURNS [CSEIndex]; VoidExp: Tree.Map; AddrOp: PROC [Tree.Index, CSEIndex]; Range: PROC [Tree.Link, CSEIndex] RETURNS [Tree.Link]; Span: PROC [CSEIndex] RETURNS [first, last: Copier.SEToken]; }.  file P3.mesa last modified by Satterthwaite, December 10, 1982 10:56 am Last Edited by: Maxwell, July 27, 1983 3:00 pm text literals attributes safety (Cedar) narrowing operations parameter use bookkeeping (for subst by name) notifiers exported by Pass3B exported by Pass3D exported by Pass3I exported by Pass3M exported by Pass3S exported by Pass3V exported by Pass3Xa exported by Pass3Xb exported by Pass3Xc Ê ˜Jšœ ™ Jšœ:™:J™.J˜šÏk ˜ Jšœœœ ˜Jšœœœ ˜Jšœœœœ˜#šœ œœ˜J˜@J˜7—Jšœœœ˜*J˜—šœ œœ˜)Jšœ ˜ J˜JšœœœÏc ˜4J˜Jšœ ™ ˜Jšœ œ˜(J˜—Jšœ ™ ˜šœœœ˜Jšœ œ˜Jšœœ˜ Jšœœ˜ J˜—Jšœœ œœ˜>Jšœœ œœ˜:Jšœœ œœ˜;J˜Jš Ïnœœœ œœ˜GJ˜—Jšœ™˜Jšœœ˜)J˜—Jšœ™˜šœ œœ˜Jšœ4œœ˜@J˜J˜——Jšœ-™-˜Jšœœ%ž˜CJš œœœœœœ˜2J˜Jšœœœ,˜AJ˜˜˜*J˜)J˜)J˜)J˜*J˜——˜˜*J˜)J˜)J˜)J˜*J˜——˜˜*J˜)J˜)J˜)J˜*J˜J˜———Jšœ ™ ˜J˜=J˜3J˜—Jšœ™˜JšŸœœ˜ JšŸœœ&œœ˜HJ˜—Jšœ™˜J˜JšŸœœœ ˜.JšŸ œœœœ˜MJšŸ œœœ ˜:šŸ œœ8œœ˜TJšœ˜—JšŸ œœ ˜JšŸ œœ ˜J˜J˜J˜—Jšœ™˜JšŸœœ œœ˜J˜J˜šŸ œœ˜J˜Jšœ œœ ˜ Jšœœœ ˜'Jšœœ˜—JšŸœœœ ˜9Jš Ÿœœ œ œœ ˜TJšŸ œœ ˜JšŸ œœ˜+JšŸ œœ˜JšŸ œœ˜%JšŸ œœœ œ˜IJšŸœœ-˜AJ˜JšŸ œœ˜0JšŸœœ&œ˜@JšŸ œœœœ˜6JšŸœœœœ ˜DJšŸœœ œ/œ˜SJšŸœœ œ ˜'JšŸ œœœ œ˜KJšŸœœ œ˜;JšŸ œœœ˜JšŸœœœ ˜8JšŸ œœœ˜FJšŸœœ˜ JšŸœœ ˜JšŸ œœœ˜+JšŸ œœœ˜6JšŸ œœ ˜JšŸ œœ ˜JšŸ œœ˜JšŸ œœœ œ˜MJšŸœœ œœ˜'JšŸœœœ ˜ JšŸœœ˜JšŸœœ œ˜6J˜—Jšœ™˜JšŸ œœ œœ˜;JšŸœœœ ˜#JšŸœœœ˜8JšŸœœ œ ˜.JšŸœœ œ ˜5JšŸœœœ ˜0JšŸœœœ ˜:JšŸœœ œ ˜+JšŸ œœ œ ˜1J˜Jšœœœ˜1J˜—Jšœ™˜Jšœœ˜J˜JšŸœœ˜#JšŸ œœ œ˜7JšŸœœ˜"JšŸ œœ œœ˜9JšŸ œœœ ˜/JšŸ œœ ˜JšŸœœ˜#J˜J˜—Jšœ™˜JšŸœœœ ˜AJšŸœœ˜,JšŸ œœœ ˜JšŸ œœœ ˜7JšŸœœ œ ˜4J˜—Jšœ™˜Jšœ œ˜J˜JšŸœœ,œœ˜AJšŸœœœœ˜>JšŸ œœ˜JšŸ œœœ ˜;JšŸœœœ˜6JšŸœœ˜JšŸ œœ œ ˜2JšŸœœœ ˜?JšŸ œœœ ˜<šŸ œœ˜J˜*Jš œœœœœ˜(Jšœ ˜J˜——Jšœ™˜JšŸœœ œœ˜JšŸœœ˜J˜JšŸœœœ ˜4JšŸœœœ˜+JšŸ œœœ ˜:JšŸœœœ˜JšŸœœœ ˜4JšŸœœ˜ JšŸœœ˜JšŸœœœ ˜J˜J˜—Jšœ™˜JšŸœœ˜$JšŸœœœ ˜6JšŸœœ œ˜