DIRECTORY
	ThreeC4BaseDecl1Def,
	Rope;

ThreeC4BaseDecl2Def: CEDAR DEFINITIONS = 
BEGIN
OPEN ThreeC4BaseDecl1Def, Rope;
FcnDefGraphNode: TYPE = REF FcnDefGraphNodeBody;
FcnDefGraphNodeBody: TYPE;

BuildFcnBaseGraph: PROC[NameListNode, NameListNode] RETURNS[FcnDefGraphNode];

FakeCopyFcnBaseGraph: PROC[FcnDefGraphNode] RETURNS[FcnDefGraphNode];

RecordShareList: PROC[FcnDefGraphNode, NameListNode] RETURNS[FcnDefGraphNode];

RecordDamageList: PROC[FcnDefGraphNode, NameListNode] RETURNS[FcnDefGraphNode];

PrepareRecFcnDefGraph: PROC[FcnDefGraphNode] RETURNS[FcnDefGraphNode];

ContextNode: TYPE = REF ContextNodeBody;
ContextNodeBody: TYPE;

LockedContextNode: TYPE = REF LockedContextNodeBody;
LockedContextNodeBody: TYPE;

BuildEmptyContext: PROC RETURNS[ContextNode];

FakeCopyContextForConditional: PROC[ContextNode] RETURNS[ContextNode];

LockContext: PROC[ContextNode] RETURNS[LockedContextNode];

RecordGlobalTreeType: PROC[ContextNode, NameNode, MesaCodeNode] RETURNS[ContextNode];

RecordSimpleBaseType: PROC[ContextNode, NameNode, ROPE, MesaCodeNode] RETURNS[ContextNode];

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

RecordCedarType: PROC[ContextNode, NameNode, ROPE, MesaCodeNode] RETURNS[ContextNode];

RecordPreDefinedCedarType: PROC[ContextNode, NameNode, MesaCodeNode] RETURNS[ContextNode];

RecordBaseFunction: PROC[ContextNode, NameNode, ROPE, TypeListNode, TypeListNode, FcnDefGraphNode] RETURNS[ContextNode];

RecordBaseFcnDef: PROC[ContextNode, NameNode, ROPE, TypeListNode, TypeListNode, FcnDefGraphNode] RETURNS[ContextNode];

RecordRecFcnDef: PROC[ContextNode, NameNode, ROPE, TypeListNode, TypeListNode, FcnDefGraphNode] RETURNS[ContextNode];

RecordRopeToken: PROC[ContextNode, RopeNode] RETURNS[ContextNode];

RecordNonTerminalToken: PROC[ContextNode, NameNode, NameNode] RETURNS[ContextNode];

RecordProduction: PROC[ContextNode, NameNode, INT] RETURNS[ContextNode];

RecordGenericToken: PROC[ContextNode, NameNode, ROPE, MesaCodeNode] RETURNS[ContextNode];

RecordAbstractProduction: PROC[ContextNode, NameNode, ROPE, NameListNode, LockedContextNode] RETURNS[ContextNode];

RecordAbstRightSideSymbol: PROC[ContextNode, NameNode, NameNode] RETURNS[ContextNode];

RecordControlModule: PROC[ContextNode, ROPE] RETURNS[ContextNode];

FindType: PROC[ContextNode, NameNode] RETURNS[TypeNode];

LookupContextNode: TYPE = REF LookupContextNodeBody;
LookupContextNodeBody: TYPE;

FunctionCase: TYPE = {base, recursive};
TearDownGraphs: PROC[LookupContextNode] RETURNS[BOOLEAN];

BuildBasicLookupContext: PROC[ContextNode] RETURNS[LookupContextNode];

FakeCopyLookupContext: PROC[LookupContextNode] RETURNS[LookupContextNode];

PushProductionContext: PROC[LookupContextNode, LockedContextNode] RETURNS[LookupContextNode];

RecordVarSeq: PROC[LookupContextNode, NameListNode, TypeListNode] RETURNS[LookupContextNode];

PushLocalRSS: PROC[LookupContextNode, NameNode, TypeNode] RETURNS[LookupContextNode];

LookUpType: PROC[LookupContextNode, NameNode] RETURNS[TypeNode];

LookUpFunction: PROC[LookupContextNode, NameNode] RETURNS[FunctionCase, TypeListNode, TypeListNode];

LookUpRecFcnDef: PROC[LookupContextNode, NameNode] RETURNS[TypeListNode, TypeListNode];

LookUpFcnDefGraph: PROC[LookupContextNode, NameNode] RETURNS[FcnDefGraphNode];

LookUpAbProduction: PROC[LookupContextNode, NameNode] RETURNS[NameListNode, LockedContextNode];

LookUpSimpleValue: PROC[LookupContextNode, IdentifierNode] RETURNS[TypeNode, MesaCodeNode];

LookUpValue2: PROC[LookupContextNode, IdentifierNode, IdentifierNode] RETURNS[TypeNode, MesaCodeNode];

EqualFunCase: PROC[FunctionCase, FunctionCase] RETURNS[BOOLEAN];

CheckLegalRopeToken: PROC[LookupContextNode, RopeNode] RETURNS[BOOLEAN];

LookUpGrammarSymbol: PROC[LookupContextNode, NameNode] RETURNS[TypeNode];

LookUpProduction: PROC[LookupContextNode, NameNode] RETURNS[INT];

LookUpAbstractProduction: PROC[LookupContextNode, NameNode] RETURNS[TypeNode, TypeListNode];

LookUpRightSideSymbol: PROC[LookupContextNode, NameNode] RETURNS[TypeNode];

EmptyRSContext: PROC[LookupContextNode] RETURNS[BOOLEAN];

LookUpEnumTypeVal: PROC[LookupContextNode, NameNode, NameNode] RETURNS[TypeNode, MesaCodeNode];

UsageNode: TYPE = REF UsageNodeBody;
UsageNodeBody: TYPE;

Use: TYPE = {ref, import, export};
BuildEmptyUsage: PROC RETURNS[UsageNode];

RecordTypeUse: PROC[UsageNode, TypeNode] RETURNS[UsageNode];

RecordTypesUse: PROC[UsageNode, TypeListNode] RETURNS[UsageNode];

RecordFcnUse: PROC[UsageNode, NameNode, Use, LookupContextNode] RETURNS[UsageNode];

RecordAbstProdUse: PROC[UsageNode, NameNode, Use, LookupContextNode] RETURNS[UsageNode];

RecordGenericTokenUse: PROC[UsageNode, NameNode, Use, LookupContextNode] RETURNS[UsageNode];

RecordLinkExport: PROC[UsageNode, LookupContextNode] RETURNS[UsageNode];

RecordDefFileUse: PROC[UsageNode, ROPE, Use] RETURNS[UsageNode];

BuildImplUseCode: PROC[UsageNode] RETURNS[MesaCodeNode, MesaCodeNode, MesaCodeNode, MesaCodeNode];

BuildDefUseCode: PROC[UsageNode, ROPE] RETURNS[MesaCodeNode, MesaCodeNode];

FakeUsageCopy: PROC[UsageNode] RETURNS[UsageNode];

BPrintError: PROC[BOOLEAN, ROPE] RETURNS[BOOLEAN];

BPrintBadName: PROC[BOOLEAN, NameNode, ROPE] RETURNS[BOOLEAN];

BAbort: PROC[BOOLEAN] RETURNS[BOOLEAN];

True: PROC RETURNS[BOOLEAN];

False: PROC RETURNS[BOOLEAN];

MarkErrors: PROC RETURNS[BOOLEAN];

AreErrors: PROC RETURNS[BOOLEAN];

END..