DIRECTORY Rope USING [ROPE], SaffronBaseDef USING [AccessValConst, FieldNode, FieldType, LookupNameInContextRib, TypeGraphNodeNode], SaffronContext USING [CreateRootContextRib], SaffronContextPrivateTypes USING [AccessValNodeBody, ContextRibNodeBody, LocalContextNodeBody, TypeGraphNodeListNodeBody, TypeGraphNodeNodeBody], SaffronGenericDef USING [IdNode, IdNodeBody], SaffronTargetArchitecture USING [TargetArchitecture]; SaffronCompilerStateImpl: CEDAR PROGRAM IMPORTS SaffronBaseDef, SaffronContext EXPORTS SaffronBaseDef ~ BEGIN OPEN BD: SaffronBaseDef, GEN: SaffronGenericDef, PT: SaffronContextPrivateTypes; TargetArchitecture: TYPE = SaffronTargetArchitecture.TargetArchitecture; AccessValNode: TYPE = REF AccessValNodeBody; AccessValNodeBody: PUBLIC TYPE = PT.AccessValNodeBody; ContextRibNode: TYPE = REF ContextRibNodeBody; ContextRibNodeBody: PUBLIC TYPE = PT.ContextRibNodeBody; LocalContextNode: TYPE = REF LocalContextNodeBody; LocalContextNodeBody: PUBLIC TYPE = PT.LocalContextNodeBody; TypeGraphNodeListNode: TYPE = REF TypeGraphNodeListNodeBody; TypeGraphNodeListNodeBody: PUBLIC TYPE = PT.TypeGraphNodeListNodeBody; TypeGraphNodeNode: TYPE = REF TypeGraphNodeNodeBody; TypeGraphNodeNodeBody: PUBLIC TYPE = PT.TypeGraphNodeNodeBody; CompilerStateNode: TYPE ~ REF CompilerStateNodeBody; CompilerStateNodeBody: PUBLIC TYPE ~ RECORD [ targetArchitecture: TargetArchitecture, -- description of the target machine options: Rope.ROPE, -- command line options top: TypeGraphNodeNode _ NIL, bottom: TypeGraphNodeNode _ NIL, rootContextRib: ContextRibNode ]; FakeDamageCompilerState: PUBLIC PROC [cs: CompilerStateNode] RETURNS [CompilerStateNode] ~ {RETURN[cs]}; MakeCompilerState: PUBLIC PROC [targetArchitecture: TargetArchitecture, options: Rope.ROPE] RETURNS [CompilerStateNode] = BEGIN top, bottom: TypeGraphNodeNode; rootContextRib: ContextRibNode; [rootContextRib, top, bottom] _ SaffronContext.CreateRootContextRib[targetArchitecture]; RETURN [NEW[CompilerStateNodeBody _ [targetArchitecture, options, top, bottom, rootContextRib]]]; END; GetRootContextRib: PUBLIC PROC [cs: CompilerStateNode] RETURNS [ContextRibNode] = BEGIN RETURN[cs.rootContextRib]; END; GetTargetArchitecture: PUBLIC PROC [cs: CompilerStateNode] RETURNS [TargetArchitecture] ~ {RETURN[cs.targetArchitecture]}; GetIntrinsicAtomType: PUBLIC PROC [cs: CompilerStateNode] RETURNS [TypeGraphNodeNode] ~ { RETURN[GetIntrinsicType[cs, "ATOM"]]; }; GetIntrinsicBooleanType: PUBLIC PROC [cs: CompilerStateNode] RETURNS [TypeGraphNodeNode] ~ { RETURN[GetIntrinsicType[cs, "BOOLEAN"]]; }; GetIntrinsicCharacterType: PUBLIC PROC [cs: CompilerStateNode] RETURNS [TypeGraphNodeNode] ~ { RETURN[GetIntrinsicType[cs, "CHARACTER"]]; }; GetIntrinsicIntegerTypes: PUBLIC PROC [cs: CompilerStateNode] RETURNS [TypeGraphNodeListNode] ~ { RETURN[NEW[TypeGraphNodeListNodeBody _ LIST[ GetIntrinsicType[cs, "CARD64"], GetIntrinsicType[cs, "INT64"] ]]]; }; GetIntrinsicRealTypes: PUBLIC PROC [cs: CompilerStateNode] RETURNS [TypeGraphNodeListNode] ~ { RETURN[NEW[TypeGraphNodeListNodeBody _ LIST[ GetIntrinsicType[cs, "REAL"] ]]]; }; GetIntrinsicType: PROC [cs: CompilerStateNode, name: Rope.ROPE] RETURNS [TypeGraphNodeNode] = BEGIN field: BD.FieldNode _ BD.LookupNameInContextRib[IdNodeFromRope[name], cs.rootContextRib]; RETURN[BD.FieldType[field]]; END; GetTop: PUBLIC PROC [cs: CompilerStateNode] RETURNS [TypeGraphNodeNode] ~ {RETURN[cs.top]}; GetBottom: PUBLIC PROC [cs: CompilerStateNode] RETURNS [TypeGraphNodeNode] ~ {RETURN[cs.bottom]}; GetDefaultAccess: PUBLIC PROC [cs: CompilerStateNode] RETURNS [AccessValNode] ~ {RETURN[BD.AccessValConst["public"]]}; SetTopAndBottom: PUBLIC PROC [cs: CompilerStateNode, top, bottom: TypeGraphNodeNode] ~ {cs.top _ top; cs.bottom _ bottom}; IdNodeFromRope: PROC [r: Rope.ROPE] RETURNS [GEN.IdNode] = BEGIN RETURN [NEW[GEN.IdNodeBody _ [r, 0, 0]]]; END; END. 0SaffronCompilerStateImpl.mesa Copyright Σ 1988 by Xerox Corporation. All rights reserved. James Rauen, June 16, 1988 11:26:05 am PDT Last edited by: James Rauen August 17, 1988 5:38:09 pm PDT The CompilerState type bundles up the various data structures used throughout the process of generating program graphs. defaultAccess: AccessValNode, -- default access of current module The following procedures are defined in SaffronBaseDef: THIS IS CROCKED! IT WILL EVENTUALLY GO AWAY! SetDefaultAccess: PUBLIC PROC [cs: CompilerStateNode, access: AccessValNode] RETURNS [CompilerStateNode] ~ {cs.defaultAccess _ access; RETURN[cs]}; The following procedures are defined in SaffronCompilerState: SetIntrinsicAtomType: PUBLIC PROC [cs: CompilerStateNode, type: TypeGraphNodeNode] ~ {cs.intrinsicAtomType _ type}; SetIntrinsicBooleanType: PUBLIC PROC [cs: CompilerStateNode, type: TypeGraphNodeNode] ~ {cs.intrinsicBooleanType _ type}; SetIntrinsicCharacterType: PUBLIC PROC [cs: CompilerStateNode, type: TypeGraphNodeNode] ~ {cs.intrinsicCharacterType _ type}; SetIntrinsicIntegerTypes: PUBLIC PROC [cs: CompilerStateNode, types: TypeGraphNodeListNode] ~ {cs.intrinsicIntegerTypes _ types}; SetIntrinsicRealTypes: PUBLIC PROC [cs: CompilerStateNode, types: TypeGraphNodeListNode] ~ {cs.intrinsicRealTypes _ types}; Κ˜™Icode™K˜Kšœœœ˜4šœ œœ˜-Kšœ(Οc$˜LKšœ #™BKšœœ ˜-Jšœœ˜Jšœ˜ J˜K˜K˜—K˜K™7K™šŸœ œœœ˜hK˜—š Ÿœœœ8œœ˜K˜Kšœ˜KšœX˜Xšœœ˜$Kšœ=˜=—Kšœ˜K˜—š Ÿœœœœ˜WKšœ˜Kšœ˜K˜—šŸœ œœœ˜zK˜—šŸœ œœ˜YKšœ˜%K˜K˜—šŸœ œœ˜\Kšœ"˜(K˜K˜—šŸœ œœ˜^Kšœ$˜*K˜K˜—šŸœ œœ˜ašœœœ˜,Jšœ˜Jšœ˜J˜—J˜K˜—šŸœ œœ˜^šœœœ˜,Jšœ˜J˜—J˜J˜—š Ÿœœ$œœ˜cJšœœ œA˜YJšœœ˜Jšœ˜K˜—K˜KšŸœ œœœ ˜[K˜KšŸ œ œœœ ˜aK˜Kš Ÿœœœœœœ˜v™,K˜—š Ÿœœœ0œ1œ™“K™—K™=K™šŸœœœR™sK™—šŸœœœU™yK™—šŸœœœW™}K™—šŸœœœ\™K™—šŸœœœY™{K™—KšŸœœœ^˜zK˜š Ÿœœ œœœ ˜@Kšœœœ˜)Kšœ˜K˜—šœ˜K˜———…—D„