LichenOps:
CEDAR
DEFINITIONS =
BEGIN OPEN LichenDataStructure;
NotNormal: ERROR [msg: ROPE];
NotComparable: ERROR [msg: ROPE];
Source: TYPE = RECORD [stream: IO.STREAM ← NIL, name: ROPE ← NIL];
AssertionOp: TYPE = {ignore, report, check, establish};
MerelyCheckableAssertionOp: TYPE = AssertionOp [ignore .. check];
FailableAssertionOp: TYPE = AssertionOp [report .. check];
AssertionFamily: TYPE = {normal, comparable};
RopeListIncludes: PROC [rl: RopeList, r: ROPE] RETURNS [found: BOOL];
FindPort: PROC [ports: PortS, name: ROPE] RETURNS [portIndex: NAT];
notFound: NAT = LAST[NAT];
Lookup: PROC [st: SymbolTable, key: ROPE] RETURNS [val: REF ANY];
AntiAlias: PROC [ra: REF ANY] RETURNS [val: REF ANY];
GlobalPortName: PROC [ct: CellType, portIndex: PortIndex] RETURNS [r: ROPE];
GlobalCellTypeName: PROC [ct: CellType] RETURNS [r: ROPE];
GlobalVertexName: PROC [v: Vertex] RETURNS [r: ROPE];
GlobalName:
PROC [ra:
REF
ANY, soFar: Naming ← [
NIL,
NIL]]
RETURNS [
ROPE];
Naming: TYPE = RECORD [first: ROPE, designed, unknown, progged: RopeList ← NIL];
ToVertex: PROC [context, ra: REF ANY] RETURNS [v: Vertex];
KeepAll: PROC [REF ANY] RETURNS [BOOL];
Warn: PROC [source: Source, format: ROPE, v1, v2, v3, v4, v5: IO.Value ← [null[]]];
Err: PROC [source: Source, format: ROPE, v1, v2, v3, v4, v5: IO.Value ← [null[]]];
Log: PROC [format: ROPE, v1, v2, v3, v4, v5: IO.Value ← [null[]]];
Fail: PROC [af: AssertionFamily, ao: FailableAssertionOp, format: ROPE, v1, v2, v3, v4, v5: IO.Value ← [null[]]];
FlushLog: PROC;
WriteAll: PROC [when: ROPE, a, b: CellType, colorTable: ColorTable];
EnsurePorts: PROC [CellType];
EnsureParts: PROC [CellType];
ExpansionKnown:
PROC [CellType]
RETURNS [
BOOL];
Ask only after ensuring parts.
GetInternalStyle:
PROC [CellType]
RETURNS [InternalStyle];
InternalStyle: TYPE = {graph, array};
NoteChange: PROC [CellType];
CheckType: PROC [ct: CellType, norm: AssertionOp, comparable: MerelyCheckableAssertionOp, ignoreInstances: BOOL ← FALSE];
CheckPerType:
PROC [key, val:
REF
ANY]
RETURNS [quit:
BOOL];
key is the CellType.
val is LIST[norm, comparable, ignoreInstances].
CheckParentType: PROC [key, val: REF ANY] RETURNS [quit: BOOL];
AddCellType: PROC [ct: CellType];
AddVertex: PROC [v: Vertex];
DeleteVertex: PROC [v: Vertex];
Connect: PROC [cv, nv: Vertex, portIndex: PortIndex];
RemoveEdge: PROC [Edge];
AddWorld: PROC [ct: CellType];
IsMirror: PROC [v: Vertex] RETURNS [isMirror: BOOL];
UnlinkInstance: PROC [v: Vertex];
LinkInstance: PROC [v: Vertex];
MergeNets: PROC [net1, net2: Vertex] RETURNS [merged, doomed: Vertex];
NameSee: TYPE = RECORD [net, cell: BOOL];
CompareGraphs: PROC [a, b: CellType, nameSee: NameSee] RETURNS [equiv: BOOL];
END.