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);
|
reg = (LabRegion *) extGetRegion(tp);
|
||||||
ll = (LabelList *) mallocMagic((unsigned) (sizeof (LabelList)));
|
ll = (LabelList *) mallocMagic((unsigned) (sizeof (LabelList)));
|
||||||
ll->ll_label = lab;
|
ll->ll_label = lab;
|
||||||
ll->ll_next = reg->lreg_labels;
|
|
||||||
reg->lreg_labels = ll;
|
|
||||||
if (lab->lab_flags & PORT_DIR_MASK)
|
if (lab->lab_flags & PORT_DIR_MASK)
|
||||||
ll->ll_attr = LL_PORTATTR;
|
ll->ll_attr = LL_PORTATTR;
|
||||||
else
|
else
|
||||||
ll->ll_attr = LL_NOATTR;
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -399,12 +415,28 @@ ExtLabelOneRegion(def, connTo, reg)
|
||||||
{
|
{
|
||||||
ll = (LabelList *) mallocMagic((unsigned) (sizeof (LabelList)));
|
ll = (LabelList *) mallocMagic((unsigned) (sizeof (LabelList)));
|
||||||
ll->ll_label = lab;
|
ll->ll_label = lab;
|
||||||
ll->ll_next = reg->nreg_labels;
|
|
||||||
reg->nreg_labels = ll;
|
|
||||||
if (lab->lab_flags & PORT_DIR_MASK)
|
if (lab->lab_flags & PORT_DIR_MASK)
|
||||||
ll->ll_attr = LL_PORTATTR;
|
ll->ll_attr = LL_PORTATTR;
|
||||||
else
|
else
|
||||||
ll->ll_attr = LL_NOATTR;
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue