DIRECTORY OrderedSymbolTableRef, RoseTypes; RoseCreate: CEDAR DEFINITIONS = BEGIN OPEN RoseTypes; InterfaceMismatch: ERROR [cell: Cell, index: CARDINAL, expected, got: NodeType]; CellTestList: TYPE = LIST OF CellTestRep; RegisterCellType: PROC [ incrementally: BOOL _ FALSE, name: ROPE, expandProc: ExpandProc _ NIL, ioCreator: IOCreator _ NIL, driveCreator: DriveCreator _ NIL, initializer: Initializer _ NIL, evals: EvalProcs _ [], tests: CellTestList _ NIL, ports: Ports, typeData: REF ANY _ NIL, other: Assertions _ NIL ] RETURNS [type: CellType]; GetCellType: PROC [name: ROPE] RETURNS [type: CellType]; CreateSim: PROC [steady: BOOL] RETURNS [sim: Simulation]; CreateTopCell: PROC [instanceName, typeName: ROPE, decider: ExpandDeciderClosure, sim: Simulation]; ExpandDeciderClosure: TYPE = REF ExpandDeciderClosureRep; ExpandDeciderClosureRep: TYPE = RECORD [ Decide: ExpandDecider, otherData: REF ANY]; ExpandDecider: TYPE = PROC [cell: Cell, otherData: REF ANY] RETURNS [ExpandDecision]; Possible: PROC [cell: Cell, whatToDo: ExpandDecision] RETURNS [possible: BOOLEAN]; PickInOrder: PROC [--earlier=better--ExpandDecisionList] RETURNS [ExpandDeciderClosure]; ExpandDecisionList: TYPE = LIST OF ExpandDecision; expandFirst: ExpandDeciderClosure --= PickInOrder[LIST[Expand, Leaf]]--; leafFirst: ExpandDeciderClosure --= PickInOrder[LIST[Leaf, Expand]]--; ByDepth: PROC [shallow: ExpandDeciderClosure, boundary: INT, deep: ExpandDeciderClosure] RETURNS [ExpandDeciderClosure]; CreateTest: PROC [rootName, typeName, testName: ROPE, decider: ExpandDeciderClosure, sim: Simulation, dual: BOOL _ FALSE]; SetTest: PROC [test: CellTest, of: CellType, mayOverwriteOld: BOOL _ FALSE] RETURNS [old: CellTest]; GetTest: PROC [name: ROPE, from: CellType] RETURNS [CellTest]; WrapTop: PROC [rootName, typeName: ROPE, decider: ExpandDeciderClosure, clocks: ROPE _ NIL, sim: Simulation]; PortsFromROPE: PROC [asRope: ROPE] RETURNS [ports: Ports]; PortsFromFile: PROC [fileName: ROPE] RETURNS [ports: Ports]; PortsFromStream: PROC [stream: STREAM] RETURNS [ports: Ports]; AssertionsFromFile: PROC [fileName: ROPE] RETURNS [Assertions]; GetOtherss: PROC [fileName: ROPE] RETURNS [SymbolTable]; GetOthers: PROC [otherss: SymbolTable, cellTypeName: ROPE] RETURNS [SymbolTable]; GetOther: PROC [others: SymbolTable, partName: ROPE] RETURNS [Assertions]; DecideFromFile: PROC [fileName: ROPE] RETURNS [dff: ExpandDeciderClosure]; LookupCell: PROC [ path: LIST OF REF ANY --ROPEs or REF TEXTs--, from: Cell _ NIL --NIL means first name names root--] RETURNS [cell: Cell]; LookupNode: PROC [ path: LIST OF REF ANY, from: Cell _ NIL] RETURNS [node: Node]; LookupCellNode: PROC [cell: Cell, name: ROPE] RETURNS [node: Node]; LongNodeName: PROC [n: Node, relativeTo: Cell _ NIL] RETURNS [name: ROPE]; LongCellName: PROC [c: Cell, relativeTo: Cell _ NIL] RETURNS [name: ROPE]; LongPortName: PROC [c: REF ANY--UNION[CellType, Cell]--, pi: PortIndex _ nilPortIndex, epi: EffectivePortIndex _ nilEffectivePortIndex] RETURNS [name: ROPE]; LowestCommonAncestor: PROC [c1, c2: Cell] RETURNS [lca: Cell]; FillInInterfaceNodes: PROC [cell: Cell, interfaceNodes: ROPE]; EnumerateConnections: PROC [asRope: ROPE, to: PROC [key: Key, nodeName: ROPE]]; Key: TYPE = RECORD [variant: SELECT kind: * FROM position => [index: NAT], keyword => [name: ROPE], ENDCASE]; CompareRopes, CompareNodes, CompareComponents: OrderedSymbolTableRef.CompareProc; EnsureEnvironment: PROC [in: Cell, forType: CellType, to: ExpansionReceiver]; EqualInterfaces: PROC [a, b: Ports] RETURNS [structurally, fully: BOOL]; roots: SymbolTable; END. |[Indigo]r>Rosemary.df=>RoseCreate.Mesa Last Edited by: Spreitzer, May 16, 1985 4:53:30 pm PDT Last Edited by: Gasbarro, August 16, 1984 4:03:20 pm PDT Identification: Structure: Behavior: Other: IF NOT incrementally, THEN this call is specifying all that is known about this cell type. IF incrementally, THEN this call adds to/changes what is previously known about this cell type. steady indicates whether this is for working on the steady-state, or initialization. interfaceNodes must be empty at the top. Uses shallow when depth <= boundary, deep when depth > boundary. Depth of root is 0. If dual, make two tester&testee pairs controlled by the same instructions. Given a type with a non-empty interface, this will create (if necessary) and instantiate a type, with an empty interface, whose ExpandProc instantiates the given type, and the nodes it needs. The instance name used for the component is the type name with its first character lowercased. If clocks # NIL, a clock generator will also be instantiated, with its outputs connected to the nodes named in clocks. XPhobicize: PROC [n: Node] RETURNS [m: Node-- = n --]; Κy– "cedar" style˜JšœΟmœ™0J™6J™8J˜IcodešΟk œ"˜+K˜KšΠbx œžœž œ˜K˜Kšžœžœ ˜K˜šΟbœžœ ˜%Kšœžœ˜Kšœ˜—K˜Kšœžœžœžœ ˜)K˜šΟnœž˜šœ˜Kšœžœžœ˜™Kšœžœ˜ —™ Kšœžœ˜—™ Kšœžœ˜Kšœžœ˜!Kšœžœ˜Kšœ˜Kšœžœ˜—™Kšœ ˜ Kšœ žœžœžœ˜Kšœž˜—Kšœ˜—Kšžœ˜KšœZ™ZKšœ_™_—K˜Kš‘ œžœžœžœ˜8K˜š‘ œžœ žœžœ˜9J™T—K˜š‘ œžœžœ2˜cJ™(K˜Kšœžœžœ˜9šœžœžœ˜(Kšœ"žœžœ˜+—K˜Kš ‘ œžœžœžœžœžœ˜UK˜Kš‘œžœ(žœ žœ˜RK˜š‘ œžœΟcœžœ˜XKšœžœžœžœ˜2—Kšœ"’%œ˜HKšœ ’%œ˜FK˜š‘œžœ+žœžœ˜xKšœ@™@K™——K˜š ‘ œžœ žœ8žœžœ˜zK™J—K˜Kš ‘œžœ1žœžœžœ˜dK˜Kš‘œžœžœžœ ˜>K˜š ‘œžœžœ)žœžœ˜mK™——K˜Kš‘ œžœ žœ ’ œ™6K˜Kš‘ œžœ žœžœ˜:Kš‘ œžœ žœžœ˜K˜Kš‘œžœ žœžœ˜?K˜Kš‘ œžœ žœžœ˜8Kš‘ œžœ&žœžœ˜QKš‘œžœ!žœžœ˜JK˜Kš‘œžœ žœžœ˜JK˜š‘ œžœ˜Kš œžœžœžœžœ’œ˜-Kšœ žœ’#œ˜5Kšžœ˜—K˜š‘ œžœ˜Kš œžœžœžœžœ˜Kšœ žœ˜Kšžœ˜—K˜Kš‘œžœžœžœ˜CK˜Kš ‘ œžœžœžœžœ˜JKš ‘ œžœžœžœžœ˜JKš ‘ œžœžœž’œQžœžœ˜K˜Kš‘œžœžœ ˜>K˜Kš‘œžœžœ˜>K˜š ‘œžœ žœžœžœ˜Ošœžœžœ žœ ž˜0Kšœžœ˜Kšœžœ˜Kšžœ˜ ——K˜KšœQ˜QK˜Kš‘œžœ6˜MK˜Kš‘œžœžœžœ˜HK˜Kšœ˜K˜Kšžœ˜—…—*