-- TypeGraphDef.mesa: December 1, 1985 3:22:55 pm PST
-- Sturgis, January 3, 1986 2:04:03 pm PST
DIRECTORY
KipperMain1Def USING[NameNode, TypeContextNode, TypeNode],
Rope USING[ROPE];
TypeGraphDef: CEDAR DEFINITIONS =
BEGIN OPEN KipperMain1Def;
-- having to do with name nodes
GetNameNodeInfo: PROC[NameNode] RETURNS[text: Rope.ROPE, position: INT];
BuildRopeName: PROC[text: Rope.ROPE] RETURNS[NameNode];
EqualNames: PROC[NameNode, NameNode] RETURNS[BOOLEAN];
-- having to do with contexts
GetNamedType: PROC[TypeContextNode, NameNode] RETURNS[TypeNode];
GetDefFileOfNamedType: PROC[TypeContextNode, NameNode] RETURNS[NameNode];
-- (NIL if a predefined Cedar type)
GenRootTypeNames: PROC[TypeContextNode, PROC[NameNode]];
GenDefFileNames: PROC[TypeContextNode, PROC[NameNode]];
GenImplFileNames: PROC[TypeContextNode, PROC[NameNode]];
GenNamedTypes: PROC[TypeContextNode, PROC[TypeNode]];
-- only generates a node once, even if it occured in form "A, B: TYPE = ..."
-- having to do with annonymous type nodes
TypeNodeCase: TYPE = {naming, enumerated, record, ref, any, list, seq, builtIn};
GetTypeNodeCase: PROC[TypeNode] RETURNS[TypeNodeCase];
GetTypeNodeName: PROC[node: TypeNode] RETURNS[NameNode];
GetTypeNodeTypeDefFile: PROC[node: TypeNode] RETURNS[NameNode];
GetTypeNodeFcnDefFile: PROC[node: TypeNode] RETURNS[NameNode];
GetTypeNodeFcnImplFile: PROC[node: TypeNode] RETURNS[NameNode];
GenAllNamesForType: PROC[node: TypeNode, for: PROC[NameNode]];
-- for specific case type nodes
GetNamingNodeNamedNode: PROC[TypeNode] RETURNS[TypeNode];
GetNamingNodePrimaryName: PROC[TypeNode] RETURNS[NameNode];
GenNamingNodeRightNames: PROC[TypeNode, PROC[NameNode]];
GenNamingNodeLeftNames: PROC[TypeNode, PROC[NameNode]];
GetEnumeratedSize: PROC[TypeNode] RETURNS[INT]; -- n elements
GenEnumeratedElements: PROC[TypeNode, PROC[NameNode]];
RecordCase: TYPE = {normal, seq};
GenRecordFields: PROC[TypeNode, PROC[NameNode, TypeNode, --last-- BOOLEAN]];
GetRecordCase: PROC[TypeNode] RETURNS[RecordCase];
GetSeqFieldType: PROC[TypeNode] RETURNS[TypeNode];
GetRefTypeTarget: PROC[TypeNode] RETURNS[TypeNode];
GetListTypeValue: PROC[TypeNode] RETURNS[TypeNode];
GetSeqTypeCountName: PROC[type: TypeNode] RETURNS[NameNode];
GetSeqTypeCountType: PROC[type: TypeNode] RETURNS[TypeNode];
GetSeqTypeFieldType: PROC[type: TypeNode] RETURNS[TypeNode];
BuiltInTypeCase: TYPE = {Cardinal, Int, Boolean, Rope, Any, Bool, Char, Character, Integer, Nat, Real, Word, Card};
GetBuiltInTypeName: PROC[TypeNode] RETURNS[NameNode];
GetBuiltInTypeCase: PROC[TypeNode] RETURNS[BuiltInTypeCase];
-- the hash table stuff
HashTable: TYPE = REF HashTableBody;
HashTableBody: TYPE;
FindEntry: PROC[table: HashTable, name: NameNode] RETURNS[REF ANY];
FindExistingEntry: PROC[table: HashTable, name: NameNode] RETURNS[REF ANY];
MakeEntry: PROC[table: HashTable, name: NameNode, info: REF ANY];
CreateHashTable: PROC[size: CARDINAL] RETURNS[HashTable];
EnumerateHashTable: PROC[table: HashTable, for: PROC[REF ANY, NameNode]];
END..