DIRECTORY ThreeC4BaseDecl1Def, Rope, ThreeC4Support, ThreeC4CProdAbGramDef, ThreeC4BaseDecl2Def, ThreeC4BasicAbTypesDef; ThreeC4CProdImplImpl: CEDAR PROGRAM IMPORTS ThreeC4BaseDecl1Def, ThreeC4Support, ThreeC4CProdAbGramDef, ThreeC4BaseDecl2Def EXPORTS ThreeC4CProdAbGramDef= BEGIN OPEN ThreeC4BaseDecl1Def, Rope, ThreeC4Support, ThreeC4CProdAbGramDef, ThreeC4BaseDecl2Def, ThreeC4BasicAbTypesDef; ConcreteProductionProdTestLinkPresent: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: BOOLEAN] = BEGIN tree: ConcreteProductionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteProductionProdData _ NARROW[tree.data]; temp0 _ EqualRopes["True", "True"]; END END; ConcreteProductionProdSyntaxFileCodes: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode] = BEGIN tree: ConcreteProductionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteProductionProdData _ NARROW[tree.data]; BEGIN prod: MesaCodeNode; prod _ RopeCode2["%g _ %g;\N", DotedNameFill[treeData.ModId.procs.FormName[treeData.ModId]], CodeFill[treeData.ConcreteRightSideList.procs.SyntaxRightSideFileCode[treeData.ConcreteRightSideList]]]; temp1 _ prod; temp0 _ BuildEmptyCode[]; END; END END; ConcreteProductionProdLinkFileCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: ConcreteProductionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteProductionProdData _ NARROW[tree.data]; BEGIN code: MesaCodeNode; index: INT; prodName: NameNode; prodName _ treeData.ModId.procs.FormName[treeData.ModId]; index _ LookUpProduction[context, prodName]; code _ RopeCode2["prodLinkArray[%g] _ See%g;\N", IntFill[index], NameFill[prodName]]; temp1 _ FakeUsageCopy[usage]; temp0 _ code; END; END END; ConcreteProductionProdImplFileCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: ConcreteProductionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteProductionProdData _ NARROW[tree.data]; BEGIN code: MesaCodeNode; headCode: MesaCodeNode; nodeVarDeclCode: MesaCodeNode; nodeVarAssignCode: MesaCodeNode; bodyCode: MesaCodeNode; returnCode: MesaCodeNode; endCode: MesaCodeNode; use: UsageNode; check: BOOLEAN; expCode: MesaCodeNode; expType: TypeNode; use1: UsageNode; context1: LookupContextNode; subNodeNames: NameListNode; subNodeTypes: TypeListNode; prodName: NameNode; prodBuildType: TypeNode; False: BOOLEAN; False _ EqualRopes["False", "True"]; prodBuildType _ LookUpGrammarSymbol[context, BuildName[treeData.ModId.procs.FormFirstId[treeData.ModId]]]; prodName _ treeData.ModId.procs.FormName[treeData.ModId]; subNodeTypes _ treeData.ConcreteRightSideList.procs.FormTypeList[treeData.ConcreteRightSideList, context]; subNodeNames _ treeData.ConcreteRightSideList.procs.FormNameList[treeData.ConcreteRightSideList]; context1 _ treeData.ConcreteRightSideList.procs.FormRightSideContext[treeData.ConcreteRightSideList, context]; [expCode, expType, use1] _ treeData.BuildExp.procs.FormBuildExpCode[treeData.BuildExp, False, context1, usage]; check _ CompareValTypeWithVarType[expType, prodBuildType]; use _ RecordTypesUse[use1, subNodeTypes]; endCode _ RopeCode["END;\N\N"]; returnCode _ RopeCode["RETURN[stack]\N"]; bodyCode _ RopeCode1["stack _ CONS[%g, stack];\N", CodeFill[expCode]]; nodeVarAssignCode _ treeData.ConcreteRightSideList.procs.FormNodeVarAssignCode[treeData.ConcreteRightSideList]; nodeVarDeclCode _ BuildVarDeclCode[subNodeNames, subNodeTypes]; headCode _ ConcatCode4[RopeCode1["See%g: PROC[nodes: LIST OF REF ANY, position: INT, length: INT]\N", NameFill[prodName]], RopeCode["\TRETURNS[LIST OF REF ANY] =\N"], RopeCode["BEGIN\N"], RopeCode["stack: LIST OF REF ANY _ nodes;\N"]]; code _ ConcatCode6[headCode, nodeVarDeclCode, nodeVarAssignCode, bodyCode, returnCode, endCode]; temp1 _ use; temp0 _ code; END; END END; ConcreteProductionProdCollectProductions: PUBLIC PROC[ref: REF ANY, first: INT, context: ContextNode] RETURNS[temp0: INT, temp1: ContextNode] = BEGIN tree: ConcreteProductionNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteProductionProdData _ NARROW[tree.data]; temp1 _ RecordProduction[context, treeData.ModId.procs.FormName[treeData.ModId], first]; temp0 _ Add1ToInt[first]; END END; ConcreteRightSideListemptyProdSyntaxRightSideFileCode: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: MesaCodeNode] = BEGIN tree: ConcreteRightSideListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; temp0 _ BuildEmptyCode[]; END END; ConcreteRightSideListemptyProdFormNodeVarAssignCode: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: MesaCodeNode] = BEGIN tree: ConcreteRightSideListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; temp0 _ BuildEmptyCode[]; END END; ConcreteRightSideListemptyProdFormTypeList: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: TypeListNode] = BEGIN tree: ConcreteRightSideListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; temp0 _ BuildEmptyTypeList[]; END END; ConcreteRightSideListemptyProdFormNameList: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: NameListNode] = BEGIN tree: ConcreteRightSideListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; temp0 _ BuildEmptyNameList[]; END END; ConcreteRightSideListemptyProdFormRightSideContext: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: LookupContextNode] = BEGIN tree: ConcreteRightSideListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; temp0 _ context; END END; ConcreteRightSideListoneProdSyntaxRightSideFileCode: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: MesaCodeNode] = BEGIN tree: ConcreteRightSideListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideListoneProdData _ NARROW[tree.data]; temp0 _ treeData.ConcreteRightSideItem.procs.SyntaxRightSideFileCode[treeData.ConcreteRightSideItem]; END END; ConcreteRightSideListoneProdFormNodeVarAssignCode: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: MesaCodeNode] = BEGIN tree: ConcreteRightSideListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideListoneProdData _ NARROW[tree.data]; temp0 _ treeData.ConcreteRightSideItem.procs.FormNodeVarAssignCode[treeData.ConcreteRightSideItem]; END END; ConcreteRightSideListoneProdFormTypeList: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: TypeListNode] = BEGIN tree: ConcreteRightSideListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideListoneProdData _ NARROW[tree.data]; temp0 _ treeData.ConcreteRightSideItem.procs.FormTypeList[treeData.ConcreteRightSideItem, context]; END END; ConcreteRightSideListoneProdFormNameList: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: NameListNode] = BEGIN tree: ConcreteRightSideListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideListoneProdData _ NARROW[tree.data]; temp0 _ treeData.ConcreteRightSideItem.procs.FormNameList[treeData.ConcreteRightSideItem]; END END; ConcreteRightSideListoneProdFormRightSideContext: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: LookupContextNode] = BEGIN tree: ConcreteRightSideListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideListoneProdData _ NARROW[tree.data]; temp0 _ treeData.ConcreteRightSideItem.procs.FormRightSideContext[treeData.ConcreteRightSideItem, context]; END END; ConcreteRightSideListmanyProdSyntaxRightSideFileCode: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: MesaCodeNode] = BEGIN tree: ConcreteRightSideListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideListmanyProdData _ NARROW[tree.data]; temp0 _ ConcatCode2[treeData.ConcreteRightSideList.procs.SyntaxRightSideFileCode[treeData.ConcreteRightSideList], treeData.ConcreteRightSideItem.procs.SyntaxRightSideFileCode[treeData.ConcreteRightSideItem]]; END END; ConcreteRightSideListmanyProdFormNodeVarAssignCode: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: MesaCodeNode] = BEGIN tree: ConcreteRightSideListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideListmanyProdData _ NARROW[tree.data]; temp0 _ ConcatCode2[treeData.ConcreteRightSideItem.procs.FormNodeVarAssignCode[treeData.ConcreteRightSideItem], treeData.ConcreteRightSideList.procs.FormNodeVarAssignCode[treeData.ConcreteRightSideList]]; END END; ConcreteRightSideListmanyProdFormTypeList: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: TypeListNode] = BEGIN tree: ConcreteRightSideListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideListmanyProdData _ NARROW[tree.data]; temp0 _ ConcatTypeLists[treeData.ConcreteRightSideList.procs.FormTypeList[treeData.ConcreteRightSideList, context], treeData.ConcreteRightSideItem.procs.FormTypeList[treeData.ConcreteRightSideItem, context]]; END END; ConcreteRightSideListmanyProdFormNameList: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: NameListNode] = BEGIN tree: ConcreteRightSideListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideListmanyProdData _ NARROW[tree.data]; temp0 _ ConcatNameLists[treeData.ConcreteRightSideList.procs.FormNameList[treeData.ConcreteRightSideList], treeData.ConcreteRightSideItem.procs.FormNameList[treeData.ConcreteRightSideItem]]; END END; ConcreteRightSideListmanyProdFormRightSideContext: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: LookupContextNode] = BEGIN tree: ConcreteRightSideListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideListmanyProdData _ NARROW[tree.data]; temp0 _ treeData.ConcreteRightSideItem.procs.FormRightSideContext[treeData.ConcreteRightSideItem, treeData.ConcreteRightSideList.procs.FormRightSideContext[treeData.ConcreteRightSideList, context]]; END END; ConcreteRightSideItemropeProdSyntaxRightSideFileCode: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: MesaCodeNode] = BEGIN tree: ConcreteRightSideItemNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideItemropeProdData _ NARROW[tree.data]; BEGIN itemRope: ROPE; itemRope _ RopeFromRopeNode[treeData.Rope]; temp0 _ ConcatCode3[RopeCode[" \""], RopeCode[itemRope], RopeCode["\" "]]; END; END END; ConcreteRightSideItemropeProdFormNodeVarAssignCode: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: MesaCodeNode] = BEGIN tree: ConcreteRightSideItemNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideItemropeProdData _ NARROW[tree.data]; temp0 _ BuildEmptyCode[]; END END; ConcreteRightSideItemropeProdFormTypeList: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: TypeListNode] = BEGIN tree: ConcreteRightSideItemNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideItemropeProdData _ NARROW[tree.data]; temp0 _ BuildEmptyTypeList[]; END END; ConcreteRightSideItemropeProdFormNameList: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: NameListNode] = BEGIN tree: ConcreteRightSideItemNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideItemropeProdData _ NARROW[tree.data]; temp0 _ BuildEmptyNameList[]; END END; ConcreteRightSideItemropeProdFormRightSideContext: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: LookupContextNode] = BEGIN tree: ConcreteRightSideItemNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideItemropeProdData _ NARROW[tree.data]; BEGIN check: BOOLEAN; check _ CheckLegalRopeToken[context, treeData.Rope]; temp0 _ context; END; END END; ConcreteRightSideItemmodIdProdSyntaxRightSideFileCode: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: MesaCodeNode] = BEGIN tree: ConcreteRightSideItemNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideItemmodIdProdData _ NARROW[tree.data]; temp0 _ RopeCode1["%g ", IdFill[treeData.ModId.procs.FormFirstId[treeData.ModId]]]; END END; ConcreteRightSideItemmodIdProdFormNodeVarAssignCode: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: MesaCodeNode] = BEGIN tree: ConcreteRightSideItemNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideItemmodIdProdData _ NARROW[tree.data]; temp0 _ ConcatCode2[RopeCode1["%g _ NARROW[stack.first];\N", NameFill[treeData.ModId.procs.FormName[treeData.ModId]]], RopeCode["stack _ stack.rest;\N"]]; END END; ConcreteRightSideItemmodIdProdFormTypeList: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: TypeListNode] = BEGIN tree: ConcreteRightSideItemNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideItemmodIdProdData _ NARROW[tree.data]; BEGIN type: TypeNode; name: NameNode; name _ BuildName[treeData.ModId.procs.FormFirstId[treeData.ModId]]; type _ LookUpGrammarSymbol[context, name]; temp0 _ BuildOneTypeList[type]; END; END END; ConcreteRightSideItemmodIdProdFormNameList: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: NameListNode] = BEGIN tree: ConcreteRightSideItemNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideItemmodIdProdData _ NARROW[tree.data]; temp0 _ BuildOneNameList[treeData.ModId.procs.FormName[treeData.ModId]]; END END; ConcreteRightSideItemmodIdProdFormRightSideContext: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: LookupContextNode] = BEGIN tree: ConcreteRightSideItemNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ConcreteRightSideItemmodIdProdData _ NARROW[tree.data]; BEGIN type: TypeNode; type _ LookUpGrammarSymbol[context, BuildName[treeData.ModId.procs.FormFirstId[treeData.ModId]]]; temp0 _ PushLocalRSS[context, treeData.ModId.procs.FormName[treeData.ModId], type]; END; END END; BuildExpmodIdProdFormBuildLengthCode: PUBLIC PROC[ref: REF ANY, nested: BOOLEAN, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: BuildExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: BuildExpmodIdProdData _ NARROW[tree.data]; BEGIN code: MesaCodeNode; nodeCode: MesaCodeNode; unused: TypeNode; use: UsageNode; [nodeCode, unused, use] _ treeData.ModId.procs.FormExpCode[treeData.ModId, context, usage]; code _ RopeCode1["%g.length", CodeFill[nodeCode]]; temp1 _ use; temp0 _ code; END; END END; BuildExpmodIdProdFormBuildPositionCode: PUBLIC PROC[ref: REF ANY, nested: BOOLEAN, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: BuildExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: BuildExpmodIdProdData _ NARROW[tree.data]; BEGIN code: MesaCodeNode; nodeCode: MesaCodeNode; unused: TypeNode; use: UsageNode; [nodeCode, unused, use] _ treeData.ModId.procs.FormExpCode[treeData.ModId, context, usage]; code _ RopeCode1["%g.position", CodeFill[nodeCode]]; temp1 _ use; temp0 _ code; END; END END; BuildExpmodIdProdFormBuildExpCode: PUBLIC PROC[ref: REF ANY, nested: BOOLEAN, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: TypeNode, temp2: UsageNode] = BEGIN tree: BuildExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: BuildExpmodIdProdData _ NARROW[tree.data]; [temp0, temp1, temp2] _ treeData.ModId.procs.FormExpCode[treeData.ModId, context, usage]; END END; BuildExpbuildNodeProdFormBuildLengthCode: PUBLIC PROC[ref: REF ANY, nested: BOOLEAN, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: BuildExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: BuildExpbuildNodeProdData _ NARROW[tree.data]; [temp0, temp1] _ treeData.IntervalExp.procs.FormIntervalBuildLengthCode[treeData.IntervalExp, treeData.BuildExpList, nested, context, usage]; END END; BuildExpbuildNodeProdFormBuildPositionCode: PUBLIC PROC[ref: REF ANY, nested: BOOLEAN, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: BuildExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: BuildExpbuildNodeProdData _ NARROW[tree.data]; [temp0, temp1] _ treeData.IntervalExp.procs.FormIntervalBuildPositionCode[treeData.IntervalExp, treeData.BuildExpList, nested, context, usage]; END END; BuildExpbuildNodeProdFormBuildExpCode: PUBLIC PROC[ref: REF ANY, nested: BOOLEAN, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: TypeNode, temp2: UsageNode] = BEGIN tree: BuildExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: BuildExpbuildNodeProdData _ NARROW[tree.data]; BEGIN code: MesaCodeNode; use: UsageNode; check: BOOLEAN; type: TypeNode; argTypes: TypeListNode; name: NameNode; spacerCode: MesaCodeNode; expCode: MesaCodeNode; expListTypes: TypeListNode; use1: UsageNode; intervalCode: MesaCodeNode; positionCode: MesaCodeNode; use0: UsageNode; lengthCode: MesaCodeNode; use00: UsageNode; [lengthCode, use00] _ treeData.IntervalExp.procs.FormIntervalBuildLengthCode[treeData.IntervalExp, treeData.BuildExpList, nested, context, usage]; [positionCode, use0] _ treeData.IntervalExp.procs.FormIntervalBuildPositionCode[treeData.IntervalExp, treeData.BuildExpList, nested, context, use00]; intervalCode _ RopeCode2["%g, %g", CodeFill[positionCode], CodeFill[lengthCode]]; [expCode, expListTypes, use1] _ treeData.BuildExpList.procs.FormBuildExpListCode[treeData.BuildExpList, context, use0]; IF TestEmptyCode[expCode] THEN {spacerCode _ BuildEmptyCode[]; } ELSE {spacerCode _ RopeCode[", "]; }; name _ treeData.ModId.procs.FormName[treeData.ModId]; [type, argTypes] _ LookUpAbstractProduction[context, name]; check _ CompareValTypesWithVarTypes[expListTypes, argTypes]; use _ RecordAbstProdUse[use1, name, Use.import, context]; code _ RopeCode4["Build%gProdNode[%g%g%g]", NameFill[name], CodeFill[intervalCode], CodeFill[spacerCode], CodeFill[expCode]]; temp2 _ use; temp1 _ type; temp0 _ code; END; END END; BuildExpListemptyProdFormBuildLengthCode: PUBLIC PROC[ref: REF ANY, nested: BOOLEAN, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: BuildExpListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; IF EmptyRSContext[context] THEN {temp1 _ FakeUsageCopy[usage]; temp0 _ RopeCode["length"]; } ELSE {temp1 _ FakeUsageCopy[usage]; temp0 _ BuildErrorCode["expecting a build exp list"]; }; END END; BuildExpListemptyProdFormBuildPositionCode: PUBLIC PROC[ref: REF ANY, nested: BOOLEAN, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: BuildExpListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; IF EmptyRSContext[context] THEN {temp1 _ FakeUsageCopy[usage]; temp0 _ RopeCode["position"]; } ELSE {temp1 _ FakeUsageCopy[usage]; temp0 _ BuildErrorCode["expecting a build exp list"]; }; END END; BuildExpListemptyProdFormBuildExpListCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: TypeListNode, temp2: UsageNode] = BEGIN tree: BuildExpListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; temp2 _ FakeUsageCopy[usage]; temp1 _ BuildEmptyTypeList[]; temp0 _ BuildEmptyCode[]; END END; BuildExpListoneProdFormBuildLengthCode: PUBLIC PROC[ref: REF ANY, nested: BOOLEAN, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: BuildExpListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: BuildExpListoneProdData _ NARROW[tree.data]; [temp0, temp1] _ treeData.BuildExp.procs.FormBuildLengthCode[treeData.BuildExp, nested, context, usage]; END END; BuildExpListoneProdFormBuildPositionCode: PUBLIC PROC[ref: REF ANY, nested: BOOLEAN, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: BuildExpListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: BuildExpListoneProdData _ NARROW[tree.data]; [temp0, temp1] _ treeData.BuildExp.procs.FormBuildPositionCode[treeData.BuildExp, nested, context, usage]; END END; BuildExpListoneProdFormBuildExpListCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: TypeListNode, temp2: UsageNode] = BEGIN tree: BuildExpListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: BuildExpListoneProdData _ NARROW[tree.data]; BEGIN code: MesaCodeNode; type: TypeNode; use: UsageNode; True: BOOLEAN; True _ EqualRopes["True", "True"]; [code, type, use] _ treeData.BuildExp.procs.FormBuildExpCode[treeData.BuildExp, True, context, usage]; temp2 _ use; temp1 _ BuildOneTypeList[type]; temp0 _ code; END; END END; BuildExpListmanyProdFormBuildLengthCode: PUBLIC PROC[ref: REF ANY, nested: BOOLEAN, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: BuildExpListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: BuildExpListmanyProdData _ NARROW[tree.data]; BEGIN code: MesaCodeNode; expPosCode: MesaCodeNode; use: UsageNode; expLengthCode: MesaCodeNode; use2: UsageNode; listPosCode: MesaCodeNode; use1: UsageNode; [listPosCode, use1] _ treeData.BuildExpList.procs.FormBuildPositionCode[treeData.BuildExpList, nested, context, usage]; [expLengthCode, use2] _ treeData.BuildExp.procs.FormBuildLengthCode[treeData.BuildExp, nested, context, use1]; [expPosCode, use] _ treeData.BuildExp.procs.FormBuildPositionCode[treeData.BuildExp, nested, context, use2]; code _ RopeCode3["%g + %g - %g", CodeFill[expPosCode], CodeFill[expLengthCode], CodeFill[listPosCode]]; temp1 _ use; temp0 _ code; END; END END; BuildExpListmanyProdFormBuildPositionCode: PUBLIC PROC[ref: REF ANY, nested: BOOLEAN, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: BuildExpListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: BuildExpListmanyProdData _ NARROW[tree.data]; [temp0, temp1] _ treeData.BuildExpList.procs.FormBuildPositionCode[treeData.BuildExpList, nested, context, usage]; END END; BuildExpListmanyProdFormBuildExpListCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: TypeListNode, temp2: UsageNode] = BEGIN tree: BuildExpListNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: BuildExpListmanyProdData _ NARROW[tree.data]; BEGIN code: MesaCodeNode; types: TypeListNode; expCode: MesaCodeNode; type: TypeNode; use: UsageNode; listCode: MesaCodeNode; types1: TypeListNode; use1: UsageNode; True: BOOLEAN; True _ EqualRopes["True", "True"]; [listCode, types1, use1] _ treeData.BuildExpList.procs.FormBuildExpListCode[treeData.BuildExpList, context, usage]; [expCode, type, use] _ treeData.BuildExp.procs.FormBuildExpCode[treeData.BuildExp, True, context, use1]; types _ AppendToTypeList[types1, type]; code _ ConcatCode3[listCode, RopeCode[", "], expCode]; temp2 _ use; temp1 _ types; temp0 _ code; END; END END; IntervalExpnoneProdFormIntervalBuildLengthCode: PUBLIC PROC[ref: REF ANY, expList: BuildExpListNode, nested: BOOLEAN, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: IntervalExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; IF nested THEN {[temp0, temp1] _ expList.procs.FormBuildLengthCode[expList, nested, context, usage]; } ELSE {temp1 _ FakeUsageCopy[usage]; temp0 _ RopeCode["length"]; }; END END; IntervalExpnoneProdFormIntervalBuildPositionCode: PUBLIC PROC[ref: REF ANY, expList: BuildExpListNode, nested: BOOLEAN, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: IntervalExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; IF nested THEN {[temp0, temp1] _ expList.procs.FormBuildPositionCode[expList, nested, context, usage]; } ELSE {temp1 _ FakeUsageCopy[usage]; temp0 _ RopeCode["position"]; }; END END; IntervalExppresentProdFormIntervalBuildLengthCode: PUBLIC PROC[ref: REF ANY, expList: BuildExpListNode, nested: BOOLEAN, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: IntervalExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: IntervalExppresentProdData _ NARROW[tree.data]; IF nested THEN {IF EqualIntervalForm[treeData.IntervalFormform, IntervalForm.closed] THEN {BEGIN code: MesaCodeNode; right: MesaCodeNode; unused: TypeNode; use: UsageNode; left: MesaCodeNode; unused1: TypeNode; use1: UsageNode; [left, unused1, use1] _ treeData.ModIdleft.procs.FormExpCode[treeData.ModIdleft, context, usage]; [right, unused, use] _ treeData.ModIdright.procs.FormExpCode[treeData.ModIdright, context, use1]; code _ RopeCode3["%g.position + %g.length - %g.position", CodeFill[right], CodeFill[right], CodeFill[left]]; temp1 _ use; temp0 _ code; END; } ELSE {IF EqualIntervalForm[treeData.IntervalFormform, IntervalForm.leftOpen] THEN {BEGIN code: MesaCodeNode; right: MesaCodeNode; unused: TypeNode; use: UsageNode; left: MesaCodeNode; unused1: TypeNode; use1: UsageNode; [left, unused1, use1] _ treeData.ModIdleft.procs.FormExpCode[treeData.ModIdleft, context, usage]; [right, unused, use] _ treeData.ModIdright.procs.FormExpCode[treeData.ModIdright, context, use1]; code _ RopeCode4["%g.position + %g.length - %g.position - %g.length", CodeFill[right], CodeFill[right], CodeFill[left], CodeFill[left]]; temp1 _ use; temp0 _ code; END; } ELSE {IF EqualIntervalForm[treeData.IntervalFormform, IntervalForm.rightOpen] THEN {BEGIN code: MesaCodeNode; right: MesaCodeNode; unused: TypeNode; use: UsageNode; left: MesaCodeNode; unused1: TypeNode; use1: UsageNode; [left, unused1, use1] _ treeData.ModIdleft.procs.FormExpCode[treeData.ModIdleft, context, usage]; [right, unused, use] _ treeData.ModIdright.procs.FormExpCode[treeData.ModIdright, context, use1]; code _ RopeCode2["%g.position - %g.length", CodeFill[right], CodeFill[left]]; temp1 _ use; temp0 _ code; END; } ELSE {BEGIN code: MesaCodeNode; right: MesaCodeNode; unused: TypeNode; use: UsageNode; left: MesaCodeNode; unused1: TypeNode; use1: UsageNode; [left, unused1, use1] _ treeData.ModIdleft.procs.FormExpCode[treeData.ModIdleft, context, usage]; [right, unused, use] _ treeData.ModIdright.procs.FormExpCode[treeData.ModIdright, context, use1]; code _ RopeCode3["%g.position - %g.position - %g.length", CodeFill[right], CodeFill[left], CodeFill[left]]; temp1 _ use; temp0 _ code; END; }; }; }; } ELSE {temp1 _ FakeUsageCopy[usage]; temp0 _ RopeCode["length"]; }; END END; IntervalExppresentProdFormIntervalBuildPositionCode: PUBLIC PROC[ref: REF ANY, expList: BuildExpListNode, nested: BOOLEAN, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] = BEGIN tree: IntervalExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: IntervalExppresentProdData _ NARROW[tree.data]; IF nested THEN {IF EqualIntervalForm[treeData.IntervalFormform, IntervalForm.closed] THEN {BEGIN code: MesaCodeNode; left: MesaCodeNode; unused: TypeNode; use: UsageNode; [left, unused, use] _ treeData.ModIdleft.procs.FormExpCode[treeData.ModIdleft, context, usage]; code _ RopeCode1["%g.position", CodeFill[left]]; temp1 _ use; temp0 _ code; END; } ELSE {IF EqualIntervalForm[treeData.IntervalFormform, IntervalForm.leftOpen] THEN {BEGIN code: MesaCodeNode; left: MesaCodeNode; unused: TypeNode; use: UsageNode; [left, unused, use] _ treeData.ModIdleft.procs.FormExpCode[treeData.ModIdleft, context, usage]; code _ RopeCode2["%g.position + %g.length", CodeFill[left], CodeFill[left]]; temp1 _ use; temp0 _ code; END; } ELSE {IF EqualIntervalForm[treeData.IntervalFormform, IntervalForm.rightOpen] THEN {BEGIN code: MesaCodeNode; left: MesaCodeNode; unused: TypeNode; use: UsageNode; [left, unused, use] _ treeData.ModIdleft.procs.FormExpCode[treeData.ModIdleft, context, usage]; code _ RopeCode1["%g.position", CodeFill[left]]; temp1 _ use; temp0 _ code; END; } ELSE {BEGIN code: MesaCodeNode; left: MesaCodeNode; unused: TypeNode; use: UsageNode; [left, unused, use] _ treeData.ModIdleft.procs.FormExpCode[treeData.ModIdleft, context, usage]; code _ RopeCode2["%g.position + %g.length", CodeFill[left], CodeFill[left]]; temp1 _ use; temp0 _ code; END; }; }; }; } ELSE {temp1 _ FakeUsageCopy[usage]; temp0 _ RopeCode["position"]; }; END END; END..