Found that extNodeName() prefers the first name in a region's label
list for output, but that the code in ExtRegion.c does not sort a region's label list to keep ports at the beginning of the list. So any net with multiple labels may end up with a non-port label as the name of the node, which eventually becomes the name of the port. A quick fix keeps these lists sorted.
This commit is contained in:
parent
3ae24e8a8c
commit
ca469510d5
|
|
@ -251,12 +251,28 @@ ExtLabelRegions(def, connTo, nodeList, clipArea)
|
|||
reg = (LabRegion *) extGetRegion(tp);
|
||||
ll = (LabelList *) mallocMagic((unsigned) (sizeof (LabelList)));
|
||||
ll->ll_label = lab;
|
||||
ll->ll_next = reg->lreg_labels;
|
||||
reg->lreg_labels = ll;
|
||||
if (lab->lab_flags & PORT_DIR_MASK)
|
||||
ll->ll_attr = LL_PORTATTR;
|
||||
else
|
||||
ll->ll_attr = LL_NOATTR;
|
||||
|
||||
if ((lab->lab_flags & PORT_DIR_MASK) || (reg->lreg_labels == NULL))
|
||||
{
|
||||
ll->ll_next = reg->lreg_labels;
|
||||
reg->lreg_labels = ll;
|
||||
}
|
||||
else
|
||||
{
|
||||
LabelList *fport = reg->lreg_labels;
|
||||
|
||||
/* Place *after* any labels with LL_PORTATTR */
|
||||
while ((fport->ll_next != NULL) &&
|
||||
(fport->ll_next->ll_attr == LL_PORTATTR))
|
||||
fport = fport->ll_next;
|
||||
|
||||
ll->ll_next = fport->ll_next;
|
||||
fport->ll_next = ll;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -399,12 +415,28 @@ ExtLabelOneRegion(def, connTo, reg)
|
|||
{
|
||||
ll = (LabelList *) mallocMagic((unsigned) (sizeof (LabelList)));
|
||||
ll->ll_label = lab;
|
||||
ll->ll_next = reg->nreg_labels;
|
||||
reg->nreg_labels = ll;
|
||||
if (lab->lab_flags & PORT_DIR_MASK)
|
||||
ll->ll_attr = LL_PORTATTR;
|
||||
else
|
||||
ll->ll_attr = LL_NOATTR;
|
||||
|
||||
if ((lab->lab_flags & PORT_DIR_MASK) || (reg->nreg_labels == NULL))
|
||||
{
|
||||
ll->ll_next = reg->nreg_labels;
|
||||
reg->nreg_labels = ll;
|
||||
}
|
||||
else
|
||||
{
|
||||
LabelList *fport = reg->nreg_labels;
|
||||
|
||||
/* Place *after* any labels with LL_PORTATTR */
|
||||
while ((fport->ll_next != NULL) &&
|
||||
(fport->ll_next->ll_attr == LL_PORTATTR))
|
||||
fport = fport->ll_next;
|
||||
|
||||
ll->ll_next = fport->ll_next;
|
||||
fport->ll_next = ll;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue