Merge branch 'master' into magic-8.2

This commit is contained in:
Tim Edwards 2019-08-03 03:00:04 -04:00
commit 528863f378
4 changed files with 35 additions and 4 deletions

View File

@ -1452,7 +1452,11 @@ CmdIdentify(w, cmd)
return;
}
if (CmdIllegalChars(cmd->tx_argv[1], "[],/", "Cell use id"))
/* NOTE: Relaxing the definition of illegal characters in cell use IDs */
/* by allowing brackets. Possibly the list can be reduced further. */
/* if (CmdIllegalChars(cmd->tx_argv[1], "[],/", "Cell use id")) */
if (CmdIllegalChars(cmd->tx_argv[1], ",/", "Cell use id"))
return;
if (SelEnumCells(FALSE, (int *) NULL, (SearchContext *) NULL,

View File

@ -619,6 +619,9 @@ done:
}
}
}
/* Update timestamp flags */
DBFlagMismatches(cellDef);
cellDef->cd_timestamp = cellStamp;
if (cellStamp == 0)
{
@ -869,6 +872,8 @@ DBReadBackup(name)
name);
return FALSE;
}
/* Update timestamp flags from dbCellReadDef() */
DBFlagMismatches();
}
else
{

View File

@ -270,6 +270,16 @@ dbStampFunc(cellDef)
* processing. When DBFixMismatch is called, it will notify
* the design-rule checker to recheck both wrongArea, and
* the cell's eventual correct area.
*
* This routine has been modified from a poor implementation. Previously
* the parent def of all uses of the cell being checked would be marked
* for a stamp mismatch check. However, when reading a cell with large
* numbers of instances, the list of instances would be parsed for every
* instance added, leading to an O(N^2) computation. Routine DBStampMismatch()
* has been broken into two parts. DBStampMismatch() only records the
* area to be checked. DBFlagMismatches() looks at the parents of each
* celldef only once, after all instances have been read.
*
* ----------------------------------------------------------------------------
*/
@ -281,16 +291,27 @@ DBStampMismatch(cellDef, wrongArea)
*/
{
Mismatch *mm;
CellUse *parentUse;
mm = (Mismatch *) mallocMagic((unsigned) (sizeof (Mismatch)));
mm->mm_cellDef = cellDef;
mm->mm_oldArea = *wrongArea;
mm->mm_next = mismatch;
mismatch = mm;
}
for (parentUse = cellDef->cd_parents; parentUse != NULL;
parentUse = parentUse->cu_nextuse)
/*
* ----------------------------------------------------------------------------
* ----------------------------------------------------------------------------
*/
void
DBFlagMismatches(checkDef)
CellDef *checkDef;
{
CellUse *parentUse;
for (parentUse = checkDef->cd_parents; parentUse != NULL;
parentUse = parentUse->cu_nextuse)
{
if (parentUse->cu_parent == NULL) continue;
parentUse->cu_parent->cd_flags |= CDSTAMPSCHANGED;

View File

@ -199,6 +199,7 @@ extern void DBUndoPutLabel();
extern void DBUndoEraseLabel();
extern void DBUndoCellUse();
extern void DBStampMismatch();
extern void DBFlagMismatches();
extern void DBTechAddNameToType();
extern void dbComputeBbox();