DIRECTORY ThreeC4BaseDecl1Def, Rope, ThreeC4Support, ThreeC4RootAbGramDef, ThreeC4BasicAbTypesDef, ThreeC4BaseDecl2Def; ThreeC4RootImplImpl: CEDAR PROGRAM IMPORTS ThreeC4BaseDecl1Def, ThreeC4Support, ThreeC4RootAbGramDef, ThreeC4BaseDecl2Def EXPORTS ThreeC4RootAbGramDef= BEGIN OPEN ThreeC4BaseDecl1Def, Rope, ThreeC4Support, ThreeC4RootAbGramDef, ThreeC4BasicAbTypesDef, ThreeC4BaseDecl2Def; MainGoalProdFormFileSeq: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: FileSeqNode] = BEGIN tree: MainGoalNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: MainGoalProdData ← NARROW[tree.data]; temp0 ← BuildEmptyFileSeq[]; END END; WholeFileProdSyntaxFileCodes: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode] = BEGIN tree: WholeFileNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: WholeFileProdData ← NARROW[tree.data]; [temp0, temp1] ← treeData.ModuleList.procs.SyntaxFileCodes[treeData.ModuleList, context]; END END; WholeFileProdFormLinkCallCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: WholeFileNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: WholeFileProdData ← NARROW[tree.data]; [temp0, temp1] ← treeData.ModuleList.procs.FormLinkCallCode[treeData.ModuleList, context, usage]; END END; WholeFileProdCollectRightSideSymbols: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: WholeFileNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: WholeFileProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleList.procs.CollectRightSideSymbols[treeData.ModuleList, context]; END END; WholeFileProdCollectFunctionTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: WholeFileNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: WholeFileProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleList.procs.CollectFunctionTypes[treeData.ModuleList, context]; END END; WholeFileProdCollectValueTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: WholeFileNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: WholeFileProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleList.procs.CollectValueTypes[treeData.ModuleList, context]; END END; WholeFileProdFormFileSeq: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: FileSeqNode] = BEGIN tree: WholeFileNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: WholeFileProdData ← NARROW[tree.data]; BEGIN junk: BOOLEAN; files2: FileSeqNode; use: UsageNode; files1: FileSeqNode; check1: BOOLEAN; lookupContext: LookupContextNode; context7: ContextNode; context6: ContextNode; context5: ContextNode; context4: ContextNode; context3: ContextNode; context2: ContextNode; nProds: INT; context1: ContextNode; baseContext: ContextNode; baseContext ← RecordGlobalTreeType[context, BuildRopeName["Tree"], RopeCode["REF ANY"]]; [nProds, context1] ← treeData.ModuleList.procs.CollectProductions[treeData.ModuleList, 0, baseContext]; context2 ← treeData.IncludeClause.procs.CollectValueTypes[treeData.IncludeClause, context1]; context3 ← treeData.ModuleList.procs.CollectValueTypes[treeData.ModuleList, context2]; context4 ← treeData.IncludeClause.procs.CollectFunctionTypes[treeData.IncludeClause, context3]; context5 ← treeData.ModuleList.procs.CollectFunctionTypes[treeData.ModuleList, context4]; context6 ← treeData.IncludeClause.procs.CollectRightSideSymbols[treeData.IncludeClause, context5]; context7 ← treeData.ModuleList.procs.CollectRightSideSymbols[treeData.ModuleList, context6]; lookupContext ← BuildBasicLookupContext[context7]; check1 ← InspectContext[lookupContext]; files1 ← treeData.ModuleList.procs.MakeFileSeq[treeData.ModuleList, lookupContext]; IF treeData.ModuleList.procs.TestFormControlFile[treeData.ModuleList] THEN {BEGIN temp5: MesaCodeNode; temp6: MesaCodeNode; temp3: MesaCodeNode; temp4: MesaCodeNode; temp1: MesaCodeNode; temp2: MesaCodeNode; linkCallCode2: MesaCodeNode; linkUsage: UsageNode; linkCallCode1: MesaCodeNode; linkUsage1: UsageNode; [linkCallCode1, linkUsage1] ← treeData.ModuleList.procs.FormLinkCallCode[treeData.ModuleList, lookupContext, BuildEmptyUsage[]]; [linkCallCode2, linkUsage] ← treeData.IncludeClause.procs.FormLinkCallCode[treeData.IncludeClause, lookupContext, linkUsage1]; [temp3, temp4] ← treeData.IncludeClause.procs.SyntaxFileCodes[treeData.IncludeClause, lookupContext]; [temp1, temp2] ← treeData.ModuleList.procs.SyntaxFileCodes[treeData.ModuleList, lookupContext]; [temp5, temp6] ← ConcatCodePairs2[temp1, temp2, temp3, temp4]; [files2, use] ← treeData.ModuleList.procs.FormControlFileList[treeData.ModuleList, nProds, ConcatCode2[temp5, temp6], ConcatCode2[linkCallCode1, linkCallCode2], linkUsage]; END; } ELSE {use ← BuildEmptyUsage[]; files2 ← BuildEmptyFileSeq[]; }; junk ← TearDownGraphs[lookupContext]; temp0 ← ConcatFileSeq[files1, files2]; END; END END; IncludeClauseProdSyntaxFileCodes: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode] = BEGIN tree: IncludeClauseNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: IncludeClauseProdData ← NARROW[tree.data]; [temp0, temp1] ← treeData.IdList.procs.SyntaxFileCodes[treeData.IdList, context]; END END; IncludeClauseProdFormLinkCallCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: IncludeClauseNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: IncludeClauseProdData ← NARROW[tree.data]; [temp0, temp1] ← treeData.IdList.procs.FormLinkCallCode[treeData.IdList, context, usage]; END END; IncludeClauseProdCollectRightSideSymbols: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: IncludeClauseNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: IncludeClauseProdData ← NARROW[tree.data]; temp0 ← treeData.IdList.procs.CollectRightSideSymbols[treeData.IdList, context]; END END; IncludeClauseProdCollectFunctionTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: IncludeClauseNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: IncludeClauseProdData ← NARROW[tree.data]; temp0 ← treeData.IdList.procs.CollectFunctionTypes[treeData.IdList, context]; END END; IncludeClauseProdCollectValueTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: IncludeClauseNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: IncludeClauseProdData ← NARROW[tree.data]; temp0 ← treeData.IdList.procs.CollectValueTypes[treeData.IdList, context]; END END; ModuleListOneProdFormControlFileList: PUBLIC PROC[ref: REF ANY, nProds: INT, syntax: MesaCodeNode, linkCalls: MesaCodeNode, linkUsage: UsageNode] RETURNS[temp0: FileSeqNode, temp1: UsageNode] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListOneProdData ← NARROW[tree.data]; [temp0, temp1] ← treeData.ModuleBody.procs.FormControlFileList[treeData.ModuleBody, nProds, syntax, linkCalls, linkUsage]; END END; ModuleListOneProdFormLinkCallCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListOneProdData ← NARROW[tree.data]; [temp0, temp1] ← treeData.ModuleBody.procs.FormLinkCallCode[treeData.ModuleBody, context, usage]; END END; ModuleListOneProdTestFormControlFile: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: BOOLEAN] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListOneProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleBody.procs.TestFormControlFile[treeData.ModuleBody]; END END; ModuleListOneProdMakeFileSeq: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: FileSeqNode] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListOneProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleBody.procs.MakeFileSeq[treeData.ModuleBody, context]; END END; ModuleListOneProdSyntaxFileCodes: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListOneProdData ← NARROW[tree.data]; [temp0, temp1] ← treeData.ModuleBody.procs.SyntaxFileCodes[treeData.ModuleBody, context]; END END; ModuleListOneProdCollectRightSideSymbols: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListOneProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleBody.procs.CollectRightSideSymbols[treeData.ModuleBody, context]; END END; ModuleListOneProdCollectProductions: PUBLIC PROC[ref: REF ANY, first: INT, context: ContextNode] RETURNS[temp0: INT, temp1: ContextNode] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListOneProdData ← NARROW[tree.data]; [temp0, temp1] ← treeData.ModuleBody.procs.CollectProductions[treeData.ModuleBody, first, context]; END END; ModuleListOneProdCollectFunctionTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListOneProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleBody.procs.CollectFunctionTypes[treeData.ModuleBody, context]; END END; ModuleListOneProdCollectValueTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListOneProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleBody.procs.CollectValueTypes[treeData.ModuleBody, context]; END END; ModuleListManyProdFormControlFileList: PUBLIC PROC[ref: REF ANY, nProds: INT, syntax: MesaCodeNode, linkCalls: MesaCodeNode, linkUsage: UsageNode] RETURNS[temp0: FileSeqNode, temp1: UsageNode] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListManyProdData ← NARROW[tree.data]; BEGIN file1: FileSeqNode; use1: UsageNode; file2: FileSeqNode; use2: UsageNode; syntax1: MesaCodeNode; syntax2: MesaCodeNode; linkCalls1: MesaCodeNode; linkCalls2: MesaCodeNode; linkCalls2 ← RopeCode1["%g", CodeFill[linkCalls]]; linkCalls1 ← RopeCode1["%g", CodeFill[linkCalls2]]; syntax2 ← RopeCode1["%g", CodeFill[syntax]]; syntax1 ← RopeCode1["%g", CodeFill[syntax2]]; [file2, use2] ← treeData.ModuleBody.procs.FormControlFileList[treeData.ModuleBody, nProds, syntax2, linkCalls2, linkUsage]; [file1, use1] ← treeData.ModuleList.procs.FormControlFileList[treeData.ModuleList, nProds, syntax1, linkCalls1, use2]; temp1 ← use1; temp0 ← ConcatFileSeq[file1, file2]; END; END END; ModuleListManyProdFormLinkCallCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListManyProdData ← NARROW[tree.data]; BEGIN oneBodyCode: MesaCodeNode; use2: UsageNode; listCode: MesaCodeNode; use1: UsageNode; [listCode, use1] ← treeData.ModuleList.procs.FormLinkCallCode[treeData.ModuleList, context, usage]; [oneBodyCode, use2] ← treeData.ModuleBody.procs.FormLinkCallCode[treeData.ModuleBody, context, use1]; temp1 ← use2; temp0 ← ConcatCode2[listCode, oneBodyCode]; END; END END; ModuleListManyProdTestFormControlFile: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: BOOLEAN] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListManyProdData ← NARROW[tree.data]; temp0 ← Or[treeData.ModuleList.procs.TestFormControlFile[treeData.ModuleList], treeData.ModuleBody.procs.TestFormControlFile[treeData.ModuleBody]]; END END; ModuleListManyProdMakeFileSeq: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: FileSeqNode] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListManyProdData ← NARROW[tree.data]; temp0 ← ConcatFileSeq[treeData.ModuleList.procs.MakeFileSeq[treeData.ModuleList, context], treeData.ModuleBody.procs.MakeFileSeq[treeData.ModuleBody, context]]; END END; ModuleListManyProdSyntaxFileCodes: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListManyProdData ← NARROW[tree.data]; temp4: MesaCodeNode; temp5: MesaCodeNode; temp2: MesaCodeNode; temp3: MesaCodeNode; [temp4, temp5] ← treeData.ModuleBody.procs.SyntaxFileCodes[treeData.ModuleBody, context]; [temp2, temp3] ← treeData.ModuleList.procs.SyntaxFileCodes[treeData.ModuleList, context]; [temp0, temp1] ← ConcatCodePairs2[temp2, temp3, temp4, temp5]; END END; ModuleListManyProdCollectRightSideSymbols: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListManyProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleBody.procs.CollectRightSideSymbols[treeData.ModuleBody, treeData.ModuleList.procs.CollectRightSideSymbols[treeData.ModuleList, context]]; END END; ModuleListManyProdCollectProductions: PUBLIC PROC[ref: REF ANY, first: INT, context: ContextNode] RETURNS[temp0: INT, temp1: ContextNode] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListManyProdData ← NARROW[tree.data]; temp2: INT; temp3: ContextNode; [temp2, temp3] ← treeData.ModuleList.procs.CollectProductions[treeData.ModuleList, first, context]; [temp0, temp1] ← treeData.ModuleBody.procs.CollectProductions[treeData.ModuleBody, temp2, temp3]; END END; ModuleListManyProdCollectFunctionTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListManyProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleBody.procs.CollectFunctionTypes[treeData.ModuleBody, treeData.ModuleList.procs.CollectFunctionTypes[treeData.ModuleList, context]]; END END; ModuleListManyProdCollectValueTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleListManyProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleBody.procs.CollectValueTypes[treeData.ModuleBody, treeData.ModuleList.procs.CollectValueTypes[treeData.ModuleList, context]]; END END; ModuleBodycontrolProdFormControlFileList: PUBLIC PROC[ref: REF ANY, nProds: INT, syntax: MesaCodeNode, linkCalls: MesaCodeNode, linkUsage: UsageNode] RETURNS[temp0: FileSeqNode, temp1: UsageNode] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodycontrolProdData ← NARROW[tree.data]; BEGIN syntaxFiles: FileSeqNode; defFiles: FileSeqNode; defDirCode: MesaCodeNode; implFiles: FileSeqNode; implDirCode: MesaCodeNode; implImpCode: MesaCodeNode; implExpCode: MesaCodeNode; implOpenCode: MesaCodeNode; use5: UsageNode; use4: UsageNode; use3: UsageNode; use2: UsageNode; use1: UsageNode; table: MesaCodeNode; driverProced: MesaCodeNode; linkProced: MesaCodeNode; getTable: MesaCodeNode; getTable ← ConcatCode6[RopeCode["\N-- obtain parser table\N\N"], RopeCode["\TBEGIN\N"], RopeCode1["\TtableStream: IO.STREAM ← FS.StreamOpen[\"%g.kipperedParseTables\"];\N", IdFill[treeData.Identifier]], RopeCode["\TParseTable ← OneCasabaParser.BuildParserTableFromKipperedStream[tableStream];\N"], RopeCode["\TIO.Close[tableStream];\N"], RopeCode["\TEND;\N\N"]]; linkProced ← ConcatCode4[RopeCode["SetUpLinks: PROC[prodLinkArray: SeeProdLinkArray, tknLinkArray: TokenLinkArray] =\N"], RopeCode["BEGIN\N"], RopeCode1["%g", CodeFill[linkCalls]], RopeCode["END;\N\N"]]; driverProced ← ConcatCode4[RopeCode["ParseOneStream: PUBLIC PROC[from: IO.STREAM, debugFlags: CARDINAL, debuggingTextTo: IO.STREAM] RETURNS[REF ANY] =\N"], RopeCode["BEGIN\N"], RopeCode1["RETURN[ThreeC4Support.ParseOneStream[from, ParseTable, SetUpLinks, %g, debugFlags, debuggingTextTo]]\N", IntFill[nProds]], RopeCode["END;\N\N"]]; table ← RopeCode["ParseTable: OneCasabaParser.ParserTable ← NIL;\N\N"]; use1 ← RecordDefFileUse[linkUsage, "IO", Use.import]; use2 ← RecordDefFileUse[use1, "ThreeC4Support", Use.import]; use3 ← RecordDefFileUse[use2, ConcatRopes2[RopeFromIdentifierNode[treeData.Identifier], "Def"], Use.export]; use4 ← RecordDefFileUse[use3, "OneCasabaParser", Use.import]; use5 ← RecordDefFileUse[use4, "FS", Use.import]; [implDirCode, implImpCode, implExpCode, implOpenCode] ← BuildImplUseCode[use5]; implFiles ← BuildOneFileSeq[RopeCode1["%gImpl.mesa", IdFill[treeData.Identifier]], ConcatCode6[ConcatCode6[implDirCode, RopeCode1["%gImpl: CEDAR PROGRAM", IdFill[treeData.Identifier]], implImpCode, implExpCode, RopeCode["= \NBEGIN\N"], implOpenCode], table, driverProced, linkProced, getTable, RopeCode["END..\N"]]]; defDirCode ← ConcatCode2[RopeCode["DIRECTORY\N"], RopeCode["\TIO USING[STREAM];\N"]]; defFiles ← BuildOneFileSeq[RopeCode1["%gDef.mesa", IdFill[treeData.Identifier]], ConcatCode5[defDirCode, RopeCode1["%gDef: CEDAR DEFINITIONS =\N", IdFill[treeData.Identifier]], RopeCode["BEGIN\N\N"], RopeCode["ParseOneStream: PROC[from: IO.STREAM, debugFlags: CARDINAL, debuggingTextTo: IO.STREAM] RETURNS[REF ANY];\N\N"], RopeCode["END..\N"]]]; syntaxFiles ← BuildOneFileSeq[RopeCode1["%g.OneCasaba", IdFill[treeData.Identifier]], ConcatCode3[RopeCode["Begin\N"], RopeCode1["%g", CodeFill[syntax]], RopeCode["End."]]]; temp1 ← use5; temp0 ← ConcatFileSeq[syntaxFiles, ConcatFileSeq[defFiles, implFiles]]; END; END END; ModuleBodycontrolProdFormLinkCallCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodycontrolProdData ← NARROW[tree.data]; temp1 ← FakeUsageCopy[usage]; temp0 ← BuildEmptyCode[]; END END; ModuleBodycontrolProdTestFormControlFile: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: BOOLEAN] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodycontrolProdData ← NARROW[tree.data]; temp0 ← EqualRopes["True", "True"]; END END; ModuleBodycontrolProdMakeFileSeq: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: FileSeqNode] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodycontrolProdData ← NARROW[tree.data]; temp0 ← BuildEmptyFileSeq[]; END END; ModuleBodycontrolProdSyntaxFileCodes: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodycontrolProdData ← NARROW[tree.data]; temp1 ← BuildEmptyCode[]; temp0 ← BuildEmptyCode[]; END END; ModuleBodycontrolProdCollectRightSideSymbols: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodycontrolProdData ← NARROW[tree.data]; temp0 ← FakeCopyContextForConditional[context]; END END; ModuleBodycontrolProdCollectProductions: PUBLIC PROC[ref: REF ANY, first: INT, context: ContextNode] RETURNS[temp0: INT, temp1: ContextNode] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodycontrolProdData ← NARROW[tree.data]; temp1 ← FakeCopyContextForConditional[context]; temp0 ← FakeCopyInt[first]; END END; ModuleBodycontrolProdCollectFunctionTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodycontrolProdData ← NARROW[tree.data]; temp0 ← FakeCopyContextForConditional[context]; END END; ModuleBodycontrolProdCollectValueTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodycontrolProdData ← NARROW[tree.data]; temp0 ← RecordControlModule[context, ConcatRopes2[RopeFromIdentifierNode[treeData.Identifier], "Def"]]; END END; ModuleBodynormalProdFormControlFileList: PUBLIC PROC[ref: REF ANY, nProds: INT, syntax: MesaCodeNode, linkCalls: MesaCodeNode, linkUsage: UsageNode] RETURNS[temp0: FileSeqNode, temp1: UsageNode] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodynormalProdData ← NARROW[tree.data]; temp1 ← FakeUsageCopy[linkUsage]; temp0 ← BuildEmptyFileSeq[]; END END; ModuleBodynormalProdFormLinkCallCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodynormalProdData ← NARROW[tree.data]; IF treeData.ModuleItemList.procs.TestLinkPresent[treeData.ModuleItemList] THEN {BEGIN defFileName: ROPE; defFileName ← ConcatRopes2[RopeFromIdentifierNode[treeData.Identifier], "Def"]; temp1 ← RecordDefFileUse[usage, defFileName, Use.import]; temp0 ← RopeCode1["%gLinkProc[prodLinkArray, tknLinkArray];\N", IdFill[treeData.Identifier]]; END; } ELSE {temp1 ← FakeUsageCopy[usage]; temp0 ← BuildEmptyCode[]; }; END END; ModuleBodynormalProdTestFormControlFile: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: BOOLEAN] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodynormalProdData ← NARROW[tree.data]; temp0 ← EqualRopes["True", "False"]; END END; ModuleBodynormalProdMakeFileSeq: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: FileSeqNode] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodynormalProdData ← NARROW[tree.data]; BEGIN seq2: FileSeqNode; seq1: FileSeqNode; defDirCode: MesaCodeNode; defOpenCode: MesaCodeNode; dUse: UsageNode; defCode: MesaCodeNode; defCode1: MesaCodeNode; dUse1: UsageNode; implDirCode: MesaCodeNode; implImpCode: MesaCodeNode; implExpCode: MesaCodeNode; implOpenCode: MesaCodeNode; linkProcedCode: MesaCodeNode; linkDefCode: MesaCodeNode; iUse: UsageNode; defFileName: ROPE; noLinks: BOOLEAN; linkCode: MesaCodeNode; iUse2: UsageNode; implCode: MesaCodeNode; iUse1: UsageNode; iUse0: UsageNode; iUse0 ← BuildEmptyUsage[]; [implCode, iUse1] ← treeData.ModuleItemList.procs.ImplFileCode[treeData.ModuleItemList, context, iUse0]; [linkCode, iUse2] ← treeData.ModuleItemList.procs.LinkFileCode[treeData.ModuleItemList, context, iUse1]; noLinks ← TestEmptyCode[linkCode]; defFileName ← ConcatRopes2[RopeFromIdentifierNode[treeData.Identifier], "Def"]; IF noLinks THEN {iUse ← FakeUsageCopy[iUse2]; } ELSE {BEGIN iUse3: UsageNode; iUse3 ← RecordDefFileUse[iUse2, "ThreeC4Support", Use.ref]; iUse ← RecordDefFileUse[iUse3, defFileName, Use.export]; END; }; IF noLinks THEN {linkDefCode ← BuildEmptyCode[]; } ELSE {linkDefCode ← RopeCode1["%gLinkProc: PROC[SeeProdLinkArray, TokenLinkArray];\N", IdFill[treeData.Identifier]]; }; IF noLinks THEN {linkProcedCode ← BuildEmptyCode[]; } ELSE {linkProcedCode ← ConcatCode4[RopeCode1["%gLinkProc: PUBLIC PROC[prodLinkArray: SeeProdLinkArray, tknLinkArray: TokenLinkArray] =\N", IdFill[treeData.Identifier]], RopeCode["BEGIN\N"], linkCode, RopeCode["END;\N\N"]]; }; [implDirCode, implImpCode, implExpCode, implOpenCode] ← BuildImplUseCode[iUse]; [defCode1, dUse1] ← treeData.ModuleItemList.procs.DefFileCode[treeData.ModuleItemList, context, BuildEmptyUsage[]]; defCode ← ConcatCode2[linkDefCode, defCode1]; IF noLinks THEN {dUse ← FakeUsageCopy[dUse1]; } ELSE {dUse ← RecordDefFileUse[dUse1, "ThreeC4Support", Use.ref]; }; [defDirCode, defOpenCode] ← BuildDefUseCode[dUse, defFileName]; IF TestEmptyCode[implCode] THEN {seq1 ← BuildEmptyFileSeq[]; } ELSE {seq1 ← BuildOneFileSeq[RopeCode1["%gImpl.mesa", IdFill[treeData.Identifier]], ConcatCode9[implDirCode, RopeCode1["%gImpl: CEDAR PROGRAM", IdFill[treeData.Identifier]], implImpCode, implExpCode, RopeCode["= \NBEGIN\N"], implOpenCode, linkProcedCode, implCode, RopeCode["END..\N"]]]; }; IF TestEmptyCode[defCode] THEN {seq2 ← FakeCopyFileSeqForConditional[seq1]; } ELSE {seq2 ← AppendToFileSeq[seq1, RopeCode1["%gDef.mesa", IdFill[treeData.Identifier]], ConcatCode6[defDirCode, RopeCode1["%gDef: CEDAR DEFINITIONS = \N", IdFill[treeData.Identifier]], RopeCode["BEGIN\N"], defOpenCode, RopeCode1["%g", CodeFill[defCode]], RopeCode["END..\N"]]]; }; temp0 ← seq2; END; END END; ModuleBodynormalProdSyntaxFileCodes: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodynormalProdData ← NARROW[tree.data]; [temp0, temp1] ← treeData.ModuleItemList.procs.SyntaxFileCodes[treeData.ModuleItemList, context]; END END; ModuleBodynormalProdCollectRightSideSymbols: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodynormalProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleItemList.procs.CollectRightSideSymbols[treeData.ModuleItemList, context]; END END; ModuleBodynormalProdCollectProductions: PUBLIC PROC[ref: REF ANY, first: INT, context: ContextNode] RETURNS[temp0: INT, temp1: ContextNode] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodynormalProdData ← NARROW[tree.data]; [temp0, temp1] ← treeData.ModuleItemList.procs.CollectProductions[treeData.ModuleItemList, first, context]; END END; ModuleBodynormalProdCollectFunctionTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodynormalProdData ← NARROW[tree.data]; BEGIN defFileName: ROPE; defFileName ← ConcatRopes2[RopeFromIdentifierNode[treeData.Identifier], "Def"]; temp0 ← treeData.ModuleItemList.procs.CollectModuleFunctionTypes[treeData.ModuleItemList, defFileName, context]; END; END END; ModuleBodynormalProdCollectValueTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleBodyNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleBodynormalProdData ← NARROW[tree.data]; BEGIN defFileName: ROPE; defFileName ← ConcatRopes2[RopeFromIdentifierNode[treeData.Identifier], "Def"]; temp0 ← treeData.ModuleItemList.procs.CollectModuleValueTypes[treeData.ModuleItemList, defFileName, context]; END; END END; ModuleItemListOneProdTestLinkPresent: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: BOOLEAN] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListOneProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleItem.procs.TestLinkPresent[treeData.ModuleItem]; END END; ModuleItemListOneProdSyntaxFileCodes: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListOneProdData ← NARROW[tree.data]; [temp0, temp1] ← treeData.ModuleItem.procs.SyntaxFileCodes[treeData.ModuleItem, context]; END END; ModuleItemListOneProdLinkFileCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListOneProdData ← NARROW[tree.data]; [temp0, temp1] ← treeData.ModuleItem.procs.LinkFileCode[treeData.ModuleItem, context, usage]; END END; ModuleItemListOneProdImplFileCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListOneProdData ← NARROW[tree.data]; [temp0, temp1] ← treeData.ModuleItem.procs.ImplFileCode[treeData.ModuleItem, context, usage]; END END; ModuleItemListOneProdDefFileCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListOneProdData ← NARROW[tree.data]; [temp0, temp1] ← treeData.ModuleItem.procs.DefFileCode[treeData.ModuleItem, context, usage]; END END; ModuleItemListOneProdCollectRightSideSymbols: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListOneProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleItem.procs.CollectRightSideSymbols[treeData.ModuleItem, context]; END END; ModuleItemListOneProdCollectProductions: PUBLIC PROC[ref: REF ANY, first: INT, context: ContextNode] RETURNS[temp0: INT, temp1: ContextNode] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListOneProdData ← NARROW[tree.data]; [temp0, temp1] ← treeData.ModuleItem.procs.CollectProductions[treeData.ModuleItem, first, context]; END END; ModuleItemListOneProdCollectModuleFunctionTypes: PUBLIC PROC[ref: REF ANY, defFileName: ROPE, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListOneProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleItem.procs.CollectModuleFunctionTypes[treeData.ModuleItem, defFileName, context]; END END; ModuleItemListOneProdCollectModuleValueTypes: PUBLIC PROC[ref: REF ANY, defFileName: ROPE, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListOneProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleItem.procs.CollectModuleValueTypes[treeData.ModuleItem, defFileName, context]; END END; ModuleItemListManyProdTestLinkPresent: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: BOOLEAN] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListManyProdData ← NARROW[tree.data]; temp0 ← Or[treeData.ModuleItemList.procs.TestLinkPresent[treeData.ModuleItemList], treeData.ModuleItem.procs.TestLinkPresent[treeData.ModuleItem]]; END END; ModuleItemListManyProdSyntaxFileCodes: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListManyProdData ← NARROW[tree.data]; temp4: MesaCodeNode; temp5: MesaCodeNode; temp2: MesaCodeNode; temp3: MesaCodeNode; [temp4, temp5] ← treeData.ModuleItem.procs.SyntaxFileCodes[treeData.ModuleItem, context]; [temp2, temp3] ← treeData.ModuleItemList.procs.SyntaxFileCodes[treeData.ModuleItemList, context]; [temp0, temp1] ← ConcatCodePairs2[temp2, temp3, temp4, temp5]; END END; ModuleItemListManyProdLinkFileCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListManyProdData ← NARROW[tree.data]; BEGIN code: MesaCodeNode; code2: MesaCodeNode; use2: UsageNode; code1: MesaCodeNode; use1: UsageNode; [code1, use1] ← treeData.ModuleItemList.procs.LinkFileCode[treeData.ModuleItemList, context, usage]; [code2, use2] ← treeData.ModuleItem.procs.LinkFileCode[treeData.ModuleItem, context, use1]; code ← ConcatCode2[code1, code2]; temp1 ← use2; temp0 ← code; END; END END; ModuleItemListManyProdImplFileCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListManyProdData ← NARROW[tree.data]; BEGIN code: MesaCodeNode; code2: MesaCodeNode; use2: UsageNode; code1: MesaCodeNode; use1: UsageNode; [code1, use1] ← treeData.ModuleItemList.procs.ImplFileCode[treeData.ModuleItemList, context, usage]; [code2, use2] ← treeData.ModuleItem.procs.ImplFileCode[treeData.ModuleItem, context, use1]; code ← ConcatCode2[code1, code2]; temp1 ← use2; temp0 ← code; END; END END; ModuleItemListManyProdDefFileCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListManyProdData ← NARROW[tree.data]; BEGIN code: MesaCodeNode; code2: MesaCodeNode; use2: UsageNode; code1: MesaCodeNode; use1: UsageNode; [code1, use1] ← treeData.ModuleItemList.procs.DefFileCode[treeData.ModuleItemList, context, usage]; [code2, use2] ← treeData.ModuleItem.procs.DefFileCode[treeData.ModuleItem, context, use1]; code ← ConcatCode2[code1, code2]; temp1 ← use2; temp0 ← code; END; END END; ModuleItemListManyProdCollectRightSideSymbols: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListManyProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleItem.procs.CollectRightSideSymbols[treeData.ModuleItem, treeData.ModuleItemList.procs.CollectRightSideSymbols[treeData.ModuleItemList, context]]; END END; ModuleItemListManyProdCollectProductions: PUBLIC PROC[ref: REF ANY, first: INT, context: ContextNode] RETURNS[temp0: INT, temp1: ContextNode] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListManyProdData ← NARROW[tree.data]; temp2: INT; temp3: ContextNode; [temp2, temp3] ← treeData.ModuleItemList.procs.CollectProductions[treeData.ModuleItemList, first, context]; [temp0, temp1] ← treeData.ModuleItem.procs.CollectProductions[treeData.ModuleItem, temp2, temp3]; END END; ModuleItemListManyProdCollectModuleFunctionTypes: PUBLIC PROC[ref: REF ANY, defFileName: ROPE, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListManyProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleItem.procs.CollectModuleFunctionTypes[treeData.ModuleItem, defFileName, treeData.ModuleItemList.procs.CollectModuleFunctionTypes[treeData.ModuleItemList, defFileName, context]]; END END; ModuleItemListManyProdCollectModuleValueTypes: PUBLIC PROC[ref: REF ANY, defFileName: ROPE, context: ContextNode] RETURNS[temp0: ContextNode] = BEGIN tree: ModuleItemListNode← NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ModuleItemListManyProdData ← NARROW[tree.data]; temp0 ← treeData.ModuleItem.procs.CollectModuleValueTypes[treeData.ModuleItem, defFileName, treeData.ModuleItemList.procs.CollectModuleValueTypes[treeData.ModuleItemList, defFileName, context]]; END END; END..