Include [ SaffronBaseDecls ]; SaffronTreeDecls: Module = Begin DoTop: TreeRecursiveFunction [Tree, ROPE.fileName, Environment.arg, CompilerState.arg] Returns [Environment.res] DamagedReps [Environment.arg]; MakeEnvironment: TreeRecursiveFunction [Tree, ROPE.fileName, Environment.arg, CompilerState] Returns [Environment.res] DamagedReps [Environment.arg]; ProcessDirectoryClause: TreeRecursiveFunction [Tree, FieldList.arg, LocalContext.arg, Environment.arg, CompilerState] Returns [FieldList.res, LocalContext.res, Environment.res] DamagedReps [FieldList.arg, LocalContext.arg, Environment.arg]; ProcessDirectoryItem: TreeRecursiveFunction [Tree, LocalContext.arg, Environment.arg, CompilerState] Returns [Field, LocalContext.res, Environment.res] DamagedReps [LocalContext.arg, Environment.arg]; RestrictNamedTGN: TreeRecursiveFunction [Tree, TypeGraphNode.arg] Returns [TypeGraphNode.res] DamagedReps [TypeGraphNode.arg]; AddIdsToRestrictionList: TreeRecursiveFunction [Tree, TypeGraphNode.named] Returns [TypeGraphNode.res] DamagedReps [TypeGraphNode.named]; BuildInterfaceTGN: TreeRecursiveFunction [Tree, LocalContext.arg, BOOLEAN.cedar, CompilerState] Returns [LocalContext.res, TypeGraphNode.interface] DamagedReps [LocalContext.arg]; BuildImplementationTGN: TreeRecursiveFunction [Tree, LocalContext.arg, BOOLEAN.cedar, CompilerState] Returns [LocalContext.res, TypeGraphNode.implementation] DamagedReps [LocalContext.arg]; MakeContextTree: TreeRecursiveFunction [ Tree, ContextRib, BOOLEAN.PaintRecords, CompilerState ] Returns [ ContextTree ]; MakeContextTree1: TreeRecursiveFunction [ Tree, ContextRib, BOOLEAN.PaintRecords, CompilerState ] Returns [ ContextTree ]; MakeBindListContextTreeWithScope: TreeRecursiveFunction [ Tree.bindList, ScopePTree, ContextRib, BOOLEAN.PaintRecords, CompilerState ] Returns [ ContextTree ]; MakeBindListContextTreeWithDefBody: TreeRecursiveFunction [ Tree.bindList, DefBodyPTree, ContextRib, BOOLEAN.PaintRecords, CompilerState ] Returns [ ContextTree ]; HangContextsFromContextTree: TreeRecursiveFunction [ Tree, ContextTree.arg, ContextRib, BOOLEAN.PaintRecords, CompilerState ] Returns [ ContextTree.res ] DamagedReps [ ContextTree.arg ]; UpdateLocalContext: TreeRecursiveFunction [ Tree, LocalContext.arg, BOOLEAN.PaintRecords, CompilerState ] Returns [ LocalContext.res ] DamagedReps [ LocalContext.arg ]; AddDeclarationsToFieldList: TreeRecursiveFunction [Tree, FieldList.arg, LocalContext.arg, CompilerState] Returns [FieldList.res, LocalContext.res] DamagedReps [FieldList.arg, LocalContext.arg]; AddDeclarationToFieldList: TreeRecursiveFunction [Tree, FieldList.arg, LocalContext.arg, CompilerState] Returns [FieldList.res, LocalContext.res] DamagedReps [FieldList.arg, LocalContext.arg]; MakeType: TreeRecursiveFunction [Tree, LocalContext.a, BOOLEAN.PaintRecords, CompilerState] Returns [ LocalContext.b, TypeGraphNode ] DamagedReps [ LocalContext.a ]; LookupTypeId: TreeRecursiveFunction [ Tree, LocalContext.arg] Returns [ LocalContext.res, TypeGraphNode ] DamagedReps [ LocalContext.arg ]; MakeArgumentLists: TreeRecursiveFunction [ Tree, LocalContext.a, BOOLEAN.PaintRecords, CompilerState ] Returns [ LocalContext.b, FrozenFieldList.input, FrozenFieldList.output ] DamagedReps [ LocalContext.a ]; MakeFieldList: TreeRecursiveFunction [ Tree, LocalContext.a, BOOLEAN.PaintRecords, CompilerState ] Returns [ LocalContext.b, FieldList ] DamagedReps [ LocalContext.a ]; AddPairsToFieldList: TreeRecursiveFunction [Tree, LocalContext.a, FieldList.a, BOOLEAN.PaintRecords, CompilerState] Returns [ LocalContext.b, FieldList.b ] DamagedReps [ LocalContext.a, FieldList.a ]; AddToFieldList: TreeRecursiveFunction [Tree, LocalContext.a, FieldList.a, BOOLEAN.PaintRecords, CompilerState] Returns [ LocalContext.b, FieldList.b ] DamagedReps [ LocalContext.a, FieldList.a ]; AddNamesToFieldList: TreeRecursiveFunction [ Tree, AccessVal, TypeGraphNode, DefaultExp, FieldList.a ] Returns [ FieldList.b ] DamagedReps [ FieldList.a ]; AddTypeDeclarationToFieldList: TreeRecursiveFunction [Tree, FieldList.arg, LocalContext.arg, CompilerState, AccessVal.id, AccessVal.type, TypeGraphNode, TypeExpPTree, DefaultExp] Returns [FieldList.res, LocalContext.res] DamagedReps [FieldList.arg, LocalContext.arg]; AddValueDeclarationToFieldList: TreeRecursiveFunction [Tree, FieldList.arg, CompilerState, DeclarationPTree, AccessVal, TypeGraphNode, InitializationPTree] Returns [FieldList.res] DamagedReps [FieldList.arg]; MakeElementList: TreeRecursiveFunction [ Tree, LocalContext.arg, BOOLEAN.machineDependent ] Returns [ LocalContext.res, TypeGraphNode ] DamagedReps [ LocalContext.arg ]; ElementInfo: TreeRecursiveFunction [ Tree ] Returns [ Id, Value ]; GetPointerTypeInfo: TreeRecursiveFunction [Tree, LocalContext.arg, BOOLEAN.PaintRecords, CompilerState] Returns [ LocalContext.res, BoundsVal, BOOLEAN.readOnly, TypeGraphNode] DamagedReps [ LocalContext.arg ]; MakeTransferMode: TreeRecursiveFunction [ Tree ] Returns [ROPE]; MakeUnionList: TreeRecursiveFunction [ Tree, LocalContext.a, BOOLEAN.paintRecords, CompilerState] Returns [ LocalContext.b, UnionList ] DamagedReps [ LocalContext.a ]; AddVariantsToUnionList: TreeRecursiveFunction [ Tree, LocalContext.arg, UnionList.arg, BOOLEAN.paintRecords, CompilerState] Returns [LocalContext.res, UnionList.res] DamagedReps [LocalContext.arg, UnionList.arg]; AddNamesToUnionList: TreeRecursiveFunction [ Tree, FrozenFieldList, UnionList.arg] Returns [UnionList.res] DamagedReps [UnionList.arg]; MakeTagType: TreeRecursiveFunction [Tree, LocalContext.a, BOOLEAN.PaintRecords, CompilerState] Returns [ LocalContext.b, TypeGraphNode.tag, BOOLEAN.isStarTagType ] DamagedReps [ LocalContext.a ]; MakeStarTagType: TreeRecursiveFunction [Tree, LocalContext.a] Returns [ LocalContext.b, TypeGraphNode ] DamagedReps [ LocalContext.a ]; AddVariantNamesToEnumTypeTGN: TreeRecursiveFunction [Tree, LocalContext.a, TypeGraphNode] Returns [LocalContext.b] DamagedReps [ LocalContext.a ]; MakeVariantFlavor: TreeRecursiveFunction [Tree, CompilerState] Returns [VariantFlavor]; GetIdentInfo: TreeRecursiveFunction [ Tree] Returns [Id, PositionVal ]; GetSequenceTagInfo: TreeRecursiveFunction [Tree, CompilerState] Returns [Id, PositionVal, AccessVal]; MakeNameSequence: TreeRecursiveFunction [Tree] Returns [NameSequence]; AddNamesToSequence: TreeRecursiveFunction [Tree, NameSequence.arg] Returns [NameSequence.res] DamagedReps [NameSequence.arg]; EvaluateExpression: TreeRecursiveFunction [Tree, LocalContext, FieldList, CompilerState, TypeGraphNode.targetType] Returns [Value]; CompileExpression: TreeRecursiveFunction [Tree, ContextTree.arg, CompilerState, TypeGraphNode.targetType] Returns [Value, ContextTree.res] DamagedReps [ContextTree.arg]; EvaluateSizeOfTypeExpression: TreeRecursiveFunction [Tree, LocalContext, FieldList, CompilerState, TypeGraphNode.targetType] Returns [BigINT]; CompileSizeOfTypeExpression: TreeRecursiveFunction [Tree, ContextTree.arg, CompilerState, TypeGraphNode.targetType] Returns [BigINT]; EvaluateFirstOfTypeExpression: TreeRecursiveFunction [Tree, LocalContext, FieldList, CompilerState, TypeGraphNode.targetType] Returns [Value]; CompileFirstOfTypeExpression: TreeRecursiveFunction [Tree, ContextTree.arg, CompilerState, TypeGraphNode.targetType] Returns [Value]; EvaluateLastOfTypeExpression: TreeRecursiveFunction [Tree, LocalContext, FieldList, CompilerState, TypeGraphNode.targetType] Returns [Value]; CompileLastOfTypeExpression: TreeRecursiveFunction [Tree, ContextTree.arg, CompilerState, TypeGraphNode.targetType] Returns [Value]; CompileLValue: TreeRecursiveFunction [Tree, ContextTree, CompilerState] Returns [ParameterizedFieldDescriptor, TypeGraphNode]; IsPlus: TreeRecursiveFunction [Tree] Returns [BOOLEAN]; IsMinus: TreeRecursiveFunction [Tree] Returns [BOOLEAN]; IsTimes: TreeRecursiveFunction [Tree] Returns [BOOLEAN]; IsDivide: TreeRecursiveFunction [Tree] Returns [BOOLEAN]; IsMod: TreeRecursiveFunction [Tree] Returns [BOOLEAN]; GetRelationOp: TreeRecursiveFunction [Tree] Returns [RelationOp]; IntegerValueFromLiteral: TreeRecursiveFunction [Tree] Returns [BigINT]; CompileQualifiedExpression: TreeRecursiveFunction [Tree, Value.ofExp, ContextTree.arg, CompilerState, TypeGraphNode.targetType] Returns [Value.res, ContextTree.res] DamagedReps [ContextTree.arg]; InitializationIsEmpty: TreeRecursiveFunction [Tree] Returns [BOOLEAN]; InitializationIsBinding: TreeRecursiveFunction [Tree] Returns [BOOLEAN]; InitializationIsAssignment: TreeRecursiveFunction [Tree] Returns [BOOLEAN]; GetInitialValue: TreeRecursiveFunction [Tree] Returns [Value]; Compile: TreeRecursiveFunction [Tree, ContextTree.arg, ProgramGraph.arg, CompilerState] Returns [ContextTree.res, ProgramFragment, ProgramGraph.res] DamagedReps [ContextTree.arg, ProgramGraph.arg]; CompileFrameBlock: TreeRecursiveFunction [Tree, TypeGraphNode.transferType, ContextTree.parent, ProgramGraph.arg, CompilerState] Returns [ContextTree, ProgramFragment, ProgramGraph.res] DamagedReps [ContextTree.parent, ProgramGraph.arg]; InternalCompileBlock: TreeRecursiveFunction [Tree, LocalContext.withinBlock, FieldList.arg, ProgramGraph.arg, CompilerState] Returns [ContextTree, ProgramFragment, ProgramGraph.res] DamagedReps [LocalContext.withinBlock, FieldList.arg, ProgramGraph.arg]; CompileScope: TreeRecursiveFunction [Tree, LocalContext.withinScope, FieldList.arg, ProgramGraph.arg, CompilerState] Returns [ContextTree, ProgramFragment, ProgramGraph.res] DamagedReps [LocalContext.withinScope, FieldList.arg, ProgramGraph.arg]; CompileInitialization: TreeRecursiveFunction [Tree, ContextTree.arg, ProgramGraph.arg, CompilerState, TypeGraphNode.targetType] Returns [ContextTree.res, Value, ProgramGraph.res] DamagedReps [ContextTree.arg, ProgramGraph.arg]; MakeCodeToStoreTOSInVariousLocalFrameSlots: TreeRecursiveFunction [Tree, ContextTree] Returns [ProgramFragment]; AddModulePropertiesToCompilerState: TreeRecursiveFunction [Tree, CompilerState.arg] Returns [CompilerState.res] DamagedReps [CompilerState.arg]; AddValueDependencies: TreeRecursiveFunction [Tree, DependencyGraph.arg, DependencyGraphNode.arg] Returns [DependencyGraph.res] DamagedReps [DependencyGraph.arg]; AddSizeDependencies: TreeRecursiveFunction [Tree, DependencyGraph.arg, DependencyGraphNode.arg] Returns [DependencyGraph.res] DamagedReps [DependencyGraph.arg]; AddFirstDependencies: TreeRecursiveFunction [Tree, DependencyGraph.arg, DependencyGraphNode.arg] Returns [DependencyGraph.res] DamagedReps [DependencyGraph.arg]; AddLastDependencies: TreeRecursiveFunction [Tree, DependencyGraph.arg, DependencyGraphNode.arg] Returns [DependencyGraph.res] DamagedReps [DependencyGraph.arg]; TypeOpIsCode: TreeRecursiveFunction [Tree] Returns [BOOLEAN]; TypeOpIsFirst: TreeRecursiveFunction [Tree] Returns [BOOLEAN]; TypeOpIsLast: TreeRecursiveFunction [Tree] Returns [BOOLEAN]; TypeOpIsNil: TreeRecursiveFunction [Tree] Returns [BOOLEAN]; GetBoundsVal: TreeRecursiveFunction [ Tree ] Returns [ BoundsVal ]; GetLowerAndUpper: TreeRecursiveFunction [ Tree ] Returns [ Value.lower, Value.upper ]; GetExpVal: TreeRecursiveFunction [ Tree ] Returns [ Value ]; GetPositionVal: TreeRecursiveFunction [ Tree ] Returns [ PositionVal ]; GetAccessVal: TreeRecursiveFunction [Tree, AccessVal.default] Returns [AccessVal.res]; GetDefaultExpVal: TreeRecursiveFunction [ Tree ] Returns [ DefaultExp ]; IsKeywordPresent: TreeRecursiveFunction [ Tree ] Returns [ BOOLEAN ]; IdVal: TreeRecursiveFunction [ Tree ] Returns [ Id ]; RopeFromIdOrString: TreeRecursiveFunction [Tree] Returns [ROPE]; End. -@SaffronTreeDecls.ThreeC4 Copyright ำ 1987 by Xerox Corporation. All rights reserved. Shoup, August 8, 1986 5:34:38 pm PDT Bill Jackson (bj) April 27, 1987 3:51:50 pm PDT Lucy Hederman August 21, 1987 11:48:22 am PDT Sturgis, July 21, 1987 3:23:25 pm PDT James Rauen, July 28, 1988 4:10:15 pm PDT Last edited by: James Rauen August 25, 1988 3:25:11 pm PDT Environments and Interfaces The main top-level function TreeRecursiveFunction [Tree, ROPE, Environment.arg, CompilerState.arg] Returns [Environment.res, InterfaceVal, CompilerState.res] DamagedReps [Environment.arg, CompilerState.arg]; Explore: A top-level function which enters included files in the environment but does no other work TreeRecursiveFunction [Tree, ROPE.fileName, Environment.arg, CompilerState.arg] Returns [Environment.res, CompilerState.res] DamagedReps [Environment.arg, CompilerState.arg]; TreeRecursiveFunction [Tree, ROPE, Environment.arg, CompilerState.arg] Returns [Environment.res, InterfaceVal, CompilerState.res] DamagedReps [Environment.arg, CompilerState.arg]; This is the main function, in fact. DoTop simply calls this. Applied to Directory and IncludeItem. For each IncludeItem, if the file does not already appear in the environment a parse tree for the specified file is obtained and the main function MakeEnvironment is applied to it, yielding an updated environment, and an interface for the file. Otherwise the interface for the file is retrieved from the envirpnment. The filename, a locally visible TGN and an interfaceTGN are then entered into the localContext. ProcessDirectoryClause: Applied to Directory and IncludeItem. For each IncludeItem, if the file does not already appear in the environment a parse tree for the specified file is obtained and the main function MakeEnvironment is applied to it, yielding an updated environment, and an interface for the file. Otherwise the interface for the file is retrieved from the envirpnment. The filename, a locally visible TGN and an interfaceTGN are then entered into the localContext. TreeRecursiveFunction [Tree, LocalContext.arg, Environment.arg, CompilerState.arg] Returns [LocalContext.res, Environment.res, CompilerState.res] DamagedReps [LocalContext.arg, Environment.arg, CompilerState.arg]; ProcessDirectoryItem: TreeRecursiveFunction [Tree, LocalContext.arg, Environment.arg, CompilerState.arg] Returns [LocalContext.res, Environment.res, CompilerState.res] DamagedReps [LocalContext.arg, Environment.arg, CompilerState.arg]; ExploreDirectoryClause: Like ProcessDirectoryClause except that only ExploreEnvironment is applied to the new file. TreeRecursiveFunction [Tree, LocalContext.arg, Environment.arg, CompilerState.arg] Returns [LocalContext.res, Environment.res, CompilerState.res] DamagedReps [LocalContext.arg, Environment.arg, CompilerState.arg]; ExploreDirectoryItem: TreeRecursiveFunction [Tree, LocalContext.arg, Environment.arg, CompilerState.arg] Returns [LocalContext.res, Environment.res, CompilerState.res] DamagedReps [LocalContext.arg, Environment.arg, CompilerState.arg]; Applied to Using clauses. The second argument is a named TGN whose type field is an interface type graph node. MakeInterfaceTGN: Applied to Using clauses; Creates an empty interface TGN for the interface passed in and puts in the items mentioned if any, or just creates an interface TGN for the entire interface (if no Using clause) TreeRecursiveFunction [Tree, LocalContext.arg, InterfaceVal] Returns [ LocalContext.res, TypeGraphNode ] DamagedReps [ LocalContext.arg ]; Applied to IdList. AddIdsToInterfaceTGN: Applied to IdList. Calls the base function AddTGNToInterfaceTGN for each Id. TreeRecursiveFunction [Tree, LocalContext.arg, TypeGraphNode.interface, InterfaceVal] Returns [ LocalContext.res] DamagedReps [ LocalContext.arg ]; Applied to DefHeads Applied to ProgHeads Context Trees Each new scope is required to make a ContextTree. The basic algorithm is 1. Create an empty local context. 2. Update it - fill in the new information. 3. Freeze the local context into a rib. 4. Make a context tree with the rib. 5. Hang trees for nested contexts from it. Makes the Context Tree for everything in Scope other than the bindlist; i.e. it makes the context that is nested within bindList. This is needed because of the problem that semantically nested things are not syntactically nested. Used to pass the job of making a context tree onto the BindList Makes the Context Tree for a bindList and its nested context - everything else in Scope. Used to pass the job of making a context tree onto the DefBody Makes the Context Tree for a bindList and its nested context - everything else in DefBody. Each Scope hangs the ContextTrees for nested Scopes from its own ContextTree. LocalContext For DecList this function is implemented 'in two passes' with FillInLocalContext and PutNewNamesInLocalContext For BindList and Directory it is implemented by simple calls to base functions Applied to DecLists. Applied to Declarations. PutNewNamesInLocalContext: This function is applied to DecList and Declaration on a 'first pass' that finds all the locally visible type names. TreeRecursiveFunction [ Tree, LocalContext.arg, CompilerState ] Returns [ LocalContext.res ] DamagedReps [ LocalContext.arg ]; PutNewTypeNamesInLocalContext: This function is applied to IdentList by PutNewNamesInLocalContext. It has the extra Access field: the access on a Declaration is common to all Ids in the Declaration. TreeRecursiveFunction [ Tree, LocalContext.arg, AccessVal ] Returns [ LocalContext.res ] DamagedReps [ LocalContext.arg ]; PutNewVariableNamesInLocalContext: This function is applied to IdentList by PutNewNamesInLocalContext. The BOOLEAN argument is true if the names are for runtime constants, false if they are for variables. TreeRecursiveFunction [ Tree, LocalContext.arg, AccessVal, BOOLEAN ] Returns [ LocalContext.res ] DamagedReps [ LocalContext.arg ]; FillInLocalContext: This function implements the 'second pass' of UpdateLocalContext and fills in the type information for the previously recorded type names in the currect context. TreeRecursiveFunction [ Tree, LocalContext.arg, BOOLEAN.PaintRecords, CompilerState ] Returns [ LocalContext.res ] DamagedReps [ LocalContext.arg ]; RecAddArcsfromLVTGNtoTGN: This function does the work for FillInLocalContext; it is applied to IdentList, and associates each (previously recorded) type name (Id) with its TypeGraphNode and access and default values. TreeRecursiveFunction [ Tree, LocalContext.arg, AccessVal, TypeGraphNode, DefaultExp ] Returns [ LocalContext.res ] DamagedReps [ LocalContext.arg ]; RecAddArcsFromLocalNameToInstance: This function does the work for FillInLocalContext; it is applied to IdentList, and associates each (previously recorded) name (Id) with its instance and access values. TreeRecursiveFunction [ Tree, LocalContext.arg, AccessVal, Instance ] Returns [ LocalContext.res ] DamagedReps [ LocalContext.arg ]; Type Construction For TypeId type expressions. Might actually involve some creation of TGNs because not all possible variants and interface type TGNs are created when the variant record or interface is created. MakeType of a TypeId is implemented by this function - but this name seemed appropriate since the intention of a TypeId is that it should describe types that already exist. For Transfer types. For Record type constructors. For named field lists. For unnamed field lists. This function is applied to IdList by AddPairsToFieldList and adds pairs to the FieldList AddNamedFieldsToFieldList: jrr - July 29, 1988 1:55:12 pm PDT TreeRecursiveFunction [Tree, Field.template, FieldList.arg] Returns [FieldList.res] DamagedReps [FieldList.arg]; For enumerated types. Union and Sequence Types For Union types. This function is applied to IdList by AddVariantsToUnionList and adds Id, FrozenFieldList pairs to the UnionList This function makes an enumerated type from the Ids in a VariantList for * type Tag fields This function is applied to VariantList by MakeStarTagType to build an enumerated type Variants for Union types come in three flavors: Vanilla, Overlaid, Computed. Currently only used by MakeVariantFlavor to obtain Id and Position from a tag Ident. Name Sequences Compiling Expressions Implemented in SaffronExpressionCompileMethods.ThreeC4 The various Evaluate routines are used while the dependency graph is being walked (the local context is still being built). The values they return are always compile time constants. The Compile routines are used by other assorted Compile routines. Applied to Exp's. Constructs and returns a value corresponding to the Exp. Very important: Since there are no guarantees about the type of the instance returned, this function should only be called: (1) by CompileAndTypeCheckExpression, or (2) to compile an argument of a polymorphic operator. In the second case, the code related to the polymorphic operator is responsible for performing any necessary type checking. Note that the targetType is only used to provide hints for evaluating the Exp; it does not affect the type of the returned value. CompileAndTypeCheckExpression is responsible for testing that the type of the returned value is compatible with the target type. Applied to AddOp's. Applied to AddOp's. Applied to MultOp's. Applied to MultOp's. Applied to MultOp's. Applied to Num's (number literals). Returns a Value for the literal. Declarations Applied to Initializations (and then to InitialValues). Returns an unparsed or dummy value. (No, I don't know what it's supposed to do when it encounters other kinds of initial values.) Compiling Statements and Blocks Implemented in SaffronBlockCompileMethods.ThreeC4 Frame blocks = blocks corresponding to frame on the stack. Nested blocks = BEGIN..END structures nested within frame blocks. There are also definitions blocks??? Applied to Blocks. CompileNestedBlock: Applied to Blocks. TreeRecursiveFunction [Tree, ContextRib.parent, CompilerState] Returns [ContextTree, ProgramFragment]; Applied to Blocks. This is the guts of the block compiler; CompileFrameBlock and CompileNestedBlock both call InternalCompileBlock. The LocalContext argument either is an empty local context (for nested blocks) or contains field info for the transfer type's arguments and results. CompileStatement: Applied to Statements. (note: when CompileStatement encounters a block statement, it simply calls CompileNestedBlock.) TreeRecursiveFunction [Tree, LocalContext, CompilerState] Returns [ContextTree, ProgramFragment]; Applied to Initializations and InitialValues. If the BOOLEAN value returned is FALSE, then no initialization code has to be executed. Otherwise, the ProgramFragment returned is code to place the appropriate initial value on the top of the runtime stack., Applied to IdentLists and Idents. Module Properties Implemented in SaffronModuleHeaderMethods.ThreeC4 Needs more thinking. I'm just stuffing the Access into the compiler state right now. Applied to DefHeads and Progheads. Dependency Graph Implemented in SaffronDependencyGraphMethods.ThreeC4 Applied to Exps and Initializations. Adds dependencies of the form (DGN depends on foo), where DGN is the argument DependencyGraphNode.arg and the foos are based on the Exp. Applied to TypeExps. Adds dependencies of the form (DGN depends on foo), where DGN is the argument DependencyGraphNode.arg and the foos are based on the Exp. Miscellaneous This function is applied to Bounds by GetBoundsVal Produces an Id from an Exp if possible eof... สb– "cedar" style˜codešœ™K™;Kšœ$™$K™/K™-K™%K™)K™:—K˜Kšะizœ˜K˜Kšฯnœœ˜ headšฯz™šฯbœ˜K™šœฯkœกœ˜OKšœ˜Kš œ˜K˜—šœกœ กœ™FKšœ3™:Kš œ&™1—K˜—š ™K™Zšœกœ กœ กœ™OKšœ%™,Kš œ&™1K™—šœกœกœ กœ™FKšœ3™:Kš œ&™1K™——š ˜K™<šœกœ กœ กœ˜KKšœ˜Kš œ˜K˜—K˜—š ˜K™โK™_šœ4กœ˜]Kšœ3˜:Kš œ.กœ˜?—K˜—š ™K™โK™_šœ%กœ™RKšœ7™>Kš œกœ™C—K™—šžœ˜šœ9˜NKšœ+˜2Kš œกœ˜0K˜——šžœ™šœ=™RKšœ7™>Kš œกœ™CK™——š ™Kšœ[™[šœ%กœ™RKšœ7™>Kš œกœ™C—K™—š ž œ™šœ=™RKšœ7™>Kš œกœ™CK™——š ˜K™ošœ˜/Kšœ˜Kš œ˜ K˜——š ™K™หšœ'™K™Zšœ,กœ˜fKšœ˜K˜——š œ˜K™Mšœ&กœ˜`Kšœ˜Kš œ˜ ———šŸ ™ š œ˜Kšœn™nK™Nšœกœ˜UKšœ˜Kš œ˜!K˜——šžœ˜K™šœ7˜LKšœ"˜)Kš œ#˜.K˜——šžœ˜K™šœ7˜LKšœ"˜)Kš œ#˜.K˜——š œ™K™tšœ*™?Kšœ™Kš œ™!K™——š œ™Kšœง™งšœ&™;Kšœ™Kš œ™!K™——š !œ™"Kšœฌ™ฌšœ&กœ™DKšœ™Kš œ™!K™——š œ™K™กšœกœ™UKšœ™Kš œ™!K™——š œ™Kšœพ™พšœA™VKšœ™Kš œ™!K™——š !œ™"Kšœจ™จšœ0™EKšœ™Kš œ™!———šŸ™š œ˜ Kšœกœ˜QKšœ"˜)Kš œ˜K˜—š  ˜ K™ํKšœ˜/Kšœ$˜+Kš œ˜!K˜—š œ˜K™Kšœกœ˜SKšœB˜IKš œ˜K˜—š  œ˜K™Kšœกœ˜SKšœ˜%Kš œ˜K˜—š œ˜K™šœ$กœ˜^Kšœ ˜'Kš œ!˜,K˜——š œ˜K™šœ%กœ˜^Kšœ ˜'Kš œ!˜,K˜——š œ˜Kšœo™ošœ<˜QKšœ˜Kš œ˜K˜——šžœ˜Kšœ~˜“Kšœ"˜)Kš œ#˜.K˜—šžœ˜Kšœf˜{Kšœ˜Kš œ˜K˜—šžœ™K™"Kšœ&™;Kšœ™Kš œ™K™—š œ˜K™šœกœ˜JKšœ$˜+Kš œ˜!K˜——š  œ˜ šœ ˜Kšœ˜K˜——š œ˜šœกœ˜SKšœ กœกœ˜GKš œ˜!K˜——š œ˜šœ ˜Kšœกœ˜———šŸ™š  œ˜K™Kšœกœ˜RKšœ˜%Kš œ˜K˜—š ˜Kšœ*กœ˜cKšœ"˜)Kš œ#˜.K˜—š ˜Kšœp™pKšœ(˜=Kšœ˜Kš œ˜K˜—š  ˜ šœกœ˜QKšœ&กœ˜DKš œ˜K˜——š ˜K™Zšœ˜,Kšœ"˜)Kš œ˜K˜——š ˜KšœV™Všœ&˜;Kšœ˜Kš œ˜K˜——š œ˜K™Lšœ˜+Kšœ˜—K˜—š  œ˜ KšœT™Tšœ˜Kšœ˜—K˜—š œ˜šœ˜+Kšœ˜%———šŸ™š ˜šœ˜Kšœ˜K˜——š ˜šœ˜.Kšœ˜Kš œ˜———šŸ™Kšœ6™6K™K™๙K™šžœ˜KšœI˜^Kšœ ˜K˜—š ˜KšœK™Kš œ_ œ ™|Kšœ)™)Kšœ5™5—Kšœ{™{Kšœƒ™ƒKšœA˜VKšœ˜ Kš œ˜K˜—šžœ˜KšœI˜^Kšœ ˜K˜—šžœ˜KšœA˜VKšœ ˜K˜—šžœ˜KšœI˜^Kšœ ˜K˜—šžœ˜KšœA˜VKšœ ˜K˜—šžœ˜KšœI˜^Kšœ ˜K˜—šžœ˜KšœA˜VKšœ ˜K˜—šž œ˜Kšœ#˜8Kšœ/˜6K˜—šžœœœกœ˜7šœ™K˜——šžœœœกœ˜8šœ™K˜——šžœœœกœ˜8šœ™K˜——šžœœœกœ˜9šœ™K˜——šžœœœกœ˜6Kšœ™K™—šž œœœ˜AK˜—šž ข  ˜KšœE™Ešœ˜Kšœ ˜K˜——šžœ˜KšœN˜cKšœ˜$Kš œ˜K˜——šŸ ™ Kšžœœœกœ˜GKšžœœœกœ˜IKšžœœœกœ˜KK˜š ˜Kšœป™ปšœ˜Kšœ ˜K˜———šŸ™Kšœ1™1K™K™ฃK™šžœ˜Kšœ9˜NKšœ5˜Kšœ ™'K™—šžœ˜Kšœš™šKšœQ˜fKšœ1˜8Kš œ=˜H—K˜šž œ˜ KšœQ˜fKšœ1˜8Kš œ=˜HK˜—šžœ™Kšœw™wKšœ$™9Kšœ ™'K™—šžœ˜Kšœ6กœกœซ™€KšœS˜hKšœ+˜2Kš œ%˜0K˜—šž*œ˜+K™!Kšœ˜)Kšœ˜——šŸ™Kšœ1™1K™K™Uš #˜#Kšœ"™"šœ˜/Kšœ˜Kš œ˜ K˜———šŸ™K™4K™šžœ˜Kšœฎ™ฎKšœ5˜JKšœ˜Kš œ˜"K˜—šžœ˜Kšœž™žKšœ5˜JKšœ˜Kš œ˜"K˜—šžœ˜Kšœ5˜JKšœ˜Kš œ˜"K˜—šžœ˜Kšœ5˜JKšœ˜Kš œ˜"K˜—K˜Kšž œœœกœ˜=Kšž œœœกœ˜>Kšž œœœกœ˜=Kšž œœœกœ˜<—šŸ ™ š  œ˜ šœ ˜Kšœ˜K˜——š œ˜Kšœ2™2šœ ˜Kšœ˜%K˜——š  ˜ šœ ˜Kšœ ˜K˜——š ž œ˜šœ ˜Kšœ˜K˜——š  œ˜ šœ˜/Kšœ˜K˜——š œ˜šœ ˜Kšœ˜K˜——š œ˜šœ ˜Kšœกœ˜K˜——š œ˜K™&šœ ˜Kšœ˜K˜——Kšžœœœกœ˜@K˜K˜Kšœ˜—K˜K™—…—-ll