DIRECTORY ThreeC4BaseDecl1Def, ThreeC4RecFcnImplAbGramDef, ThreeC4Support, ThreeC4BaseDecl2Def; ThreeC4RecFcnImplImpl2Impl: CEDAR PROGRAM IMPORTS ThreeC4BaseDecl1Def, ThreeC4Support, ThreeC4BaseDecl2Def EXPORTS ThreeC4RecFcnImplAbGramDef= BEGIN OPEN ThreeC4BaseDecl1Def, ThreeC4RecFcnImplAbGramDef, ThreeC4Support, ThreeC4BaseDecl2Def; RecExpressionropeProdCountVals: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: IntegerNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionropeProdData _ NARROW[tree.data]; temp0 _ IntegerFromRope["1"]; END END; RecExpressionropeProdCompForVars: PUBLIC PROC[ref: REF ANY, varNames: NameListNode, firstTempX: IntegerNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode, temp2: TypeListNode, temp3: NameListNode, temp4: IntegerNode, temp5: UsageNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionropeProdData _ NARROW[tree.data]; BEGIN statementCode: MesaCodeNode; firstName: NameNode; restNames: NameListNode; varDeclCode: MesaCodeNode; valStatementCode: MesaCodeNode; valCode: MesaCodeNode; junk: MesaCodeNode; valTypes: TypeListNode; nextTempX: IntegerNode; use: UsageNode; [varDeclCode, valStatementCode, valCode, junk, valTypes, nextTempX, use] _ tree.procs.CompForArgs[tree, TreeCallFlag.no, firstTempX, context, usage]; [firstName, restNames] _ PartitionFirstName[varNames]; statementCode _ ConcatCode4[RopeCode1["%g _ ", NameFill[firstName]], valCode, RopeCode[";\N"], valStatementCode]; temp5 _ use; temp4 _ nextTempX; temp3 _ restNames; temp2 _ valTypes; temp1 _ statementCode; temp0 _ varDeclCode; END; END END; RecExpressionropeProdCompForArgs: PUBLIC PROC[ref: REF ANY, treeCallFlag: TreeCallFlag, firstTempX: IntegerNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode, temp2: MesaCodeNode, temp3: MesaCodeNode, temp4: TypeListNode, temp5: IntegerNode, temp6: UsageNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionropeProdData _ NARROW[tree.data]; BEGIN argCode: MesaCodeNode; firstArgCode: MesaCodeNode; types: TypeListNode; types _ BuildOneTypeList[LookUpType[context, BuildRopeName["ROPE"]]]; IF EqualTreeCallFlags[treeCallFlag, TreeCallFlag.yes] THEN {firstArgCode _ BuildErrorCode["rope is not a tree"]; } ELSE {firstArgCode _ BuildEmptyCode[]; }; argCode _ RopeCode1["\"%g\"", CodeFill[RopeCode[RopeFromRopeNode[treeData.Rope]]]]; temp6 _ FakeUsageCopy[usage]; temp5 _ FakeCopyInteger[firstTempX]; temp4 _ types; temp3 _ firstArgCode; temp2 _ argCode; temp1 _ BuildEmptyCode[]; temp0 _ BuildEmptyCode[]; END; END END; RecExpressionnumbProdCountVals: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: IntegerNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionnumbProdData _ NARROW[tree.data]; temp0 _ IntegerFromRope["1"]; END END; RecExpressionnumbProdCompForVars: PUBLIC PROC[ref: REF ANY, varNames: NameListNode, firstTempX: IntegerNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode, temp2: TypeListNode, temp3: NameListNode, temp4: IntegerNode, temp5: UsageNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionnumbProdData _ NARROW[tree.data]; BEGIN statementCode: MesaCodeNode; firstName: NameNode; restNames: NameListNode; varDeclCode: MesaCodeNode; valStatementCode: MesaCodeNode; valCode: MesaCodeNode; junk: MesaCodeNode; valTypes: TypeListNode; nextTempX: IntegerNode; use: UsageNode; [varDeclCode, valStatementCode, valCode, junk, valTypes, nextTempX, use] _ tree.procs.CompForArgs[tree, TreeCallFlag.no, firstTempX, context, usage]; [firstName, restNames] _ PartitionFirstName[varNames]; statementCode _ ConcatCode4[RopeCode1["%g _ ", NameFill[firstName]], valCode, RopeCode[";\N"], valStatementCode]; temp5 _ use; temp4 _ nextTempX; temp3 _ restNames; temp2 _ valTypes; temp1 _ statementCode; temp0 _ varDeclCode; END; END END; RecExpressionnumbProdCompForArgs: PUBLIC PROC[ref: REF ANY, treeCallFlag: TreeCallFlag, firstTempX: IntegerNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode, temp2: MesaCodeNode, temp3: MesaCodeNode, temp4: TypeListNode, temp5: IntegerNode, temp6: UsageNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionnumbProdData _ NARROW[tree.data]; BEGIN argCode: MesaCodeNode; firstArgCode: MesaCodeNode; types: TypeListNode; types _ BuildOneTypeList[LookUpType[context, BuildRopeName["INT"]]]; IF EqualTreeCallFlags[treeCallFlag, TreeCallFlag.yes] THEN {firstArgCode _ BuildErrorCode["number is not a tree"]; } ELSE {firstArgCode _ BuildEmptyCode[]; }; argCode _ RopeCode[RopeFromNonNegIntegerNode[treeData.NonNegInteger]]; temp6 _ FakeUsageCopy[usage]; temp5 _ FakeCopyInteger[firstTempX]; temp4 _ types; temp3 _ firstArgCode; temp2 _ argCode; temp1 _ BuildEmptyCode[]; temp0 _ BuildEmptyCode[]; END; END END; RecExpressionsourcePositionProdCountVals: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: IntegerNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionsourcePositionProdData _ NARROW[tree.data]; temp0 _ IntegerFromRope["1"]; END END; RecExpressionsourcePositionProdCompForVars: PUBLIC PROC[ref: REF ANY, varNames: NameListNode, firstTempX: IntegerNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode, temp2: TypeListNode, temp3: NameListNode, temp4: IntegerNode, temp5: UsageNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionsourcePositionProdData _ NARROW[tree.data]; BEGIN statementCode: MesaCodeNode; firstName: NameNode; restNames: NameListNode; varDeclCode: MesaCodeNode; valStatementCode: MesaCodeNode; valCode: MesaCodeNode; junk: MesaCodeNode; valTypes: TypeListNode; nextTempX: IntegerNode; use: UsageNode; [varDeclCode, valStatementCode, valCode, junk, valTypes, nextTempX, use] _ tree.procs.CompForArgs[tree, TreeCallFlag.no, firstTempX, context, usage]; [firstName, restNames] _ PartitionFirstName[varNames]; statementCode _ ConcatCode4[RopeCode1["%g _ ", NameFill[firstName]], valCode, RopeCode[";\N"], valStatementCode]; temp5 _ use; temp4 _ nextTempX; temp3 _ restNames; temp2 _ valTypes; temp1 _ statementCode; temp0 _ varDeclCode; END; END END; RecExpressionsourcePositionProdCompForArgs: PUBLIC PROC[ref: REF ANY, treeCallFlag: TreeCallFlag, firstTempX: IntegerNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode, temp2: MesaCodeNode, temp3: MesaCodeNode, temp4: TypeListNode, temp5: IntegerNode, temp6: UsageNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionsourcePositionProdData _ NARROW[tree.data]; BEGIN argCode: MesaCodeNode; firstArgCode: MesaCodeNode; types: TypeListNode; check: BOOLEAN; vType: TypeNode; unused: MesaCodeNode; [vType, unused] _ treeData.ModId.procs.FormValueInfo[treeData.ModId, context]; check _ CompareValTypeWithVarType[vType, LookUpType[context, BuildRopeName["Tree"]]]; types _ BuildOneTypeList[LookUpType[context, BuildRopeName["INT"]]]; IF EqualTreeCallFlags[treeCallFlag, TreeCallFlag.yes] THEN {firstArgCode _ BuildErrorCode["sourcePosition is not a tree"]; } ELSE {firstArgCode _ BuildEmptyCode[]; }; argCode _ RopeCode1["%g.position", NameFill[treeData.ModId.procs.FormName[treeData.ModId]]]; temp6 _ FakeUsageCopy[usage]; temp5 _ FakeCopyInteger[firstTempX]; temp4 _ types; temp3 _ firstArgCode; temp2 _ argCode; temp1 _ BuildEmptyCode[]; temp0 _ BuildEmptyCode[]; END; END END; RecExpressionsourceLengthProdCountVals: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: IntegerNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionsourceLengthProdData _ NARROW[tree.data]; temp0 _ IntegerFromRope["1"]; END END; RecExpressionsourceLengthProdCompForVars: PUBLIC PROC[ref: REF ANY, varNames: NameListNode, firstTempX: IntegerNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode, temp2: TypeListNode, temp3: NameListNode, temp4: IntegerNode, temp5: UsageNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionsourceLengthProdData _ NARROW[tree.data]; BEGIN statementCode: MesaCodeNode; firstName: NameNode; restNames: NameListNode; varDeclCode: MesaCodeNode; valStatementCode: MesaCodeNode; valCode: MesaCodeNode; junk: MesaCodeNode; valTypes: TypeListNode; nextTempX: IntegerNode; use: UsageNode; [varDeclCode, valStatementCode, valCode, junk, valTypes, nextTempX, use] _ tree.procs.CompForArgs[tree, TreeCallFlag.no, firstTempX, context, usage]; [firstName, restNames] _ PartitionFirstName[varNames]; statementCode _ ConcatCode4[RopeCode1["%g _ ", NameFill[firstName]], valCode, RopeCode[";\N"], valStatementCode]; temp5 _ use; temp4 _ nextTempX; temp3 _ restNames; temp2 _ valTypes; temp1 _ statementCode; temp0 _ varDeclCode; END; END END; RecExpressionsourceLengthProdCompForArgs: PUBLIC PROC[ref: REF ANY, treeCallFlag: TreeCallFlag, firstTempX: IntegerNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode, temp2: MesaCodeNode, temp3: MesaCodeNode, temp4: TypeListNode, temp5: IntegerNode, temp6: UsageNode] = BEGIN tree: RecExpressionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpressionsourceLengthProdData _ NARROW[tree.data]; BEGIN argCode: MesaCodeNode; firstArgCode: MesaCodeNode; types: TypeListNode; check: BOOLEAN; vType: TypeNode; unused: MesaCodeNode; [vType, unused] _ treeData.ModId.procs.FormValueInfo[treeData.ModId, context]; check _ CompareValTypeWithVarType[vType, LookUpType[context, BuildRopeName["Tree"]]]; types _ BuildOneTypeList[LookUpType[context, BuildRopeName["INT"]]]; IF EqualTreeCallFlags[treeCallFlag, TreeCallFlag.yes] THEN {firstArgCode _ BuildErrorCode["sourceLength is not a tree"]; } ELSE {firstArgCode _ BuildEmptyCode[]; }; argCode _ RopeCode1["%g.length", NameFill[treeData.ModId.procs.FormName[treeData.ModId]]]; temp6 _ FakeUsageCopy[usage]; temp5 _ FakeCopyInteger[firstTempX]; temp4 _ types; temp3 _ firstArgCode; temp2 _ argCode; temp1 _ BuildEmptyCode[]; temp0 _ BuildEmptyCode[]; END; END END; RecExpSeqemptyProdCountVals: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: IntegerNode] = BEGIN tree: RecExpSeqNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; temp0 _ IntegerFromRope["0"]; END END; RecExpSeqemptyProdCompForVars: PUBLIC PROC[ref: REF ANY, varNames: NameListNode, firstTempX: IntegerNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode, temp2: TypeListNode, temp3: NameListNode, temp4: IntegerNode, temp5: UsageNode] = BEGIN tree: RecExpSeqNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; temp5 _ FakeUsageCopy[usage]; temp4 _ FakeCopyInteger[firstTempX]; temp3 _ varNames; temp2 _ BuildEmptyTypeList[]; temp1 _ BuildEmptyCode[]; temp0 _ BuildEmptyCode[]; END END; RecExpSeqemptyProdCompForArgs: PUBLIC PROC[ref: REF ANY, treeCallFlag: TreeCallFlag, firstTempX: IntegerNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode, temp2: MesaCodeNode, temp3: MesaCodeNode, temp4: TypeListNode, temp5: IntegerNode, temp6: UsageNode] = BEGIN tree: RecExpSeqNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; temp6 _ FakeUsageCopy[usage]; temp5 _ FakeCopyInteger[firstTempX]; temp4 _ BuildEmptyTypeList[]; IF EqualTreeCallFlags[treeCallFlag, TreeCallFlag.yes] THEN {temp3 _ BuildErrorCode["expecting at least a tree argument"]; } ELSE {temp3 _ BuildEmptyCode[]; }; temp2 _ BuildEmptyCode[]; temp1 _ BuildEmptyCode[]; temp0 _ BuildEmptyCode[]; END END; RecExpSeqoneProdCountVals: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: IntegerNode] = BEGIN tree: RecExpSeqNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpSeqoneProdData _ NARROW[tree.data]; temp0 _ treeData.RecExpression.procs.CountVals[treeData.RecExpression, context]; END END; RecExpSeqoneProdCompForVars: PUBLIC PROC[ref: REF ANY, varNames: NameListNode, firstTempX: IntegerNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode, temp2: TypeListNode, temp3: NameListNode, temp4: IntegerNode, temp5: UsageNode] = BEGIN tree: RecExpSeqNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpSeqoneProdData _ NARROW[tree.data]; [temp0, temp1, temp2, temp3, temp4, temp5] _ treeData.RecExpression.procs.CompForVars[treeData.RecExpression, varNames, firstTempX, context, usage]; END END; RecExpSeqoneProdCompForArgs: PUBLIC PROC[ref: REF ANY, treeCallFlag: TreeCallFlag, firstTempX: IntegerNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode, temp2: MesaCodeNode, temp3: MesaCodeNode, temp4: TypeListNode, temp5: IntegerNode, temp6: UsageNode] = BEGIN tree: RecExpSeqNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpSeqoneProdData _ NARROW[tree.data]; [temp0, temp1, temp2, temp3, temp4, temp5, temp6] _ treeData.RecExpression.procs.CompForArgs[treeData.RecExpression, treeCallFlag, firstTempX, context, usage]; END END; RecExpSeqmanyProdCountVals: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: IntegerNode] = BEGIN tree: RecExpSeqNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpSeqmanyProdData _ NARROW[tree.data]; temp0 _ Add[treeData.RecExpSeqb.procs.CountVals[treeData.RecExpSeqb, context], treeData.RecExpSeqa.procs.CountVals[treeData.RecExpSeqa, context]]; END END; RecExpSeqmanyProdCompForVars: PUBLIC PROC[ref: REF ANY, varNames: NameListNode, firstTempX: IntegerNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode, temp2: TypeListNode, temp3: NameListNode, temp4: IntegerNode, temp5: UsageNode] = BEGIN tree: RecExpSeqNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpSeqmanyProdData _ NARROW[tree.data]; BEGIN varDeclCode: MesaCodeNode; statementCode: MesaCodeNode; varTypes: TypeListNode; bDeclCode: MesaCodeNode; bStatementCode: MesaCodeNode; bVarTypes: TypeListNode; bRestNames: NameListNode; bNextTempX: IntegerNode; use2: UsageNode; aDeclCode: MesaCodeNode; aStatementCode: MesaCodeNode; aVarTypes: TypeListNode; aRestNames: NameListNode; aNextTempX: IntegerNode; use1: UsageNode; [aDeclCode, aStatementCode, aVarTypes, aRestNames, aNextTempX, use1] _ treeData.RecExpSeqa.procs.CompForVars[treeData.RecExpSeqa, varNames, firstTempX, context, usage]; [bDeclCode, bStatementCode, bVarTypes, bRestNames, bNextTempX, use2] _ treeData.RecExpSeqb.procs.CompForVars[treeData.RecExpSeqb, aRestNames, aNextTempX, context, use1]; varTypes _ ConcatTypeLists[aVarTypes, bVarTypes]; statementCode _ ConcatCode2[bStatementCode, aStatementCode]; varDeclCode _ ConcatCode2[bDeclCode, aDeclCode]; temp5 _ use2; temp4 _ bNextTempX; temp3 _ bRestNames; temp2 _ varTypes; temp1 _ statementCode; temp0 _ varDeclCode; END; END END; RecExpSeqmanyProdCompForArgs: PUBLIC PROC[ref: REF ANY, treeCallFlag: TreeCallFlag, firstTempX: IntegerNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode, temp2: MesaCodeNode, temp3: MesaCodeNode, temp4: TypeListNode, temp5: IntegerNode, temp6: UsageNode] = BEGIN tree: RecExpSeqNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: RecExpSeqmanyProdData _ NARROW[tree.data]; BEGIN varDeclCode: MesaCodeNode; statementCode: MesaCodeNode; argCode: MesaCodeNode; argTypes: TypeListNode; bDeclCode: MesaCodeNode; bStatementCode: MesaCodeNode; bArgCode: MesaCodeNode; unused: MesaCodeNode; bVarTypes: TypeListNode; bNextTempX: IntegerNode; use2: UsageNode; aDeclCode: MesaCodeNode; aStatementCode: MesaCodeNode; aArgCode: MesaCodeNode; firstArgCode: MesaCodeNode; aVarTypes: TypeListNode; aNextTempX: IntegerNode; use1: UsageNode; [aDeclCode, aStatementCode, aArgCode, firstArgCode, aVarTypes, aNextTempX, use1] _ treeData.RecExpSeqa.procs.CompForArgs[treeData.RecExpSeqa, treeCallFlag, firstTempX, context, usage]; [bDeclCode, bStatementCode, bArgCode, unused, bVarTypes, bNextTempX, use2] _ treeData.RecExpSeqb.procs.CompForArgs[treeData.RecExpSeqb, TreeCallFlag.no, aNextTempX, context, use1]; argTypes _ ConcatTypeLists[aVarTypes, bVarTypes]; argCode _ ConcatCode3[aArgCode, RopeCode[", "], bArgCode]; statementCode _ ConcatCode2[bStatementCode, aStatementCode]; varDeclCode _ ConcatCode2[bDeclCode, aDeclCode]; temp6 _ use2; temp5 _ bNextTempX; temp4 _ argTypes; temp3 _ firstArgCode; temp2 _ argCode; temp1 _ statementCode; temp0 _ varDeclCode; END; END END; WhereExpSeqoneProdCompWhere: PUBLIC PROC[ref: REF ANY, firstTempX: IntegerNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode, temp2: IntegerNode, temp3: LookupContextNode, temp4: UsageNode] = BEGIN tree: WhereExpSeqNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: WhereExpSeqoneProdData _ NARROW[tree.data]; BEGIN nestedContext: LookupContextNode; varDeclCode: MesaCodeNode; use: UsageNode; expVarDeclCode: MesaCodeNode; statementCode: MesaCodeNode; expTypes: TypeListNode; expRestNames: NameListNode; nextTempX: IntegerNode; use1: UsageNode; [expVarDeclCode, statementCode, expTypes, expRestNames, nextTempX, use1] _ treeData.RecExpression.procs.CompForVars[treeData.RecExpression, treeData.IdList.procs.FormNameList[treeData.IdList], firstTempX, context, usage]; use _ RecordTypesUse[use1, expTypes]; varDeclCode _ ConcatCode2[treeData.IdList.procs.FormVarDeclCode[treeData.IdList, expTypes], expVarDeclCode]; nestedContext _ RecordVarSeq[context, treeData.IdList.procs.FormNameList[treeData.IdList], expTypes]; temp4 _ use; temp3 _ nestedContext; temp2 _ nextTempX; temp1 _ statementCode; temp0 _ varDeclCode; END; END END; WhereExpSeqmanyProdCompWhere: PUBLIC PROC[ref: REF ANY, firstTempX: IntegerNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode, temp2: IntegerNode, temp3: LookupContextNode, temp4: UsageNode] = BEGIN tree: WhereExpSeqNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: WhereExpSeqmanyProdData _ NARROW[tree.data]; BEGIN varDeclCode: MesaCodeNode; statementCode: MesaCodeNode; aVarDeclCode: MesaCodeNode; aStatementCode: MesaCodeNode; nextTempX: IntegerNode; nestedContext: LookupContextNode; use2: UsageNode; bVarDeclCode: MesaCodeNode; bStatementCode: MesaCodeNode; nextTempX1: IntegerNode; nestedContext1: LookupContextNode; use1: UsageNode; [bVarDeclCode, bStatementCode, nextTempX1, nestedContext1, use1] _ treeData.WhereExpSeqb.procs.CompWhere[treeData.WhereExpSeqb, firstTempX, context, usage]; [aVarDeclCode, aStatementCode, nextTempX, nestedContext, use2] _ treeData.WhereExpSeqa.procs.CompWhere[treeData.WhereExpSeqa, nextTempX1, nestedContext1, use1]; statementCode _ ConcatCode2[bStatementCode, aStatementCode]; varDeclCode _ ConcatCode2[aVarDeclCode, bVarDeclCode]; temp4 _ use2; temp3 _ nestedContext; temp2 _ nextTempX; temp1 _ statementCode; temp0 _ varDeclCode; END; END END; END..