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..