Core.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Barth, October 2, 1985 9:34:39 am PDT
Bertrand Serlet November 12, 1985 12:14:22 pm PST
Spreitzer, September 9, 1985 11:01:46 pm PDT
DIRECTORY
IO USING [STREAM],
Rope USING [ROPE];
Core: CEDAR DEFINITIONS = BEGIN
Theory
This interface defines the basic data structures for the Core design automation system. It is actually a general decomposition facility that breaks designs down into cells which are then bound together.
Common Types
ROPE: TYPE = Rope.ROPE;
STREAM: TYPE = IO.STREAM;
Properties: TYPE = REF PropertyRec;
PropertyRec: TYPE;
Wires
Wire: TYPE = REF WireRec;
WireRec: TYPE = RECORD [
elements: WireSequence ← NIL,
properties: Properties ← NIL];
WireSequence: TYPE = REF WireSequenceRec;
WireSequenceRec: TYPE = RECORD [c: SEQUENCE size: NAT OF Wire];
wire.elements`NIL (and wire.elements.size=0 is legal).
Cell Classes
CellClass: TYPE = REF CellClassRec;
CellClassRec: TYPE = RECORD [
name: ROPE,
recast: RecastProc ← NIL,
properties: Properties ← NIL];
A cell class must have recast (except recordCellClass and primitive classes).
RecastProc: TYPE = PROC [me: CellType] RETURNS [new: CellType];
Returns a new cell type with the same structure as me, expressed in a more familiar way.
A recast proc may or may not return a unique copy of the recast; see CoreOps for a procedure that guarantees uniqueness of result.
Cell Types
CellType: TYPE = REF CellTypeRec;
CellTypeRec: TYPE = RECORD [
class: CellClass,
public: WireSequence,
data: REF ANYNIL, 
properties: Properties ← NIL];
CellTypes may not share any part of a public wire.
END.