[result, props] ← ExtractTopObject[object, design, mode !
PipalSinix.FusionPropMismatch => {
cellDesign: PipalUI.Design ← PipalUI.Draw[object];
TerminalIO.PutF["*** Extraction failed in cell.\n"];
IF prop=CoreOps.nameProp
THEN TerminalIO.PutF["*** Two wires that do not have the same name are fused: %g and %g.\n", IO.rope[NARROW [value1]], IO.rope[NARROW [value2]]]
ELSE TerminalIO.PutF["*** Two wires that do not have the same %g property value are fused: %g and %g.\n", IO.atom[prop], IO.refAny[value1], IO.refAny[value2]];
GOTO Failed;
};
PipalSinix.FusionStructureMismatch => {
cellDesign: PipalUI.Design ← PipalUI.Draw[object];
TerminalIO.PutF["*** Extraction failed in cell.\n *** Two wires with mismatching structures are fused: "];
CoreOps.Print[wire1, TerminalIO.TOS[]];
TerminalIO.PutF["\nand: "];
CoreOps.Print[wire2, TerminalIO.TOS[]];
TerminalIO.PutF["\n.\n"];
HighLightWireGeometry[cellDesign, mode, LIST [wire1, wire2]];
GOTO Failed;
};
PipalSinix.StructureMismatch => {
cellDesign: PipalUI.Design ← PipalUI.Draw[object];
TerminalIO.PutF["*** Extraction failed in cell.\n Actual: "];
CoreOps.Print[actual, TerminalIO.TOS[]];
TerminalIO.PutF["\nand subPublic: "];
CoreOps.Print[subPublic, TerminalIO.TOS[]];
TerminalIO.PutF["\nhave mismatching structures for the index %g.\n", IO.int[index]];
HighLightWireGeometry[cellDesign, mode, LIST [actual]];
GOTO Failed;
};
PipalSinix.FusionByNameMismatch => {
cellDesign: PipalUI.Design ← PipalUI.Draw[object];
TerminalIO.PutF["*** Extraction failed in cell.\nFusion by name problem: %g.\n", IO.rope[msg]];
HighLightWireGeometry[cellDesign, mode, LIST [wire]];
GOTO Failed;
};
PipalSinix.StructuralLoop => {
cellDesign: PipalUI.Design ← PipalUI.Draw[object];
TerminalIO.PutF["*** Extraction failed in cell.\nProbably a structural loop in wire: %g.\n", IO.rope[CoreOps.GetShortWireName[wire]]];
HighLightWireGeometry[cellDesign, mode, LIST [wire]]; -- be careful not to be recursive!
GOTO Failed;
};
];