DIRECTORY
	ThreeC4BaseDecl1Def,
	ThreeC4MiscAbGramDef,
	ThreeC4BasicAbTypesDef;

ThreeC4MiscAbGramImpl: CEDAR PROGRAM IMPORTS ThreeC4MiscAbGramDef EXPORTS ThreeC4MiscAbGramDef= 
BEGIN
OPEN ThreeC4BaseDecl1Def, ThreeC4MiscAbGramDef, ThreeC4BasicAbTypesDef;

-- ModIdoneIdProd

ModIdoneIdProdProcs: PUBLIC ModIdNodeProcs ←
	NEW[ModIdNodeProcsBody ← [ModIdoneIdProdFormName, ModIdoneIdProdFormFirstId, ModIdoneIdProdFormType, ModIdoneIdProdFormValueInfo, ModIdoneIdProdFormExpCode, ModIdoneIdProdFormTypeUse, ModIdoneIdProdFormTypeEarly]];

BuildModIdoneIdProdNode: PUBLIC PROC[position: INT, length: INT, Identifier: IdentifierNode]
	RETURNS[ModIdNode] =
		BEGIN
		data: ModIdoneIdProdData ←
			NEW[ModIdoneIdProdDataBody←[
			Identifier]];
		RETURN[NEW[ModIdNodeBody←[position, length, ModIdoneIdProdProcs, data]]];
		END;


-- ModIdtwoIdsProd

ModIdtwoIdsProdProcs: PUBLIC ModIdNodeProcs ←
	NEW[ModIdNodeProcsBody ← [ModIdtwoIdsProdFormName, ModIdtwoIdsProdFormFirstId, ModIdtwoIdsProdFormType, ModIdtwoIdsProdFormValueInfo, ModIdtwoIdsProdFormExpCode, ModIdtwoIdsProdFormTypeUse, ModIdtwoIdsProdFormTypeEarly]];

BuildModIdtwoIdsProdNode: PUBLIC PROC[position: INT, length: INT, Identifierleft: IdentifierNode, Identifierright: IdentifierNode]
	RETURNS[ModIdNode] =
		BEGIN
		data: ModIdtwoIdsProdData ←
			NEW[ModIdtwoIdsProdDataBody←[
			Identifierleft, Identifierright]];
		RETURN[NEW[ModIdNodeBody←[position, length, ModIdtwoIdsProdProcs, data]]];
		END;


-- ModIdListEmptyProd

ModIdListEmptyProdProcs: PUBLIC ModIdListNodeProcs ←
	NEW[ModIdListNodeProcsBody ← [ModIdListEmptyProdFormNameList, ModIdListEmptyProdFormAbstRightSideContext, ModIdListEmptyProdFormTypeUse, ModIdListEmptyProdFormTypeListEarly, ModIdListEmptyProdFormTypeList, ModIdListEmptyProdProdDataTypeDefCode, ModIdListEmptyProdDataBodyFieldTypeCode, ModIdListEmptyProdProdBuildDataRcdCode, ModIdListEmptyProdFormTypesCode]];

BuildModIdListEmptyProdNode: PUBLIC PROC[position: INT, length: INT]
	RETURNS[ModIdListNode] =
		BEGIN
		RETURN[NEW[ModIdListNodeBody←[position, length, ModIdListEmptyProdProcs, NIL]]];
		END;


-- ModIdListManyProd

ModIdListManyProdProcs: PUBLIC ModIdListNodeProcs ←
	NEW[ModIdListNodeProcsBody ← [ModIdListManyProdFormNameList, ModIdListManyProdFormAbstRightSideContext, ModIdListManyProdFormTypeUse, ModIdListManyProdFormTypeListEarly, ModIdListManyProdFormTypeList, ModIdListManyProdProdDataTypeDefCode, ModIdListManyProdDataBodyFieldTypeCode, ModIdListManyProdProdBuildDataRcdCode, ModIdListManyProdFormTypesCode]];

BuildModIdListManyProdNode: PUBLIC PROC[position: INT, length: INT, ModIdList: ModIdListNode, ModId: ModIdNode]
	RETURNS[ModIdListNode] =
		BEGIN
		data: ModIdListManyProdData ←
			NEW[ModIdListManyProdDataBody←[
			ModIdList, ModId]];
		RETURN[NEW[ModIdListNodeBody←[position, length, ModIdListManyProdProcs, data]]];
		END;


-- IdListEmptyProd

IdListEmptyProdProcs: PUBLIC IdListNodeProcs ←
	NEW[IdListNodeProcsBody ← [IdListEmptyProdRecordCedarTypesFrom, IdListEmptyProdRecordCedarTypes, IdListEmptyProdRecordMultipleBaseTypes, IdListEmptyProdFormTypeListEarly, IdListEmptyProdFormNameList, IdListEmptyProdCollectValueTypes, IdListEmptyProdCollectFunctionTypes, IdListEmptyProdCollectRightSideSymbols, IdListEmptyProdBaseDeclCode, IdListEmptyProdFormTypesCode, IdListEmptyProdProcFieldTypeCode, IdListEmptyProdFormProcsNamesCode, IdListEmptyProdFormRecFcnsDeclCode, IdListEmptyProdFormVarDeclCode, IdListEmptyProdFormLinkCallCode, IdListEmptyProdSyntaxFileCodes]];

BuildIdListEmptyProdNode: PUBLIC PROC[position: INT, length: INT]
	RETURNS[IdListNode] =
		BEGIN
		RETURN[NEW[IdListNodeBody←[position, length, IdListEmptyProdProcs, NIL]]];
		END;


-- IdListnonEmptyProd

IdListnonEmptyProdProcs: PUBLIC IdListNodeProcs ←
	NEW[IdListNodeProcsBody ← [IdListnonEmptyProdRecordCedarTypesFrom, IdListnonEmptyProdRecordCedarTypes, IdListnonEmptyProdRecordMultipleBaseTypes, IdListnonEmptyProdFormTypeListEarly, IdListnonEmptyProdFormNameList, IdListnonEmptyProdCollectValueTypes, IdListnonEmptyProdCollectFunctionTypes, IdListnonEmptyProdCollectRightSideSymbols, IdListnonEmptyProdBaseDeclCode, IdListnonEmptyProdFormTypesCode, IdListnonEmptyProdProcFieldTypeCode, IdListnonEmptyProdFormProcsNamesCode, IdListnonEmptyProdFormRecFcnsDeclCode, IdListnonEmptyProdFormVarDeclCode, IdListnonEmptyProdFormLinkCallCode, IdListnonEmptyProdSyntaxFileCodes]];

BuildIdListnonEmptyProdNode: PUBLIC PROC[position: INT, length: INT, Identifier: IdentifierNode, IdList: IdListNode]
	RETURNS[IdListNode] =
		BEGIN
		data: IdListnonEmptyProdData ←
			NEW[IdListnonEmptyProdDataBody←[
			Identifier, IdList]];
		RETURN[NEW[IdListNodeBody←[position, length, IdListnonEmptyProdProcs, data]]];
		END;


-- RopeListOneProd

RopeListOneProdProcs: PUBLIC RopeListNodeProcs ←
	NEW[RopeListNodeProcsBody ← [RopeListOneProdCollectRightSideSymbols, RopeListOneProdSyntaxFileCodes, RopeListOneProdSpecialSyntaxTokenFileCode]];

BuildRopeListOneProdNode: PUBLIC PROC[position: INT, length: INT, Rope: RopeNode]
	RETURNS[RopeListNode] =
		BEGIN
		data: RopeListOneProdData ←
			NEW[RopeListOneProdDataBody←[
			Rope]];
		RETURN[NEW[RopeListNodeBody←[position, length, RopeListOneProdProcs, data]]];
		END;


-- RopeListManyProd

RopeListManyProdProcs: PUBLIC RopeListNodeProcs ←
	NEW[RopeListNodeProcsBody ← [RopeListManyProdCollectRightSideSymbols, RopeListManyProdSyntaxFileCodes, RopeListManyProdSpecialSyntaxTokenFileCode]];

BuildRopeListManyProdNode: PUBLIC PROC[position: INT, length: INT, RopeList: RopeListNode, Rope: RopeNode]
	RETURNS[RopeListNode] =
		BEGIN
		data: RopeListManyProdData ←
			NEW[RopeListManyProdDataBody←[
			RopeList, Rope]];
		RETURN[NEW[RopeListNodeBody←[position, length, RopeListManyProdProcs, data]]];
		END;

END..