DIRECTORY
ThreeC4BaseDecl1Def,
Rope,
ThreeC4MiscAbGramDef,
ThreeC4Support,
ThreeC4BaseDecl2Def,
ThreeC4BasicAbTypesDef;
ThreeC4MiscImplImpl: CEDAR PROGRAM IMPORTS ThreeC4BaseDecl1Def, ThreeC4Support, ThreeC4BaseDecl2Def, ThreeC4BasicAbTypesDef EXPORTS ThreeC4MiscAbGramDef=
BEGIN
OPEN ThreeC4BaseDecl1Def, Rope, ThreeC4MiscAbGramDef, ThreeC4Support, ThreeC4BaseDecl2Def, ThreeC4BasicAbTypesDef;
ModIdoneIdProdFormTypeEarly: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: TypeNode] =
BEGIN
tree: ModIdNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdoneIdProdData ← NARROW[tree.data];
temp0 ← FindType[context, BuildName[treeData.Identifier]];
END
END;
ModIdoneIdProdFormTypeUse: PUBLIC PROC[ref: REF ANY, usage: UsageNode, context: LookupContextNode] RETURNS[temp0: UsageNode] =
BEGIN
tree: ModIdNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdoneIdProdData ← NARROW[tree.data];
temp0 ← RecordTypeUse[usage, LookUpType[context, BuildName[treeData.Identifier]]];
END
END;
ModIdoneIdProdFormExpCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: TypeNode, temp2: UsageNode] =
BEGIN
tree: ModIdNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdoneIdProdData ← NARROW[tree.data];
BEGIN
code: MesaCodeNode;
check: BOOLEAN;
type: TypeNode;
name: NameNode;
name ← tree.procs.FormName[tree];
type ← LookUpRightSideSymbol[context, name];
check ← Check[FoundType[type]];
code ← RopeCode1["%g", NameFill[name]];
temp2 ← FakeUsageCopy[usage];
temp1 ← type;
temp0 ← code;
END;
END
END;
ModIdoneIdProdFormValueInfo: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: TypeNode, temp1: MesaCodeNode] =
BEGIN
tree: ModIdNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdoneIdProdData ← NARROW[tree.data];
[temp0, temp1] ← LookUpSimpleValue[context, treeData.Identifier];
END
END;
ModIdoneIdProdFormType: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: TypeNode] =
BEGIN
tree: ModIdNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdoneIdProdData ← NARROW[tree.data];
temp0 ← LookUpType[context, BuildName[treeData.Identifier]];
END
END;
ModIdoneIdProdFormFirstId: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: IdentifierNode] =
BEGIN
tree: ModIdNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdoneIdProdData ← NARROW[tree.data];
temp0 ← treeData.Identifier;
END
END;
ModIdoneIdProdFormName: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: NameNode] =
BEGIN
tree: ModIdNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdoneIdProdData ← NARROW[tree.data];
temp0 ← BuildName[treeData.Identifier];
END
END;
ModIdtwoIdsProdFormTypeEarly: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: TypeNode] =
BEGIN
tree: ModIdNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdtwoIdsProdData ← NARROW[tree.data];
temp0 ← FindType[context, BuildName[treeData.Identifierleft]];
END
END;
ModIdtwoIdsProdFormTypeUse: PUBLIC PROC[ref: REF ANY, usage: UsageNode, context: LookupContextNode] RETURNS[temp0: UsageNode] =
BEGIN
tree: ModIdNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdtwoIdsProdData ← NARROW[tree.data];
temp0 ← RecordTypeUse[usage, LookUpType[context, BuildName[treeData.Identifierleft]]];
END
END;
ModIdtwoIdsProdFormExpCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: TypeNode, temp2: UsageNode] =
BEGIN
tree: ModIdNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdtwoIdsProdData ← NARROW[tree.data];
BEGIN
type1: TypeNode;
name1: NameNode;
name1 ← tree.procs.FormName[tree];
type1 ← LookUpRightSideSymbol[context, name1];
IF FoundType[type1] THEN {temp2 ← FakeUsageCopy[usage];
temp1 ← type1;
temp0 ← RopeCode1["%g", NameFill[name1]];
} ELSE {BEGIN
use2: UsageNode;
type2: TypeNode;
code2: MesaCodeNode;
[type2, code2] ← LookUpEnumTypeVal[context, BuildName[treeData.Identifierleft], BuildName[treeData.Identifierright]];
use2 ← RecordTypeUse[usage, type2];
temp2 ← use2;
temp1 ← type2;
temp0 ← code2;
END;
};
END;
END
END;
ModIdtwoIdsProdFormValueInfo: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: TypeNode, temp1: MesaCodeNode] =
BEGIN
tree: ModIdNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdtwoIdsProdData ← NARROW[tree.data];
[temp0, temp1] ← LookUpValue2[context, treeData.Identifierleft, treeData.Identifierright];
END
END;
ModIdtwoIdsProdFormType: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: TypeNode] =
BEGIN
tree: ModIdNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdtwoIdsProdData ← NARROW[tree.data];
temp0 ← LookUpType[context, BuildName[treeData.Identifierleft]];
END
END;
ModIdtwoIdsProdFormFirstId: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: IdentifierNode] =
BEGIN
tree: ModIdNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdtwoIdsProdData ← NARROW[tree.data];
temp0 ← treeData.Identifierleft;
END
END;
ModIdtwoIdsProdFormName: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: NameNode] =
BEGIN
tree: ModIdNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdtwoIdsProdData ← NARROW[tree.data];
temp0 ← BuildName2[treeData.Identifierleft, treeData.Identifierright];
END
END;
ModIdListEmptyProdFormTypesCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp1 ← FakeUsageCopy[usage];
temp0 ← BuildEmptyCode[];
END
END;
ModIdListEmptyProdFormTypeListEarly: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: TypeListNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← BuildEmptyTypeList[];
END
END;
ModIdListEmptyProdProdBuildDataRcdCode: PUBLIC PROC[ref: REF ANY, typeNameCode: MesaCodeNode, prodNameCode: MesaCodeNode] RETURNS[temp0: MesaCodeNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← BuildErrorCode["GetRidOf ProdBuildDataRcdCode as it is never used"];
END
END;
ModIdListEmptyProdDataBodyFieldTypeCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← BuildEmptyCode[];
END
END;
ModIdListEmptyProdProdDataTypeDefCode: PUBLIC PROC[ref: REF ANY, prodNameCode: MesaCodeNode, context: LookupContextNode] RETURNS[temp0: MesaCodeNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← BuildErrorCode["GetRidOf ProdDataTypeDefCode as it is never used"];
END
END;
ModIdListEmptyProdFormTypeUse: PUBLIC PROC[ref: REF ANY, usage: UsageNode, context: LookupContextNode] RETURNS[temp0: UsageNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← FakeUsageCopy[usage];
END
END;
ModIdListEmptyProdFormAbstRightSideContext: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← FakeCopyContextForConditional[context];
END
END;
ModIdListEmptyProdFormTypeList: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: TypeListNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← BuildEmptyTypeList[];
END
END;
ModIdListEmptyProdFormNameList: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: NameListNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← BuildEmptyNameList[];
END
END;
ModIdListManyProdFormTypesCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdListManyProdData ← NARROW[tree.data];
BEGIN
code: MesaCodeNode;
temp2: BOOLEAN;
use: UsageNode;
type: TypeNode;
listCode: MesaCodeNode;
use1: UsageNode;
[listCode, use1] ← treeData.ModIdList.procs.FormTypesCode[treeData.ModIdList, context, usage];
type ← treeData.ModId.procs.FormType[treeData.ModId, context];
use ← RecordTypeUse[use1, type];
IF temp2 ← TestEmptyCode[listCode] THEN { NULL;
} ELSE {NULL;
};
code ← ConcatCode2[(IF temp2 THEN BuildEmptyCode[] ELSE RopeCode1["%g, ", CodeFill[listCode]]), GetTypeCodeName[type]];
temp1 ← use;
temp0 ← code;
END;
END
END;
ModIdListManyProdFormTypeListEarly: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: TypeListNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdListManyProdData ← NARROW[tree.data];
temp0 ← AppendToTypeList[treeData.ModIdList.procs.FormTypeListEarly[treeData.ModIdList, context], treeData.ModId.procs.FormTypeEarly[treeData.ModId, context]];
END
END;
ModIdListManyProdProdBuildDataRcdCode: PUBLIC PROC[ref: REF ANY, typeNameCode: MesaCodeNode, prodNameCode: MesaCodeNode] RETURNS[temp0: MesaCodeNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdListManyProdData ← NARROW[tree.data];
temp0 ← BuildErrorCode["GetRidOf ProdBuildDataRcdCode as it is never used"];
END
END;
ModIdListManyProdDataBodyFieldTypeCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdListManyProdData ← NARROW[tree.data];
BEGIN
names: NameListNode;
types: TypeListNode;
types ← tree.procs.FormTypeList[tree, context];
names ← tree.procs.FormNameList[tree];
temp0 ← RopeCode1[", %g", CodeFill[BuildArgNameTypeCode[names, types]]];
END;
END
END;
ModIdListManyProdProdDataTypeDefCode: PUBLIC PROC[ref: REF ANY, prodNameCode: MesaCodeNode, context: LookupContextNode] RETURNS[temp0: MesaCodeNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdListManyProdData ← NARROW[tree.data];
temp0 ← BuildErrorCode["GetRidOf ProdDataTypeDefCode as it is never used"];
END
END;
ModIdListManyProdFormTypeUse: PUBLIC PROC[ref: REF ANY, usage: UsageNode, context: LookupContextNode] RETURNS[temp0: UsageNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdListManyProdData ← NARROW[tree.data];
temp0 ← treeData.ModId.procs.FormTypeUse[treeData.ModId, treeData.ModIdList.procs.FormTypeUse[treeData.ModIdList, usage, context], context];
END
END;
ModIdListManyProdFormAbstRightSideContext: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdListManyProdData ← NARROW[tree.data];
temp0 ← RecordAbstRightSideSymbol[treeData.ModIdList.procs.FormAbstRightSideContext[treeData.ModIdList, context], treeData.ModId.procs.FormName[treeData.ModId], BuildName[treeData.ModId.procs.FormFirstId[treeData.ModId]]];
END
END;
ModIdListManyProdFormTypeList: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: TypeListNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdListManyProdData ← NARROW[tree.data];
temp0 ← AppendToTypeList[treeData.ModIdList.procs.FormTypeList[treeData.ModIdList, context], treeData.ModId.procs.FormType[treeData.ModId, context]];
END
END;
ModIdListManyProdFormNameList: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: NameListNode] =
BEGIN
tree: ModIdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ModIdListManyProdData ← NARROW[tree.data];
temp0 ← AppendToNameList[treeData.ModIdList.procs.FormNameList[treeData.ModIdList], treeData.ModId.procs.FormName[treeData.ModId]];
END
END;
IdListEmptyProdSyntaxFileCodes: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp1 ← BuildEmptyCode[];
temp0 ← BuildEmptyCode[];
END
END;
IdListEmptyProdFormLinkCallCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp1 ← FakeUsageCopy[usage];
temp0 ← BuildEmptyCode[];
END
END;
IdListEmptyProdFormVarDeclCode: PUBLIC PROC[ref: REF ANY, types: TypeListNode] RETURNS[temp0: MesaCodeNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← BuildEmptyCode[];
END
END;
IdListEmptyProdFormRecFcnsDeclCode: PUBLIC PROC[ref: REF ANY, prodNameCode: MesaCodeNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp1 ← FakeUsageCopy[usage];
temp0 ← BuildEmptyCode[];
END
END;
IdListEmptyProdFormTypesCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp1 ← FakeUsageCopy[usage];
temp0 ← BuildEmptyCode[];
END
END;
IdListEmptyProdFormProcsNamesCode: PUBLIC PROC[ref: REF ANY, prodNameCode: MesaCodeNode] RETURNS[temp0: MesaCodeNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← BuildEmptyCode[];
END
END;
IdListEmptyProdBaseDeclCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← BuildEmptyCode[];
END
END;
IdListEmptyProdProcFieldTypeCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp1 ← FakeUsageCopy[usage];
temp0 ← BuildEmptyCode[];
END
END;
IdListEmptyProdRecordMultipleBaseTypes: PUBLIC PROC[ref: REF ANY, file: ROPE, context: ContextNode] RETURNS[temp0: ContextNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← FakeCopyContextForConditional[context];
END
END;
IdListEmptyProdCollectRightSideSymbols: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← FakeCopyContextForConditional[context];
END
END;
IdListEmptyProdCollectFunctionTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← FakeCopyContextForConditional[context];
END
END;
IdListEmptyProdCollectValueTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← FakeCopyContextForConditional[context];
END
END;
IdListEmptyProdFormNameList: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: NameListNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← BuildEmptyNameList[];
END
END;
IdListEmptyProdFormTypeListEarly: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: TypeListNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← BuildEmptyTypeList[];
END
END;
IdListEmptyProdRecordCedarTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← FakeCopyContextForConditional[context];
END
END;
IdListEmptyProdRecordCedarTypesFrom: PUBLIC PROC[ref: REF ANY, defFileName: ROPE, context: ContextNode] RETURNS[temp0: ContextNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← FakeCopyContextForConditional[context];
END
END;
IdListnonEmptyProdSyntaxFileCodes: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: IdListnonEmptyProdData ← NARROW[tree.data];
BEGIN
temp4: MesaCodeNode;
temp5: MesaCodeNode;
temp2: MesaCodeNode;
temp3: MesaCodeNode;
fileTree: WholeFileNode;
fileTree ← LookUpParseTree[context, BuildName[treeData.Identifier]];
[temp4, temp5] ← treeData.IdList.procs.SyntaxFileCodes[treeData.IdList, context];
[temp2, temp3] ← fileTree.procs.SyntaxFileCodes[fileTree, context];
[temp0, temp1] ← ConcatCodePairs2[temp2, temp3, temp4, temp5];
END;
END
END;
IdListnonEmptyProdFormLinkCallCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: IdListnonEmptyProdData ← NARROW[tree.data];
BEGIN
manyCode: MesaCodeNode;
use2: UsageNode;
oneCode: MesaCodeNode;
use1: UsageNode;
fileTree: WholeFileNode;
fileTree ← LookUpParseTree[context, BuildName[treeData.Identifier]];
[oneCode, use1] ← fileTree.procs.FormLinkCallCode[fileTree, context, usage];
[manyCode, use2] ← treeData.IdList.procs.FormLinkCallCode[treeData.IdList, context, use1];
temp1 ← use2;
temp0 ← ConcatCode2[oneCode, manyCode];
END;
END
END;
IdListnonEmptyProdFormVarDeclCode: PUBLIC PROC[ref: REF ANY, types: TypeListNode] RETURNS[temp0: MesaCodeNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: IdListnonEmptyProdData ← NARROW[tree.data];
BEGIN
firstType: TypeNode;
restTypes: TypeListNode;
[firstType, restTypes] ← PartitionFirstType[types];
temp0 ← ConcatCode2[RopeCode2["%g: %g;\N", IdFill[treeData.Identifier], CodeFill[GetTypeCodeName[firstType]]], treeData.IdList.procs.FormVarDeclCode[treeData.IdList, restTypes]];
END;
END
END;
IdListnonEmptyProdFormRecFcnsDeclCode: PUBLIC PROC[ref: REF ANY, prodNameCode: MesaCodeNode, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: IdListnonEmptyProdData ← NARROW[tree.data];
BEGIN
code: MesaCodeNode;
use: UsageNode;
idListCode: MesaCodeNode;
use1: UsageNode;
[idListCode, use1] ← treeData.IdList.procs.FormRecFcnsDeclCode[treeData.IdList, prodNameCode, context, usage];
use ← RecordFcnUse[use1, BuildName[treeData.Identifier], Use.ref, context];
code ← ConcatCode2[RopeCode3["%g%g: %gProcType;\N", CodeFill[prodNameCode], IdFill[treeData.Identifier], IdFill[treeData.Identifier]], idListCode];
temp1 ← use;
temp0 ← code;
END;
END
END;
IdListnonEmptyProdFormTypesCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: IdListnonEmptyProdData ← NARROW[tree.data];
BEGIN
code: MesaCodeNode;
temp2: BOOLEAN;
use: UsageNode;
type: TypeNode;
idListCode: MesaCodeNode;
use1: UsageNode;
[idListCode, use1] ← treeData.IdList.procs.FormTypesCode[treeData.IdList, context, usage];
type ← LookUpType[context, BuildName[treeData.Identifier]];
use ← RecordTypeUse[use1, type];
IF temp2 ← TestEmptyCode[idListCode] THEN { NULL;
} ELSE {NULL;
};
code ← ConcatCode2[GetTypeCodeName[type], (IF temp2 THEN BuildEmptyCode[] ELSE RopeCode1[", %g", CodeFill[idListCode]])];
temp1 ← use;
temp0 ← code;
END;
END
END;
IdListnonEmptyProdFormProcsNamesCode: PUBLIC PROC[ref: REF ANY, prodNameCode: MesaCodeNode] RETURNS[temp0: MesaCodeNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: IdListnonEmptyProdData ← NARROW[tree.data];
BEGIN
temp1: BOOLEAN;
idListCode: MesaCodeNode;
idListCode ← treeData.IdList.procs.FormProcsNamesCode[treeData.IdList, prodNameCode];
IF temp1 ← TestEmptyCode[idListCode] THEN { NULL;
} ELSE {NULL;
};
temp0 ← ConcatCode2[RopeCode2["%g%g", CodeFill[prodNameCode], IdFill[treeData.Identifier]], (IF temp1 THEN BuildEmptyCode[] ELSE RopeCode1[", %g", CodeFill[idListCode]])];
END;
END
END;
IdListnonEmptyProdBaseDeclCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: IdListnonEmptyProdData ← NARROW[tree.data];
BEGIN
codeName: MesaCodeNode;
codeName ← GetTypeCodeName[LookUpType[context, BuildName[treeData.Identifier]]];
temp0 ← ConcatCode2[ConcatCode2[RopeCode2["%g: TYPE = REF %gBody;\N", CodeFill[codeName], CodeFill[codeName]], RopeCode1["%gBody: TYPE;\N\N", CodeFill[codeName]]], treeData.IdList.procs.BaseDeclCode[treeData.IdList, context]];
END;
END
END;
IdListnonEmptyProdProcFieldTypeCode: PUBLIC PROC[ref: REF ANY, context: LookupContextNode, usage: UsageNode] RETURNS[temp0: MesaCodeNode, temp1: UsageNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: IdListnonEmptyProdData ← NARROW[tree.data];
BEGIN
code: MesaCodeNode;
use: UsageNode;
tailCode: MesaCodeNode;
idListCode: MesaCodeNode;
use1: UsageNode;
[idListCode, use1] ← treeData.IdList.procs.ProcFieldTypeCode[treeData.IdList, context, usage];
IF TestEmptyCode[idListCode] THEN {tailCode ← BuildEmptyCode[];
} ELSE {tailCode ← ConcatCode2[RopeCode[", "], idListCode];
};
use ← RecordFcnUse[use1, BuildName[treeData.Identifier], Use.ref, context];
code ← ConcatCode2[RopeCode2["\N\T%g: %gProcType", IdFill[treeData.Identifier], IdFill[treeData.Identifier]], tailCode];
temp1 ← use;
temp0 ← code;
END;
END
END;
IdListnonEmptyProdRecordMultipleBaseTypes: PUBLIC PROC[ref: REF ANY, file: ROPE, context: ContextNode] RETURNS[temp0: ContextNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: IdListnonEmptyProdData ← NARROW[tree.data];
BEGIN
name: NameNode;
codeName: MesaCodeNode;
context1: ContextNode;
context1 ← treeData.IdList.procs.RecordMultipleBaseTypes[treeData.IdList, file, context];
codeName ← RopeCode1["%gNode", IdFill[treeData.Identifier]];
name ← BuildName[treeData.Identifier];
temp0 ← RecordSimpleBaseType[context1, name, file, codeName];
END;
END
END;
IdListnonEmptyProdCollectRightSideSymbols: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: IdListnonEmptyProdData ← NARROW[tree.data];
BEGIN
fileTree: WholeFileNode;
context1: ContextNode;
context1 ← treeData.IdList.procs.CollectRightSideSymbols[treeData.IdList, context];
fileTree ← FindParseTree[context1, BuildName[treeData.Identifier]];
temp0 ← fileTree.procs.CollectRightSideSymbols[fileTree, context1];
END;
END
END;
IdListnonEmptyProdCollectFunctionTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: IdListnonEmptyProdData ← NARROW[tree.data];
BEGIN
fileTree: WholeFileNode;
context1: ContextNode;
context1 ← treeData.IdList.procs.CollectFunctionTypes[treeData.IdList, context];
fileTree ← FindParseTree[context1, BuildName[treeData.Identifier]];
temp0 ← fileTree.procs.CollectFunctionTypes[fileTree, context1];
END;
END
END;
IdListnonEmptyProdCollectValueTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: IdListnonEmptyProdData ← NARROW[tree.data];
BEGIN
context2: ContextNode;
fileTree: WholeFileNode;
context1: ContextNode;
context1 ← treeData.IdList.procs.CollectValueTypes[treeData.IdList, context];
[context2, fileTree] ← FindOrReadAndParseTree[context1, BuildName[treeData.Identifier]];
temp0 ← fileTree.procs.CollectValueTypes[fileTree, context2];
END;
END
END;
IdListnonEmptyProdFormNameList: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: NameListNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: IdListnonEmptyProdData ← NARROW[tree.data];
temp0 ← PrefixToNameList[BuildName[treeData.Identifier], treeData.IdList.procs.FormNameList[treeData.IdList]];
END
END;
IdListnonEmptyProdFormTypeListEarly: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: TypeListNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: IdListnonEmptyProdData ← NARROW[tree.data];
temp0 ← PrefixToTypeList[FindType[context, BuildName[treeData.Identifier]], treeData.IdList.procs.FormTypeListEarly[treeData.IdList, context]];
END
END;
IdListnonEmptyProdRecordCedarTypes: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: IdListnonEmptyProdData ← NARROW[tree.data];
temp1: ContextNode;
BEGIN
codeName: MesaCodeNode;
codeName ← RopeCode1["%g", IdFill[treeData.Identifier]];
temp1 ← RecordPreDefinedCedarType[context, BuildName[treeData.Identifier], codeName];
END;
temp0 ← treeData.IdList.procs.RecordCedarTypes[treeData.IdList, temp1];
END
END;
IdListnonEmptyProdRecordCedarTypesFrom: PUBLIC PROC[ref: REF ANY, defFileName: ROPE, context: ContextNode] RETURNS[temp0: ContextNode] =
BEGIN
tree: IdListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: IdListnonEmptyProdData ← NARROW[tree.data];
temp1: ContextNode;
BEGIN
codeName: MesaCodeNode;
codeName ← RopeCode1["%g", IdFill[treeData.Identifier]];
temp1 ← RecordCedarType[context, BuildName[treeData.Identifier], defFileName, codeName];
END;
temp0 ← treeData.IdList.procs.RecordCedarTypesFrom[treeData.IdList, defFileName, temp1];
END
END;
RopeListOneProdSpecialSyntaxTokenFileCode: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: MesaCodeNode] =
BEGIN
tree: RopeListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: RopeListOneProdData ← NARROW[tree.data];
IF EqualRopes[";", RopeFromRopeNode[treeData.Rope]] THEN {temp0 ← RopeCode["SpelledTerminals: semiColon ; ;\N"];
} ELSE {temp0 ← BuildEmptyCode[];
};
END
END;
RopeListOneProdSyntaxFileCodes: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode] =
BEGIN
tree: RopeListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: RopeListOneProdData ← NARROW[tree.data];
BEGIN
tkn: MesaCodeNode;
tkn ← RopeCode1["\"%g\"", CodeFill[RopeCode[RopeFromRopeNode[treeData.Rope]]]];
temp1 ← BuildEmptyCode[];
temp0 ← tkn;
END;
END
END;
RopeListOneProdCollectRightSideSymbols: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] =
BEGIN
tree: RopeListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: RopeListOneProdData ← NARROW[tree.data];
temp0 ← RecordRopeToken[context, treeData.Rope];
END
END;
RopeListManyProdSpecialSyntaxTokenFileCode: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: MesaCodeNode] =
BEGIN
tree: RopeListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: RopeListManyProdData ← NARROW[tree.data];
temp1: BOOLEAN;
IF temp1 ← EqualRopes[";", RopeFromRopeNode[treeData.Rope]] THEN { NULL;
} ELSE {NULL;
};
temp0 ← ConcatCode2[treeData.RopeList.procs.SpecialSyntaxTokenFileCode[treeData.RopeList], (IF temp1 THEN RopeCode["SpelledTerminals: semiColon ; ;\N"] ELSE BuildEmptyCode[])];
END
END;
RopeListManyProdSyntaxFileCodes: PUBLIC PROC[ref: REF ANY, context: LookupContextNode] RETURNS[temp0: MesaCodeNode, temp1: MesaCodeNode] =
BEGIN
tree: RopeListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: RopeListManyProdData ← NARROW[tree.data];
BEGIN
tkn: MesaCodeNode;
listCode: MesaCodeNode;
unused: MesaCodeNode;
[listCode, unused] ← treeData.RopeList.procs.SyntaxFileCodes[treeData.RopeList, context];
tkn ← ConcatCode3[listCode, RopeCode[" "], RopeCode1["\"%g\"", CodeFill[RopeCode[RopeFromRopeNode[treeData.Rope]]]]];
temp1 ← BuildEmptyCode[];
temp0 ← tkn;
END;
END
END;
RopeListManyProdCollectRightSideSymbols: PUBLIC PROC[ref: REF ANY, context: ContextNode] RETURNS[temp0: ContextNode] =
BEGIN
tree: RopeListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: RopeListManyProdData ← NARROW[tree.data];
temp0 ← RecordRopeToken[treeData.RopeList.procs.CollectRightSideSymbols[treeData.RopeList, context], treeData.Rope];
END
END;
END..