DIRECTORY
	ThreeC4BaseDecl1Def,
	ThreeC4RecFcnDeclDef,
	Rope,
	ThreeC4BaseDecl2Def;

ThreeC4BasicAbTypesDef: CEDAR DEFINITIONS = 
BEGIN
OPEN ThreeC4BaseDecl1Def, ThreeC4RecFcnDeclDef, Rope, ThreeC4BaseDecl2Def;

--WholeFile

WholeFileNode: TYPE = REF WholeFileNodeBody;
WholeFileNodeBody: TYPE = RECORD[
	position: INT, length: INT,
	procs: WholeFileNodeProcs,
	data: REF ANY];

WholeFileNodeProcs: TYPE = REF WholeFileNodeProcsBody;
WholeFileNodeProcsBody: TYPE = RECORD[

	FormFileSeq: FormFileSeqProcType, 
	CollectValueTypes: CollectValueTypesProcType, 
	CollectFunctionTypes: CollectFunctionTypesProcType, 
	CollectRightSideSymbols: CollectRightSideSymbolsProcType, 
	FormLinkCallCode: FormLinkCallCodeProcType, 
	SyntaxFileCodes: SyntaxFileCodesProcType];


--ModuleItem

ModuleItemNode: TYPE = REF ModuleItemNodeBody;
ModuleItemNodeBody: TYPE = RECORD[
	position: INT, length: INT,
	procs: ModuleItemNodeProcs,
	data: REF ANY];

ModuleItemNodeProcs: TYPE = REF ModuleItemNodeProcsBody;
ModuleItemNodeProcsBody: TYPE = RECORD[

	CollectModuleValueTypes: CollectModuleValueTypesProcType, 
	CollectModuleFunctionTypes: CollectModuleFunctionTypesProcType, 
	CollectProductions: CollectProductionsProcType, 
	CollectRightSideSymbols: CollectRightSideSymbolsProcType, 
	DefFileCode: DefFileCodeProcType, 
	ImplFileCode: ImplFileCodeProcType, 
	LinkFileCode: LinkFileCodeProcType, 
	SyntaxFileCodes: SyntaxFileCodesProcType, 
	TestLinkPresent: TestLinkPresentProcType];


--CedarItems

CedarItemsNode: TYPE = REF CedarItemsNodeBody;
CedarItemsNodeBody: TYPE = RECORD[
	position: INT, length: INT,
	procs: CedarItemsNodeProcs,
	data: REF ANY];

CedarItemsNodeProcs: TYPE = REF CedarItemsNodeProcsBody;
CedarItemsNodeProcsBody: TYPE = RECORD[

	CollectModuleValueTypes: CollectModuleValueTypesProcType, 
	CollectModuleFunctionTypes: CollectModuleFunctionTypesProcType];


--BaseItems

BaseItemsNode: TYPE = REF BaseItemsNodeBody;
BaseItemsNodeBody: TYPE = RECORD[
	position: INT, length: INT,
	procs: BaseItemsNodeProcs,
	data: REF ANY];

BaseItemsNodeProcs: TYPE = REF BaseItemsNodeProcsBody;
BaseItemsNodeProcsBody: TYPE = RECORD[

	CollectModuleValueTypes: CollectModuleValueTypesProcType, 
	CollectModuleFunctionTypes: CollectModuleFunctionTypesProcType, 
	DefFileCode: DefFileCodeProcType, 
	ImplFileCode: ImplFileCodeProcType];


--AbGramItems

AbGramItemsNode: TYPE = REF AbGramItemsNodeBody;
AbGramItemsNodeBody: TYPE = RECORD[
	position: INT, length: INT,
	procs: AbGramItemsNodeProcs,
	data: REF ANY];

AbGramItemsNodeProcs: TYPE = REF AbGramItemsNodeProcsBody;
AbGramItemsNodeProcsBody: TYPE = RECORD[

	CollectModuleValueTypes: CollectModuleValueTypesProcType, 
	CollectModuleFunctionTypes: CollectModuleFunctionTypesProcType, 
	DefFileCode: DefFileCodeProcType, 
	ImplFileCode: ImplFileCodeProcType];


--CGramItems

CGramItemsNode: TYPE = REF CGramItemsNodeBody;
CGramItemsNodeBody: TYPE = RECORD[
	position: INT, length: INT,
	procs: CGramItemsNodeProcs,
	data: REF ANY];

CGramItemsNodeProcs: TYPE = REF CGramItemsNodeProcsBody;
CGramItemsNodeProcsBody: TYPE = RECORD[

	CollectProductions: CollectProductionsProcType, 
	CollectRightSideSymbols: CollectRightSideSymbolsProcType, 
	DefFileCode: DefFileCodeProcType, 
	ImplFileCode: ImplFileCodeProcType, 
	LinkFileCode: LinkFileCodeProcType, 
	SyntaxFileCodes: SyntaxFileCodesProcType, 
	TestLinkPresent: TestLinkPresentProcType];


--AbProductionFcnImpl

AbProductionFcnImplNode: TYPE = REF AbProductionFcnImplNodeBody;
AbProductionFcnImplNodeBody: TYPE = RECORD[
	position: INT, length: INT,
	procs: AbProductionFcnImplNodeProcs,
	data: REF ANY];

AbProductionFcnImplNodeProcs: TYPE = REF AbProductionFcnImplNodeProcsBody;
AbProductionFcnImplNodeProcsBody: TYPE = RECORD[

	ImplFileCode: ImplFileCodeProcType];


--ConcreteProduction

ConcreteProductionNode: TYPE = REF ConcreteProductionNodeBody;
ConcreteProductionNodeBody: TYPE = RECORD[
	position: INT, length: INT,
	procs: ConcreteProductionNodeProcs,
	data: REF ANY];

ConcreteProductionNodeProcs: TYPE = REF ConcreteProductionNodeProcsBody;
ConcreteProductionNodeProcsBody: TYPE = RECORD[

	CollectProductions: CollectProductionsProcType, 
	ImplFileCode: ImplFileCodeProcType, 
	LinkFileCode: LinkFileCodeProcType, 
	SyntaxFileCodes: SyntaxFileCodesProcType];


--IdList

IdListNode: TYPE = REF IdListNodeBody;
IdListNodeBody: TYPE = RECORD[
	position: INT, length: INT,
	procs: IdListNodeProcs,
	data: REF ANY];

IdListNodeProcs: TYPE = REF IdListNodeProcsBody;
IdListNodeProcsBody: TYPE = RECORD[

	RecordCedarTypesFrom: RecordCedarTypesFromProcType, 
	RecordCedarTypes: RecordCedarTypesProcType, 
	RecordMultipleBaseTypes: RecordMultipleBaseTypesProcType, 
	FormTypeListEarly: FormTypeListEarlyProcType, 
	FormNameList: FormNameListProcType, 
	CollectValueTypes: CollectValueTypesProcType, 
	CollectFunctionTypes: CollectFunctionTypesProcType, 
	CollectRightSideSymbols: CollectRightSideSymbolsProcType, 
	BaseDeclCode: BaseDeclCodeProcType, 
	FormTypesCode: FormTypesCodeProcType, 
	ProcFieldTypeCode: ProcFieldTypeCodeProcType, 
	FormProcsNamesCode: FormProcsNamesCodeProcType, 
	FormRecFcnsDeclCode: FormRecFcnsDeclCodeProcType, 
	FormVarDeclCode: FormVarDeclCodeProcType, 
	FormLinkCallCode: FormLinkCallCodeProcType, 
	SyntaxFileCodes: SyntaxFileCodesProcType];


--ModId

ModIdNode: TYPE = REF ModIdNodeBody;
ModIdNodeBody: TYPE = RECORD[
	position: INT, length: INT,
	procs: ModIdNodeProcs,
	data: REF ANY];

ModIdNodeProcs: TYPE = REF ModIdNodeProcsBody;
ModIdNodeProcsBody: TYPE = RECORD[

	FormName: FormNameProcType, 
	FormFirstId: FormFirstIdProcType, 
	FormType: FormTypeProcType, 
	FormValueInfo: FormValueInfoProcType, 
	FormExpCode: FormExpCodeProcType, 
	FormTypeUse: FormTypeUseProcType, 
	FormTypeEarly: FormTypeEarlyProcType];


--ModIdList

ModIdListNode: TYPE = REF ModIdListNodeBody;
ModIdListNodeBody: TYPE = RECORD[
	position: INT, length: INT,
	procs: ModIdListNodeProcs,
	data: REF ANY];

ModIdListNodeProcs: TYPE = REF ModIdListNodeProcsBody;
ModIdListNodeProcsBody: TYPE = RECORD[

	FormNameList: FormNameListProcType, 
	FormAbstRightSideContext: FormAbstRightSideContextProcType, 
	FormTypeUse: FormTypeUseProcType, 
	FormTypeListEarly: FormTypeListEarlyProcType, 
	FormTypeList: FormTypeListProcType, 
	ProdDataTypeDefCode: ProdDataTypeDefCodeProcType, 
	DataBodyFieldTypeCode: DataBodyFieldTypeCodeProcType, 
	ProdBuildDataRcdCode: ProdBuildDataRcdCodeProcType, 
	FormTypesCode: FormTypesCodeProcType];


--RopeList

RopeListNode: TYPE = REF RopeListNodeBody;
RopeListNodeBody: TYPE = RECORD[
	position: INT, length: INT,
	procs: RopeListNodeProcs,
	data: REF ANY];

RopeListNodeProcs: TYPE = REF RopeListNodeProcsBody;
RopeListNodeProcsBody: TYPE = RECORD[

	CollectRightSideSymbols: CollectRightSideSymbolsProcType, 
	SyntaxFileCodes: SyntaxFileCodesProcType, 
	SpecialSyntaxTokenFileCode: SpecialSyntaxTokenFileCodeProcType];


--DamageShareAssertions

DamageShareAssertionsNode: TYPE = REF DamageShareAssertionsNodeBody;
DamageShareAssertionsNodeBody: TYPE = RECORD[
	position: INT, length: INT,
	procs: DamageShareAssertionsNodeProcs,
	data: REF ANY];

DamageShareAssertionsNodeProcs: TYPE = REF DamageShareAssertionsNodeProcsBody;
DamageShareAssertionsNodeProcsBody: TYPE = RECORD[

	FormRecordOfDamageShareAssertion: FormRecordOfDamageShareAssertionProcType];

FindOrReadAndParseTree: PROC[ContextNode, NameNode] RETURNS[ContextNode, WholeFileNode];

FindParseTree: PROC[ContextNode, NameNode] RETURNS[WholeFileNode];

LookUpParseTree: PROC[LookupContextNode, NameNode] RETURNS[WholeFileNode];

RecordAbstractType: PROC[ContextNode, NameNode, ROPE, MesaCodeNode, IdListNode, NameListNode] RETURNS[ContextNode];

LookUpAbTypeRecFcnsIdList: PROC[LookupContextNode, NameNode] RETURNS[IdListNode];

END..