DIRECTORY ThreeC4BaseDecl1Def, ThreeC4RecFcnImplAbGramDef, ThreeC4Support, ThreeC4BaseDecl2Def; ThreeC4RecFcnImplImpl3Impl: CEDAR PROGRAM IMPORTS ThreeC4RecFcnImplAbGramDef, ThreeC4Support EXPORTS ThreeC4RecFcnImplAbGramDef= BEGIN OPEN ThreeC4BaseDecl1Def, ThreeC4RecFcnImplAbGramDef, ThreeC4Support, ThreeC4BaseDecl2Def; RecExpressionwithWhereListProdFormFcnImplGraph: PUBLIC PROC[ref: REF ANY, lookup: LookupContextNode, graph: FcnImplGraphNode] RETURNS[temp0: FcnImplGraphNode, temp1: SlotListNode, temp2: CallGraphNodeNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionwithWhereListProdData _ NARROW[tree.data]; BEGIN newGraph: FcnImplGraphNode; graph4: FcnImplGraphNode; cgNode: CallGraphNodeNode; graph3: FcnImplGraphNode; slots: SlotListNode; expNode: CallGraphNodeNode; graph2: FcnImplGraphNode; whereNode: CallGraphNodeNode; graph1: FcnImplGraphNode; graph1 _ OpenWithWhereList[graph]; [graph2, whereNode] _ treeData.WhereExpSeq.procs.FormFcnImplWhereGraph[treeData.WhereExpSeq, lookup, graph1]; [graph3, slots, expNode] _ treeData.RecExpression.procs.FormFcnImplGraph[treeData.RecExpression, lookup, graph2]; [graph4, cgNode] _ RecordSequential[graph3, whereNode, expNode]; newGraph _ CloseWithWhereList[graph4]; temp2 _ cgNode; temp1 _ slots; temp0 _ newGraph; END; END END; RecExpressioncondProdFormFcnImplGraph: PUBLIC PROC[ref: REF ANY, lookup: LookupContextNode, graph: FcnImplGraphNode] RETURNS[temp0: FcnImplGraphNode, temp1: SlotListNode, temp2: CallGraphNodeNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressioncondProdData _ NARROW[tree.data]; BEGIN graph3: FcnImplGraphNode; slotsIf: SlotListNode; cgNodeIf: CallGraphNodeNode; graph2: FcnImplGraphNode; slotsThen: SlotListNode; cgNodeThen: CallGraphNodeNode; graph1: FcnImplGraphNode; slotsElse: SlotListNode; cgNodeElse: CallGraphNodeNode; [graph1, slotsElse, cgNodeElse] _ treeData.RecExpressionelseClause.procs.FormFcnImplGraph[treeData.RecExpressionelseClause, lookup, graph]; [graph2, slotsThen, cgNodeThen] _ treeData.RecExpressionthenClause.procs.FormFcnImplGraph[treeData.RecExpressionthenClause, lookup, graph1]; [graph3, slotsIf, cgNodeIf] _ treeData.RecExpressionifClause.procs.FormFcnImplGraph[treeData.RecExpressionifClause, lookup, graph2]; [temp0, temp1, temp2] _ RecordCondition[graph3, slotsIf, cgNodeIf, slotsThen, cgNodeThen, slotsElse, cgNodeElse]; END; END END; RecExpressioncallProdFormFcnImplGraph: PUBLIC PROC[ref: REF ANY, lookup: LookupContextNode, graph: FcnImplGraphNode] RETURNS[temp0: FcnImplGraphNode, temp1: SlotListNode, temp2: CallGraphNodeNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressioncallProdData _ NARROW[tree.data]; BEGIN graph1: FcnImplGraphNode; slots: SlotListNode; cgn: CallGraphNodeNode; [graph1, slots, cgn] _ treeData.RecExpSeq.procs.FormFcnImplGraph[treeData.RecExpSeq, lookup, graph]; [temp0, temp1, temp2] _ RecordCall[graph1, lookup, treeData.Identifier, slots, cgn]; END; END END; RecExpressionseqProdFormFcnImplGraph: PUBLIC PROC[ref: REF ANY, lookup: LookupContextNode, graph: FcnImplGraphNode] RETURNS[temp0: FcnImplGraphNode, temp1: SlotListNode, temp2: CallGraphNodeNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionseqProdData _ NARROW[tree.data]; [temp0, temp1, temp2] _ treeData.RecExpSeq.procs.FormFcnImplGraph[treeData.RecExpSeq, lookup, graph]; END END; RecExpressionidProdFormFcnImplGraph: PUBLIC PROC[ref: REF ANY, lookup: LookupContextNode, graph: FcnImplGraphNode] RETURNS[temp0: FcnImplGraphNode, temp1: SlotListNode, temp2: CallGraphNodeNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionidProdData _ NARROW[tree.data]; [temp0, temp1, temp2] _ RecordSimpleVarUse[graph, lookup, treeData.Identifier]; END END; RecExpressionmodIdProdFormFcnImplGraph: PUBLIC PROC[ref: REF ANY, lookup: LookupContextNode, graph: FcnImplGraphNode] RETURNS[temp0: FcnImplGraphNode, temp1: SlotListNode, temp2: CallGraphNodeNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionmodIdProdData _ NARROW[tree.data]; [temp0, temp1, temp2] _ RecordModIdUse[graph, lookup, treeData.Identifiera, treeData.Identifierb]; END END; RecExpressionropeProdFormFcnImplGraph: PUBLIC PROC[ref: REF ANY, lookup: LookupContextNode, graph: FcnImplGraphNode] RETURNS[temp0: FcnImplGraphNode, temp1: SlotListNode, temp2: CallGraphNodeNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionropeProdData _ NARROW[tree.data]; [temp0, temp1, temp2] _ RecordLiteralUse[graph, tree.position]; END END; RecExpressionnumbProdFormFcnImplGraph: PUBLIC PROC[ref: REF ANY, lookup: LookupContextNode, graph: FcnImplGraphNode] RETURNS[temp0: FcnImplGraphNode, temp1: SlotListNode, temp2: CallGraphNodeNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionnumbProdData _ NARROW[tree.data]; [temp0, temp1, temp2] _ RecordLiteralUse[graph, tree.position]; END END; RecExpressionsourcePositionProdFormFcnImplGraph: PUBLIC PROC[ref: REF ANY, lookup: LookupContextNode, graph: FcnImplGraphNode] RETURNS[temp0: FcnImplGraphNode, temp1: SlotListNode, temp2: CallGraphNodeNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionsourcePositionProdData _ NARROW[tree.data]; [temp0, temp1, temp2] _ RecordLiteralUse[graph, tree.position]; END END; RecExpressionsourceLengthProdFormFcnImplGraph: PUBLIC PROC[ref: REF ANY, lookup: LookupContextNode, graph: FcnImplGraphNode] RETURNS[temp0: FcnImplGraphNode, temp1: SlotListNode, temp2: CallGraphNodeNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionsourceLengthProdData _ NARROW[tree.data]; [temp0, temp1, temp2] _ RecordLiteralUse[graph, tree.position]; END END; RecExpSeqemptyProdFormFcnImplGraph: PUBLIC PROC[ref: REF ANY, lookup: LookupContextNode, graph: FcnImplGraphNode] RETURNS[temp0: FcnImplGraphNode, temp1: SlotListNode, temp2: CallGraphNodeNode] = BEGIN tree: RecExpSeqNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; temp2 _ BuildEmptyCallGraphNode[]; temp1 _ BuildEmptySlotList[]; temp0 _ FakeCopyFcnImplGraph[graph]; END END; RecExpSeqoneProdFormFcnImplGraph: PUBLIC PROC[ref: REF ANY, lookup: LookupContextNode, graph: FcnImplGraphNode] RETURNS[temp0: FcnImplGraphNode, temp1: SlotListNode, temp2: CallGraphNodeNode] = BEGIN tree: RecExpSeqNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpSeqoneProdData _ NARROW[tree.data]; [temp0, temp1, temp2] _ treeData.RecExpression.procs.FormFcnImplGraph[treeData.RecExpression, lookup, graph]; END END; RecExpSeqmanyProdFormFcnImplGraph: PUBLIC PROC[ref: REF ANY, lookup: LookupContextNode, graph: FcnImplGraphNode] RETURNS[temp0: FcnImplGraphNode, temp1: SlotListNode, temp2: CallGraphNodeNode] = BEGIN tree: RecExpSeqNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpSeqmanyProdData _ NARROW[tree.data]; BEGIN newGraph: FcnImplGraphNode; cgn: CallGraphNodeNode; slots: SlotListNode; graph2: FcnImplGraphNode; slotsb: SlotListNode; cgnb: CallGraphNodeNode; graph1: FcnImplGraphNode; slotsa: SlotListNode; cgna: CallGraphNodeNode; [graph1, slotsa, cgna] _ treeData.RecExpSeqa.procs.FormFcnImplGraph[treeData.RecExpSeqa, lookup, graph]; [graph2, slotsb, cgnb] _ treeData.RecExpSeqb.procs.FormFcnImplGraph[treeData.RecExpSeqb, lookup, graph1]; slots _ ConcatSlotList[slotsa, slotsb]; [newGraph, cgn] _ RecordParallel[graph2, cgna, cgnb]; temp2 _ cgn; temp1 _ slots; temp0 _ newGraph; END; END END; WhereExpSeqoneProdFormFcnImplWhereGraph: PUBLIC PROC[ref: REF ANY, lookup: LookupContextNode, graph: FcnImplGraphNode] RETURNS[temp0: FcnImplGraphNode, temp1: CallGraphNodeNode] = BEGIN tree: WhereExpSeqNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: WhereExpSeqoneProdData _ NARROW[tree.data]; BEGIN graph1: FcnImplGraphNode; slots: SlotListNode; cgn1: CallGraphNodeNode; [graph1, slots, cgn1] _ treeData.RecExpression.procs.FormFcnImplGraph[treeData.RecExpression, lookup, graph]; [temp0, temp1] _ RecordAssignment[graph1, treeData.IdList.procs.FormNameList[treeData.IdList], slots, cgn1]; END; END END; WhereExpSeqmanyProdFormFcnImplWhereGraph: PUBLIC PROC[ref: REF ANY, lookup: LookupContextNode, graph: FcnImplGraphNode] RETURNS[temp0: FcnImplGraphNode, temp1: CallGraphNodeNode] = BEGIN tree: WhereExpSeqNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: WhereExpSeqmanyProdData _ NARROW[tree.data]; BEGIN graph2: FcnImplGraphNode; cgna: CallGraphNodeNode; graph1: FcnImplGraphNode; cgnb: CallGraphNodeNode; [graph1, cgnb] _ treeData.WhereExpSeqb.procs.FormFcnImplWhereGraph[treeData.WhereExpSeqb, lookup, graph]; [graph2, cgna] _ treeData.WhereExpSeqa.procs.FormFcnImplWhereGraph[treeData.WhereExpSeqa, lookup, graph1]; [temp0, temp1] _ RecordSequential[graph2, cgnb, cgna]; END; END END; END..