This commit is contained in:
Mitch Bailey 2025-12-24 05:10:56 +00:00 committed by GitHub
commit eb45684639
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 26 additions and 4 deletions

View File

@ -652,7 +652,14 @@ efBuildEquiv(def, nodeName1, nodeName2, resist, isspice)
if (efWarn)
efReadError("Merged nodes %s and %s\n", nodeName1, nodeName2);
lostnode = efNodeMerge(&nn1->efnn_node, &nn2->efnn_node);
if (nn1->efnn_port > 0) nn2->efnn_port = nn1->efnn_port;
// keep the lowest valid port number
if (nn1->efnn_port > 0)
{
if (nn2->efnn_port > 0 && nn2->efnn_port < nn1->efnn_port)
nn1->efnn_port = nn2->efnn_port;
else
nn2->efnn_port = nn1->efnn_port;
}
else if (nn2->efnn_port > 0) nn1->efnn_port = nn2->efnn_port;
/* Check if there are any device terminals pointing to the
@ -1940,7 +1947,7 @@ EFNode *
efNodeMerge(node1ptr, node2ptr)
EFNode **node1ptr, **node2ptr; /* Pointers to hierarchical nodes */
{
EFNodeName *nn, *nnlast;
EFNodeName *nn, *nnlast, *nn1, *nn2;
EFAttr *ap;
int n;
EFNode *keeping, *removing;
@ -1951,8 +1958,22 @@ efNodeMerge(node1ptr, node2ptr)
/* Keep the node with the greater number of entries, and merge */
/* the node with fewer entries into it. */
/* If one node is a port, keep that node */
/* If both nodes are ports, keep the lowest numbered port */
/* Since duplicate ports always have higher numbers, this */
/* should keep the original. */
if ((*node1ptr)->efnode_num >= (*node2ptr)->efnode_num)
int keep = 0; // unknown
nn1 = (*node1ptr)->efnode_name;
nn2 = (*node2ptr)->efnode_name;
if ( nn1 && nn1->efnn_port > 0 )
{
if ( nn2 && nn2->efnn_port > 0 && nn2->efnn_port < nn1->efnn_port ) keep = 2;
else keep = 1;
}
else if ( nn2 && nn2->efnn_port > 0 ) keep = 2;
if (keep == 1 || ((keep == 0 && (*node1ptr)->efnode_num >= (*node2ptr)->efnode_num)))
{
keeping = *node1ptr;
removing = *node2ptr;

View File

@ -562,7 +562,8 @@ efAddNodes(
HashSetValue(he, (char *) newname);
newname->efnn_node = newnode;
newname->efnn_hier = hierName;
newname->efnn_port = -1;
// keep the port number
newname->efnn_port = node->efnode_name->efnn_port;
newname->efnn_refc = 0;
if (newnode->efnode_name)
{