Corrected an error in the hierarchical GDS processing of mask hints,

which failed to translate hint coordinates from subcells into the
composite cell, resulting in hierarchical GDS errors.
This commit is contained in:
Tim Edwards 2022-01-19 15:37:45 -05:00
parent c8c8f8b362
commit 10c5ba99c9
2 changed files with 44 additions and 37 deletions

View File

@ -1 +1 @@
8.3.257
8.3.258

View File

@ -203,6 +203,14 @@ cifHierCleanup()
SigEnableInterrupts();
}
/* Structure used by cifFlatMaskHints, below */
typedef struct _maskHintsData
{
Transform *mh_trans;
CellDef *mh_def;
} MaskHintsData;
/*
* ----------------------------------------------------------------------------
*
@ -222,6 +230,7 @@ cifHierCleanup()
* ----------------------------------------------------------------------------
*/
/* DEPRECATED */
int
cifMaskHints(name, value, targetDef)
char *name;
@ -249,38 +258,6 @@ cifMaskHints(name, value, targetDef)
return 0;
}
/*
* ----------------------------------------------------------------------------
*
* CIFCopyMaskHints --
*
* Callback function to copy mask hints from one cell into another.
*
* Results:
* None.
*
* Side effects:
* May modify properties in the target cell.
*
* ----------------------------------------------------------------------------
*/
void
CIFCopyMaskHints(sourceDef, targetDef)
CellDef *sourceDef;
CellDef *targetDef;
{
DBPropEnum(sourceDef, cifMaskHints, targetDef);
}
/* Structure used by cifFlatMaskHints, below */
typedef struct _maskHintsData
{
Transform *mh_trans;
CellDef *mh_def;
} MaskHintsData;
/*
* ----------------------------------------------------------------------------
*
@ -359,6 +336,36 @@ cifFlatMaskHints(name, value, mhd)
return 0;
}
/*
* ----------------------------------------------------------------------------
*
* CIFCopyMaskHints --
*
* Callback function to copy mask hints from one cell into another.
*
* Results:
* None.
*
* Side effects:
* May modify properties in the target cell.
*
* ----------------------------------------------------------------------------
*/
void
CIFCopyMaskHints(scx, targetDef)
SearchContext *scx;
CellDef *targetDef;
{
MaskHintsData mhd;
CellDef *sourceDef = scx->scx_use->cu_def;
mhd.mh_trans = &scx->scx_trans;
mhd.mh_def = targetDef;
DBPropEnum(sourceDef, cifFlatMaskHints, &mhd);
}
/*
* ----------------------------------------------------------------------------
*
@ -509,7 +516,7 @@ cifHierCellFunc(scx)
cifHierCopyFunc, (ClientData) CIFComponentDef);
/* Flatten mask hints in the area of interest */
CIFCopyMaskHints(scx->scx_use->cu_def, CIFComponentDef);
CIFCopyMaskHints(scx, CIFComponentDef);
DBTreeSrCells(&newscx, 0, cifHierCopyMaskHints,
(ClientData)CIFComponentDef);
@ -832,7 +839,7 @@ CIFGenSubcells(def, area, output)
(void) DBTreeSrTiles(&scx, &CIFCurStyle->cs_yankLayers, 0,
cifHierCopyFunc, (ClientData) CIFTotalDef);
/* Flatten mask hints in the area of interest */
CIFCopyMaskHints(def, CIFTotalDef);
CIFCopyMaskHints(&scx, CIFTotalDef);
DBTreeSrCells(&scx, 0, cifHierCopyMaskHints,
(ClientData)CIFTotalDef);
@ -1007,14 +1014,14 @@ cifHierElementFunc(use, transform, x, y, checkArea)
scx.scx_use = use;
(void) DBTreeSrTiles(&scx, &CIFCurStyle->cs_yankLayers, 0,
cifHierCopyFunc, (ClientData) CIFTotalDef);
CIFCopyMaskHints(use->cu_def, CIFTotalDef);
CIFCopyMaskHints(&scx, CIFTotalDef);
DBTreeSrCells(&scx, 0, cifHierCopyMaskHints,
(ClientData)CIFTotalDef);
DBCellClearDef(CIFComponentDef);
(void) DBTreeSrTiles(&scx, &CIFCurStyle->cs_yankLayers, 0,
cifHierCopyFunc, (ClientData) CIFComponentDef);
CIFCopyMaskHints(use->cu_def, CIFComponentDef);
CIFCopyMaskHints(&scx, CIFComponentDef);
DBTreeSrCells(&scx, 0, cifHierCopyMaskHints,
(ClientData)CIFComponentDef);