<> <> <> <> <> DIRECTORY IO USING [ STREAM ], PriorityQueue USING [ Ref, SortPred ], Rope USING [ ROPE ], SiroccoCGDef USING [ Generic, ItemKind, ValueKind ], RefTab USING [ Ref ], SymTab USING [ Ref ]; SiroccoPrivate: CEDAR DEFINITIONS ~ { ROPE: TYPE ~ Rope.ROPE; Version: READONLY ROPE; <> TypeGraph: TYPE ~ REF GraphRep; GraphRep: TYPE ~ RECORD [ context: CONTEXT, reftab: RefTab.Ref -- table of TypeGraphNode ]; CONTEXT: TYPE ~ REF ContextRep; ContextRep: TYPE ~ RECORD [ rib: RIB, scope: SCOPE ]; RIB: TYPE ~ SymTab.Ref; -- SCOPES keyed by id SCOPE: TYPE ~ REF ScopeRep; ScopeRep: TYPE ~ RECORD [ id: ROPE, pgm: CARD, version: CARD, items: SymTab.Ref, tables: TABLES -- this should die! ]; PQItem: TYPE ~ RECORD [ position: CARD, element: REF ]; PQFirst: PriorityQueue.SortPred; GraphTraversalState: TYPE ~ { unvisited, inprogress, completed }; ITEM: TYPE ~ REF ItemRep; ItemRep: TYPE ~ RECORD [ name: ROPE, position: CARD, kind: SiroccoCGDef.ItemKind, type: TypeGraphNode, value: AbstractValue, state: GraphTraversalState ]; TypeGraphNode: TYPE ~ REF; NodeRep: TYPE ~ RECORD [ kind: TGNKind _ generic, -- indirect => specifics will be a TypeGraphNode class: SiroccoCGDef.Generic _ unspec, subtype: TypeGraphNode _ NIL, specifics: REF _ NIL ]; TGNKind: TYPE ~ { indirect, generic, internal }; AbstractValue: TYPE ~ REF; AbstractValueObject: TYPE ~ RECORD [ kind: TGNKind _ generic, -- indirect => specifics will be a TypeGraphNode class: SiroccoCGDef.ValueKind _ null, bool: BOOL _ FALSE, card: CARD32 _ 0, string: ROPE _ NIL, tag: ROPE _ NIL, subtype: AbstractValue _ NIL, specifics: REF _ NIL ]; <> AquireState: SIGNAL RETURNS [Handle]; EndItAll: ERROR; <> DumpTypeGraph: PROC [graph: TypeGraph]; <> InterfaceItem: TYPE ~ RECORD [ name: ROPE, type: ROPE, constant: ROPE, functions: LIST OF ROPE, value: Constant ]; <> Constant: TYPE ~ REF; Type: TYPE ~ REF; <> <<>> <> <<>> <> <> <> <> <> CType: TYPE ~ REF CTypeBody; CTypeBody: TYPE ~ RECORD [ bound: CARD, children: CComponent, class: SiroccoCGDef.Generic ]; CComponent: TYPE ~ REF CComponentBody; CComponentBody: TYPE ~ RECORD [ name: ROPE, sibling: CComponent, type: ROPE, val: CARD ]; FunctionList: TYPE ~ LIST OF ROPE; Tree: TYPE ~ REF ANY; TABLES: TYPE ~ REF TablesBody; TablesBody: TYPE ~ RECORD [ condensedTypeTable: SymTab.Ref, directory: SymTab.Ref, errors: SymTab.Ref, functionTable: SymTab.Ref, globalTable: SymTab.Ref, index: PriorityQueue.Ref, localTable: SymTab.Ref, procedures: SymTab.Ref, typeTable: SymTab.Ref, unresolvedConstantTable: SymTab.Ref, unresolvedTypeTable: SymTab.Ref, workTable: SymTab.Ref ]; UnresolvedConstantTableEntry: TYPE ~ RECORD [ constant: Constant, type: Type ]; Handle: TYPE ~ REF Object; Object: TYPE ~ RECORD [ allTheTables: TABLES, defStream: IO.STREAM, defRope: ROPE, initStream: IO.STREAM, initfile: ROPE, programName: ROPE, programNo: NAT, programKey: ROPE, programKeyWD: ROPE, uniqueNo: NAT, uniqueName: ROPE, versionNo: NAT ]; <> <> Nest: PROC [in: ROPE, level: NAT] RETURNS [out: ROPE]; <> Sort: PROC [list: CComponent] RETURNS [comp: CComponent]; <> MakeUpName: PROC [base: ROPE, suffix: ROPE, tables: TABLES] RETURNS [madeUpName: ROPE]; MadeUpName: PROC [base: ROPE, suffix: ROPE] RETURNS [madeUpName: ROPE]; UnDo: PROC [in: ROPE, programKey: ROPE] RETURNS [key: ROPE]; <> UnDoable: PROC [in: ROPE, programKey: ROPE] RETURNS [out: ROPE, yes: BOOLEAN]; <> UMProcNameProc: TYPE ~ PROC [h: Handle, type: CType, typeName: ROPE] RETURNS [procName: ROPE]; <> GetUProcName: UMProcNameProc; GetMProcName: UMProcNameProc; GenerateUMProcs: PROC [h: Handle, s: IO.STREAM, level: NAT]; Marshal: PROC [h: Handle, s: IO.STREAM, varName: ROPE, type: CType, typeName: ROPE, getProcName: UMProcNameProc, useProc: BOOL, level: NAT]; UnMarshal: PROC [h: Handle, s: IO.STREAM, varName: ROPE, type: CType, typeName: ROPE, getProcName: UMProcNameProc, useProc: BOOL, level: NAT]; ConstExp: PROC [h: Handle, const: ROPE, type: CType, typeName: ROPE, level: NAT] RETURNS [constExp: ROPE, setup: LIST OF ROPE, runtime: BOOL]; TypeExp: PROC [h: Handle, type: CType, typeName: ROPE, level: NAT] RETURNS [typeExp: ROPE, objTypeDecls: LIST OF ROPE]; FileHeader: PROC [out: IO.STREAM, filename: ROPE]; <> Collapse: PROC; <> GenDefs: PROC; GenAuxDefs: PROC; GenAuxImpl: PROC; GenCImpl: PROC; GenSImpl: PROC; }.