PWCLCoreFlatExtras.mesa
Mike Spreitzer March 5, 1987 4:29:48 pm PST
Last tweaked by Mike Spreitzer on February 16, 1988 1:20:31 pm PST
DIRECTORY Core, CoreFlat, CoreOps, IO;
PWCLCoreFlatExtras: CEDAR DEFINITIONS = {OPEN CoreFlat, CO: CoreOps;
Abstract Cut Sets
Cut: TYPE = RECORD [
MembershipTester: CutMembershipTester,
data: REF ANYNIL];
CutMembershipTester: TYPE = PROC [cutData: REF ANY, root: CellType, cellType: CellType, flatCell: FlatCellTypeRec, instance: CellInstance] RETURNS [BOOL];
Includes: PROC [cut: Cut, root: CellType, cellType: CellType, flatCell: FlatCellTypeRec, instance: CellInstance] RETURNS [BOOL]
= INLINE {RETURN [cut.MembershipTester[cut.data, root, cellType, flatCell, instance]]};
SetCut: PROC [CutSet] RETURNS [Cut];
leaves: Cut;
Flat printing
FlatPrint: PROC [
root: CellType,
filter: Filter ← NIL,
to: IO.STREAM,
Annotator: PROC [subject: Descendant, to: IO.STREAM] ← NIL,
leaves: Cut
];
Filter: TYPE ~ PROC [cellType: CellType, flatCell: FlatCellTypeRec, instance: CellInstance, bindings: Bindings] RETURNS [BOOL];
PrintNeighborhood: PROC [
root: CellType,
of: DescendantListList,
to: IO.STREAM,
Annotator: PROC [subject: Descendant, to: IO.STREAM] ← NIL,
leaves: Cut
];
MakeNeighborhoodFilter: PROC [of: DescendantListList, Consume: PROC [Filter]];
DescendantListList: TYPE = LIST OF DescendantList;
DescendantList: TYPE = LIST OF Descendant;
Descendant: TYPE = REF ANY--actually UNION [FlatWire, FlatCellType, REF InstancePath]--;
Helpful things for CoreFlat
LowerInstancePath: PROC [path, by: InstancePath] RETURNS [lower: InstancePath];
Concatenates path after by.
LowerFlatCell: PROC [fc: FlatCellTypeRec, by: FlatCellTypeRec] RETURNS [lower: FlatCellTypeRec];
LowerFlatWire: PROC [fw: FlatWireRec, by: FlatCellTypeRec] RETURNS [lower: FlatWireRec];
}.