-- SaffronBlockCompileImpl.mesa -- Copyright Ó 1987 by Xerox Corporation. All rights reserved. -- Generated by Rauen.pa at September 1, 1988 6:38:45 pm PDT -- using ThreeCasabaFour [1.2] of June 1, 1987 6:00:00 pm PDT DIRECTORY SaffronPGDef, SaffronAG9Def, SaffronAG4Def, ThreeC4Support, SaffronBaseDef, SaffronATDef; SaffronBlockCompileImpl: CEDAR PROGRAM IMPORTS SaffronPGDef, ThreeC4Support, SaffronBaseDef EXPORTS SaffronAG9Def, SaffronAG4Def= BEGIN OPEN SaffronPGDef, SaffronAG9Def, SaffronAG4Def, ThreeC4Support, SaffronBaseDef, SaffronATDef; BlockProdInternalCompileBlock: PUBLIC PROC[ref: REF ANY, localContext: LocalContextNode, fl: FieldListNode, pg: ProgramGraphNode, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode, temp1: ProgramFragmentNode, temp2: ProgramGraphNode] = BEGIN tree: BlockNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: BlockProdData _ NARROW[tree.data]; BEGIN lc1: LocalContextNode; lc1 _ FakeDamageContext[localContext]; [temp0, temp1, temp2] _ treeData.Scope.procs.CompileScope[treeData.Scope, lc1, fl, pg, cs]; END; END END; BlockProdCompile: PUBLIC PROC[ref: REF ANY, parentTree: ContextTreeNode, pg: ProgramGraphNode, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode, temp1: ProgramFragmentNode, temp2: ProgramGraphNode] = BEGIN tree: BlockNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: BlockProdData _ NARROW[tree.data]; BEGIN newTree: ContextTreeNode; childTree: ContextTreeNode; code: ProgramFragmentNode; pg1: ProgramGraphNode; fl: FieldListNode; lc1: LocalContextNode; lc1 _ CreateEmptyContext[Rib[parentTree], False[]]; fl _ CreateEmptyFieldList[]; [childTree, code, pg1] _ tree.procs.InternalCompileBlock[tree, lc1, fl, pg, cs]; newTree _ AddSubContextTree[parentTree, childTree]; temp2 _ pg1; temp1 _ code; temp0 _ newTree; END; END END; BlockProdCompileFrameBlock: PUBLIC PROC[ref: REF ANY, transferType: TypeGraphNodeNode, parentTree: ContextTreeNode, pg: ProgramGraphNode, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode, temp1: ProgramFragmentNode, temp2: ProgramGraphNode] = BEGIN tree: BlockNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: BlockProdData _ NARROW[tree.data]; BEGIN newTree: ContextTreeNode; childTree: ContextTreeNode; code: ProgramFragmentNode; pg1: ProgramGraphNode; fl: FieldListNode; lc1: LocalContextNode; lc1 _ CreateEmptyContext[Rib[parentTree], True[]]; fl _ CreateEmptyFieldList[]; [childTree, code, pg1] _ tree.procs.InternalCompileBlock[tree, lc1, fl, pg, cs]; newTree _ AddSubContextTree[parentTree, childTree]; temp2 _ pg1; temp1 _ code; temp0 _ newTree; END; END END; ScopeProdCompileScope: PUBLIC PROC[ref: REF ANY, localContext: LocalContextNode, fl: FieldListNode, pg: ProgramGraphNode, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode, temp1: ProgramFragmentNode, temp2: ProgramGraphNode] = BEGIN tree: ScopeNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ScopeProdData _ NARROW[tree.data]; BEGIN pf3: ProgramFragmentNode; contextTree3: ContextTreeNode; pf2: ProgramFragmentNode; pg2: ProgramGraphNode; contextTree2: ContextTreeNode; pf1: ProgramFragmentNode; pg1: ProgramGraphNode; contextTree1: ContextTreeNode; rib: ContextRibNode; localContext3: LocalContextNode; blockTGN: TypeGraphNodeNode; fieldList4: FieldListNode; localContext2: LocalContextNode; dependencyGraph: DependencyGraphNode; fieldList3: FieldListNode; fieldList2: FieldListNode; fieldList1: FieldListNode; localContext1: LocalContextNode; [fieldList1, localContext1] _ treeData.OptDecList.procs.AddDeclarationsToFieldList[treeData.OptDecList, fl, localContext, cs]; fieldList2 _ LookupIdentifierTGNs[fieldList1, localContext1]; fieldList3 _ DiscernSpecianatedTGNs[fieldList2, localContext1]; dependencyGraph _ BuildDependencyGraph[fieldList3, localContext1]; [fieldList4, localContext2] _ AnalyzeDependencies[dependencyGraph, fieldList3, localContext1, cs]; [localContext3, blockTGN] _ CreateBlockTGN[localContext2, FreezeFieldList[fieldList4]]; rib _ FreezeLocalContext[localContext3, blockTGN]; contextTree1 _ EmptyContextTree[rib]; [contextTree2, pf1, pg1] _ treeData.OptDecList.procs.Compile[treeData.OptDecList, contextTree1, pg, cs]; [contextTree3, pf2, pg2] _ treeData.StatementList.procs.Compile[treeData.StatementList, contextTree2, pg1, cs]; pf3 _ ConcatProgramFragments[pf1, pf2]; temp2 _ pg2; temp1 _ pf3; temp0 _ contextTree3; END; END END; DefBodyProdMakeContextTree: PUBLIC PROC[ref: REF ANY, contextRib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] = BEGIN tree: DefBodyNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: DefBodyProdData _ NARROW[tree.data]; BEGIN contextTree2: ContextTreeNode; pf1: ProgramFragmentNode; pg1: ProgramGraphNode; pg: ProgramGraphNode; contextTree1: ContextTreeNode; rib: ContextRibNode; localContext3: LocalContextNode; interfaceTGN: TypeGraphNodeNode; fieldList4: FieldListNode; localContext2: LocalContextNode; dependencyGraph: DependencyGraphNode; fieldList3: FieldListNode; fieldList2: FieldListNode; fieldList1: FieldListNode; localContext1: LocalContextNode; localContext: LocalContextNode; localContext _ CreateEmptyContext[contextRib, True[]]; [fieldList1, localContext1] _ treeData.DecList.procs.AddDeclarationsToFieldList[treeData.DecList, CreateEmptyFieldList[], localContext, cs]; fieldList2 _ LookupIdentifierTGNs[fieldList1, localContext1]; fieldList3 _ DiscernSpecianatedTGNs[fieldList2, localContext1]; dependencyGraph _ BuildDependencyGraph[fieldList3, localContext1]; [fieldList4, localContext2] _ AnalyzeDependencies[dependencyGraph, fieldList3, localContext1, cs]; [localContext3, interfaceTGN] _ CreateInterfaceContentsTGN[localContext2, FreezeFieldList[fieldList4]]; rib _ FreezeLocalContext[localContext3, interfaceTGN]; contextTree1 _ EmptyContextTree[rib]; pg _ CreateEmptyProgramGraph[]; [contextTree2, pf1, pg1] _ treeData.DecList.procs.Compile[treeData.DecList, contextTree1, pg, cs]; temp0 _ contextTree2; END; END END; END..