src/spicelib/devices/*/*set.c, XXXunsetup(), sort CKTdltNNum() invocations

Invoke CKTdltNNum() in reverse order of local node creation in XXXsetup()

This fixes a bug at least in mesa and hfet1,
  where already destroyed node variables have still been accessed
  in the guarding 'if' of a later CKTdltNNum() stanza.
Invoking them in revers order easily prevents such bugs,
  and improves readability.
This commit is contained in:
rlar 2017-01-22 17:59:53 +01:00
parent 7afb798a6f
commit 0c86adf9af
33 changed files with 312 additions and 312 deletions

View File

@ -481,11 +481,11 @@ BJTunsetup(
for (here = model->BJTinstances; here != NULL;
here=here->BJTnextInstance)
{
if (here->BJTcolPrimeNode
&& here->BJTcolPrimeNode != here->BJTcolNode)
if (here->BJTemitPrimeNode
&& here->BJTemitPrimeNode != here->BJTemitNode)
{
CKTdltNNum(ckt, here->BJTcolPrimeNode);
here->BJTcolPrimeNode = 0;
CKTdltNNum(ckt, here->BJTemitPrimeNode);
here->BJTemitPrimeNode = 0;
}
if (here->BJTbasePrimeNode
&& here->BJTbasePrimeNode != here->BJTbaseNode)
@ -493,11 +493,11 @@ BJTunsetup(
CKTdltNNum(ckt, here->BJTbasePrimeNode);
here->BJTbasePrimeNode = 0;
}
if (here->BJTemitPrimeNode
&& here->BJTemitPrimeNode != here->BJTemitNode)
if (here->BJTcolPrimeNode
&& here->BJTcolPrimeNode != here->BJTcolNode)
{
CKTdltNNum(ckt, here->BJTemitPrimeNode);
here->BJTemitPrimeNode = 0;
CKTdltNNum(ckt, here->BJTcolPrimeNode);
here->BJTcolPrimeNode = 0;
}
}
}

View File

@ -412,18 +412,18 @@ B1unsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->B1instances; here != NULL;
here=here->B1nextInstance)
{
if (here->B1dNodePrime
&& here->B1dNodePrime != here->B1dNode)
{
CKTdltNNum(ckt, here->B1dNodePrime);
here->B1dNodePrime = 0;
}
if (here->B1sNodePrime
&& here->B1sNodePrime != here->B1sNode)
{
CKTdltNNum(ckt, here->B1sNodePrime);
here->B1sNodePrime = 0;
}
if (here->B1dNodePrime
&& here->B1dNodePrime != here->B1dNode)
{
CKTdltNNum(ckt, here->B1dNodePrime);
here->B1dNodePrime = 0;
}
}
}
return OK;

View File

@ -581,18 +581,18 @@ B2unsetup(
for (here = model->B2instances; here != NULL;
here=here->B2nextInstance)
{
if (here->B2dNodePrime
&& here->B2dNodePrime != here->B2dNode)
{
CKTdltNNum(ckt, here->B2dNodePrime);
here->B2dNodePrime = 0;
}
if (here->B2sNodePrime
&& here->B2sNodePrime != here->B2sNode)
{
CKTdltNNum(ckt, here->B2sNodePrime);
here->B2sNodePrime = 0;
}
if (here->B2dNodePrime
&& here->B2dNodePrime != here->B2dNode)
{
CKTdltNNum(ckt, here->B2dNodePrime);
here->B2dNodePrime = 0;
}
}
}
return OK;

View File

@ -1144,18 +1144,18 @@ BSIM3unsetup(
for (here = model->BSIM3instances; here != NULL;
here=here->BSIM3nextInstance)
{
if (here->BSIM3dNodePrime
&& here->BSIM3dNodePrime != here->BSIM3dNode)
{
CKTdltNNum(ckt, here->BSIM3dNodePrime);
here->BSIM3dNodePrime = 0;
}
if (here->BSIM3sNodePrime
&& here->BSIM3sNodePrime != here->BSIM3sNode)
{
CKTdltNNum(ckt, here->BSIM3sNodePrime);
here->BSIM3sNodePrime = 0;
}
if (here->BSIM3dNodePrime
&& here->BSIM3dNodePrime != here->BSIM3dNode)
{
CKTdltNNum(ckt, here->BSIM3dNodePrime);
here->BSIM3dNodePrime = 0;
}
}
}
return OK;

View File

@ -1357,18 +1357,18 @@ B3SOIDDunsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->B3SOIDDinstances; here != NULL;
here=here->B3SOIDDnextInstance)
{
if (here->B3SOIDDdNodePrime
&& here->B3SOIDDdNodePrime != here->B3SOIDDdNode)
{
CKTdltNNum(ckt, here->B3SOIDDdNodePrime);
here->B3SOIDDdNodePrime = 0;
}
if (here->B3SOIDDsNodePrime
&& here->B3SOIDDsNodePrime != here->B3SOIDDsNode)
{
CKTdltNNum(ckt, here->B3SOIDDsNodePrime);
here->B3SOIDDsNodePrime = 0;
}
if (here->B3SOIDDdNodePrime
&& here->B3SOIDDdNodePrime != here->B3SOIDDdNode)
{
CKTdltNNum(ckt, here->B3SOIDDdNodePrime);
here->B3SOIDDdNodePrime = 0;
}
}
}
return OK;

View File

@ -1346,18 +1346,18 @@ B3SOIFDunsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->B3SOIFDinstances; here != NULL;
here=here->B3SOIFDnextInstance)
{
if (here->B3SOIFDdNodePrime
&& here->B3SOIFDdNodePrime != here->B3SOIFDdNode)
{
CKTdltNNum(ckt, here->B3SOIFDdNodePrime);
here->B3SOIFDdNodePrime = 0;
}
if (here->B3SOIFDsNodePrime
&& here->B3SOIFDsNodePrime != here->B3SOIFDsNode)
{
CKTdltNNum(ckt, here->B3SOIFDsNodePrime);
here->B3SOIFDsNodePrime = 0;
}
if (here->B3SOIFDdNodePrime
&& here->B3SOIFDdNodePrime != here->B3SOIFDdNode)
{
CKTdltNNum(ckt, here->B3SOIFDdNodePrime);
here->B3SOIFDdNodePrime = 0;
}
}
}
return OK;

View File

@ -1461,18 +1461,18 @@ B3SOIPDunsetup(
for (here = model->B3SOIPDinstances; here != NULL;
here=here->B3SOIPDnextInstance)
{
if (here->B3SOIPDdNodePrime
&& here->B3SOIPDdNodePrime != here->B3SOIPDdNode)
{
CKTdltNNum(ckt, here->B3SOIPDdNodePrime);
here->B3SOIPDdNodePrime = 0;
}
if (here->B3SOIPDsNodePrime
&& here->B3SOIPDsNodePrime != here->B3SOIPDsNode)
{
CKTdltNNum(ckt, here->B3SOIPDsNodePrime);
here->B3SOIPDsNodePrime = 0;
}
if (here->B3SOIPDdNodePrime
&& here->B3SOIPDdNodePrime != here->B3SOIPDdNode)
{
CKTdltNNum(ckt, here->B3SOIPDdNodePrime);
here->B3SOIPDdNodePrime = 0;
}
}
}
return OK;

View File

@ -904,18 +904,18 @@ BSIM3v0unsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->BSIM3v0instances; here != NULL;
here=here->BSIM3v0nextInstance)
{
if (here->BSIM3v0dNodePrime
&& here->BSIM3v0dNodePrime != here->BSIM3v0dNode)
{
CKTdltNNum(ckt, here->BSIM3v0dNodePrime);
here->BSIM3v0dNodePrime = 0;
}
if (here->BSIM3v0sNodePrime
&& here->BSIM3v0sNodePrime != here->BSIM3v0sNode)
{
CKTdltNNum(ckt, here->BSIM3v0sNodePrime);
here->BSIM3v0sNodePrime = 0;
}
if (here->BSIM3v0dNodePrime
&& here->BSIM3v0dNodePrime != here->BSIM3v0dNode)
{
CKTdltNNum(ckt, here->BSIM3v0dNodePrime);
here->BSIM3v0dNodePrime = 0;
}
}
}
return OK;

View File

@ -964,18 +964,18 @@ BSIM3v1unsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->BSIM3v1instances; here != NULL;
here=here->BSIM3v1nextInstance)
{
if (here->BSIM3v1dNodePrime
&& here->BSIM3v1dNodePrime != here->BSIM3v1dNode)
{
CKTdltNNum(ckt, here->BSIM3v1dNodePrime);
here->BSIM3v1dNodePrime = 0;
}
if (here->BSIM3v1sNodePrime
&& here->BSIM3v1sNodePrime != here->BSIM3v1sNode)
{
CKTdltNNum(ckt, here->BSIM3v1sNodePrime);
here->BSIM3v1sNodePrime = 0;
}
if (here->BSIM3v1dNodePrime
&& here->BSIM3v1dNodePrime != here->BSIM3v1dNode)
{
CKTdltNNum(ckt, here->BSIM3v1dNodePrime);
here->BSIM3v1dNodePrime = 0;
}
}
}
return OK;

View File

@ -1156,18 +1156,18 @@ BSIM3v32unsetup(
for (here = model->BSIM3v32instances; here != NULL;
here=here->BSIM3v32nextInstance)
{
if (here->BSIM3v32dNodePrime
&& here->BSIM3v32dNodePrime != here->BSIM3v32dNode)
{
CKTdltNNum(ckt, here->BSIM3v32dNodePrime);
here->BSIM3v32dNodePrime = 0;
}
if (here->BSIM3v32sNodePrime
&& here->BSIM3v32sNodePrime != here->BSIM3v32sNode)
{
CKTdltNNum(ckt, here->BSIM3v32sNodePrime);
here->BSIM3v32sNodePrime = 0;
}
if (here->BSIM3v32dNodePrime
&& here->BSIM3v32dNodePrime != here->BSIM3v32dNode)
{
CKTdltNNum(ckt, here->BSIM3v32dNodePrime);
here->BSIM3v32dNodePrime = 0;
}
}
}
return OK;

View File

@ -2765,18 +2765,18 @@ CKTcircuit *ckt)
for (here = model->BSIM4instances; here != NULL;
here=here->BSIM4nextInstance)
{
if (here->BSIM4dNodePrime
&& here->BSIM4dNodePrime != here->BSIM4dNode)
{
CKTdltNNum(ckt, here->BSIM4dNodePrime);
here->BSIM4dNodePrime = 0;
}
if (here->BSIM4sNodePrime
&& here->BSIM4sNodePrime != here->BSIM4sNode)
{
CKTdltNNum(ckt, here->BSIM4sNodePrime);
here->BSIM4sNodePrime = 0;
}
if (here->BSIM4dNodePrime
&& here->BSIM4dNodePrime != here->BSIM4dNode)
{
CKTdltNNum(ckt, here->BSIM4dNodePrime);
here->BSIM4dNodePrime = 0;
}
}
}
#endif

View File

@ -2143,18 +2143,18 @@ BSIM4v5unsetup(
for (here = model->BSIM4v5instances; here != NULL;
here=here->BSIM4v5nextInstance)
{
if (here->BSIM4v5dNodePrime
&& here->BSIM4v5dNodePrime != here->BSIM4v5dNode)
{
CKTdltNNum(ckt, here->BSIM4v5dNodePrime);
here->BSIM4v5dNodePrime = 0;
}
if (here->BSIM4v5sNodePrime
&& here->BSIM4v5sNodePrime != here->BSIM4v5sNode)
{
CKTdltNNum(ckt, here->BSIM4v5sNodePrime);
here->BSIM4v5sNodePrime = 0;
}
if (here->BSIM4v5dNodePrime
&& here->BSIM4v5dNodePrime != here->BSIM4v5dNode)
{
CKTdltNNum(ckt, here->BSIM4v5dNodePrime);
here->BSIM4v5dNodePrime = 0;
}
}
}
#endif

View File

@ -2476,18 +2476,18 @@ BSIM4v6unsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->BSIM4v6instances; here != NULL;
here=here->BSIM4v6nextInstance)
{
if (here->BSIM4v6dNodePrime
&& here->BSIM4v6dNodePrime != here->BSIM4v6dNode)
{
CKTdltNNum(ckt, here->BSIM4v6dNodePrime);
here->BSIM4v6dNodePrime = 0;
}
if (here->BSIM4v6sNodePrime
&& here->BSIM4v6sNodePrime != here->BSIM4v6sNode)
{
CKTdltNNum(ckt, here->BSIM4v6sNodePrime);
here->BSIM4v6sNodePrime = 0;
}
if (here->BSIM4v6dNodePrime
&& here->BSIM4v6dNodePrime != here->BSIM4v6dNode)
{
CKTdltNNum(ckt, here->BSIM4v6dNodePrime);
here->BSIM4v6dNodePrime = 0;
}
}
}
#endif

View File

@ -2633,18 +2633,18 @@ CKTcircuit *ckt)
for (here = model->BSIM4v7instances; here != NULL;
here=here->BSIM4v7nextInstance)
{
if (here->BSIM4v7dNodePrime
&& here->BSIM4v7dNodePrime != here->BSIM4v7dNode)
{
CKTdltNNum(ckt, here->BSIM4v7dNodePrime);
here->BSIM4v7dNodePrime = 0;
}
if (here->BSIM4v7sNodePrime
&& here->BSIM4v7sNodePrime != here->BSIM4v7sNode)
{
CKTdltNNum(ckt, here->BSIM4v7sNodePrime);
here->BSIM4v7sNodePrime = 0;
}
if (here->BSIM4v7dNodePrime
&& here->BSIM4v7dNodePrime != here->BSIM4v7dNode)
{
CKTdltNNum(ckt, here->BSIM4v7dNodePrime);
here->BSIM4v7dNodePrime = 0;
}
}
}
#endif

View File

@ -2766,18 +2766,18 @@ B4SOIunsetup(
for (here = model->B4SOIinstances; here != NULL;
here=here->B4SOInextInstance)
{
if (here->B4SOIdNodePrime
&& here->B4SOIdNodePrime != here->B4SOIdNode)
{
CKTdltNNum(ckt, here->B4SOIdNodePrime);
here->B4SOIdNodePrime = 0;
}
if (here->B4SOIsNodePrime
&& here->B4SOIsNodePrime != here->B4SOIsNode)
{
CKTdltNNum(ckt, here->B4SOIsNodePrime);
here->B4SOIsNodePrime = 0;
}
if (here->B4SOIdNodePrime
&& here->B4SOIdNodePrime != here->B4SOIdNode)
{
CKTdltNNum(ckt, here->B4SOIdNodePrime);
here->B4SOIdNodePrime = 0;
}
}
}
#endif

View File

@ -324,16 +324,16 @@ CPLunsetup(GENmodel *inModel, CKTcircuit *ckt)
for (m = 0; m < noL; m++) {
if (here->CPLibr1[m]) {
CKTdltNNum(ckt, here->CPLibr1[m]);
here->CPLibr1[m] = 0;
if (here->CPLibr2[m]) {
CKTdltNNum(ckt, here->CPLibr2[m]);
here->CPLibr2[m] = 0;
}
}
for (m = 0; m < noL; m++) {
if (here->CPLibr2[m]) {
CKTdltNNum(ckt, here->CPLibr2[m]);
here->CPLibr2[m] = 0;
if (here->CPLibr1[m]) {
CKTdltNNum(ckt, here->CPLibr1[m]);
here->CPLibr1[m] = 0;
}
}

View File

@ -412,6 +412,25 @@ HFETAunsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->HFETAinstances; here != NULL;
here=here->HFETAnextInstance)
{
if (here->HFETAsourcePrmPrmNode
&& here->HFETAsourcePrmPrmNode != here->HFETAsourcePrimeNode)
{
CKTdltNNum(ckt, here->HFETAsourcePrmPrmNode);
here->HFETAsourcePrmPrmNode = 0;
}
if (here->HFETAdrainPrmPrmNode
&& here->HFETAdrainPrmPrmNode != here->HFETAdrainPrimeNode)
{
CKTdltNNum(ckt, here->HFETAdrainPrmPrmNode);
here->HFETAdrainPrmPrmNode = 0;
}
if (here->HFETAgatePrimeNode
&& here->HFETAgatePrimeNode != here->HFETAgateNode)
{
CKTdltNNum(ckt, here->HFETAgatePrimeNode);
here->HFETAgatePrimeNode = 0;
}
if (here->HFETAdrainPrimeNode
&& here->HFETAdrainPrimeNode != here->HFETAdrainNode)
{
@ -424,25 +443,6 @@ HFETAunsetup(GENmodel *inModel, CKTcircuit *ckt)
CKTdltNNum(ckt, here->HFETAsourcePrimeNode);
here->HFETAsourcePrimeNode = 0;
}
if (here->HFETAgatePrimeNode
&& here->HFETAgatePrimeNode != here->HFETAgateNode)
{
CKTdltNNum(ckt, here->HFETAgatePrimeNode);
here->HFETAgatePrimeNode = 0;
}
if (here->HFETAdrainPrmPrmNode
&& here->HFETAdrainPrmPrmNode != here->HFETAdrainPrimeNode)
{
CKTdltNNum(ckt, here->HFETAdrainPrmPrmNode);
here->HFETAdrainPrmPrmNode = 0;
}
if (here->HFETAsourcePrmPrmNode
&& here->HFETAsourcePrmPrmNode != here->HFETAsourcePrimeNode)
{
CKTdltNNum(ckt, here->HFETAsourcePrmPrmNode);
here->HFETAsourcePrmPrmNode = 0;
}
}
}

View File

@ -1312,23 +1312,11 @@ HSM2unsetup(
for (here = model->HSM2instances; here != NULL;
here=here->HSM2nextInstance)
{
if (here->HSM2dNodePrime
&& here->HSM2dNodePrime != here->HSM2dNode)
if (here->HSM2sbNode
&& here->HSM2sbNode != here->HSM2bNode)
{
CKTdltNNum(ckt, here->HSM2dNodePrime);
here->HSM2dNodePrime = 0;
}
if (here->HSM2sNodePrime
&& here->HSM2sNodePrime != here->HSM2sNode)
{
CKTdltNNum(ckt, here->HSM2sNodePrime);
here->HSM2sNodePrime = 0;
}
if (here->HSM2gNodePrime
&& here->HSM2gNodePrime != here->HSM2gNode)
{
CKTdltNNum(ckt, here->HSM2gNodePrime);
here->HSM2gNodePrime = 0;
CKTdltNNum(ckt, here->HSM2sbNode);
here->HSM2sbNode = 0;
}
if (here->HSM2bNodePrime
&& here->HSM2bNodePrime != here->HSM2bNode)
@ -1342,11 +1330,23 @@ HSM2unsetup(
CKTdltNNum(ckt, here->HSM2dbNode);
here->HSM2dbNode = 0;
}
if (here->HSM2sbNode
&& here->HSM2sbNode != here->HSM2bNode)
if (here->HSM2gNodePrime
&& here->HSM2gNodePrime != here->HSM2gNode)
{
CKTdltNNum(ckt, here->HSM2sbNode);
here->HSM2sbNode = 0;
CKTdltNNum(ckt, here->HSM2gNodePrime);
here->HSM2gNodePrime = 0;
}
if (here->HSM2sNodePrime
&& here->HSM2sNodePrime != here->HSM2sNode)
{
CKTdltNNum(ckt, here->HSM2sNodePrime);
here->HSM2sNodePrime = 0;
}
if (here->HSM2dNodePrime
&& here->HSM2dNodePrime != here->HSM2dNode)
{
CKTdltNNum(ckt, here->HSM2dNodePrime);
here->HSM2dNodePrime = 0;
}
}
}

View File

@ -1473,23 +1473,11 @@ HSMHVunsetup(
for (here = model->HSMHVinstances; here != NULL;
here=here->HSMHVnextInstance)
{
if (here->HSMHVdNodePrime
&& here->HSMHVdNodePrime != here->HSMHVdNode)
if (here->HSMHVsbNode
&& here->HSMHVsbNode != here->HSMHVbNode)
{
CKTdltNNum(ckt, here->HSMHVdNodePrime);
here->HSMHVdNodePrime = 0;
}
if (here->HSMHVsNodePrime
&& here->HSMHVsNodePrime != here->HSMHVsNode)
{
CKTdltNNum(ckt, here->HSMHVsNodePrime);
here->HSMHVsNodePrime = 0;
}
if (here->HSMHVgNodePrime
&& here->HSMHVgNodePrime != here->HSMHVgNode)
{
CKTdltNNum(ckt, here->HSMHVgNodePrime);
here->HSMHVgNodePrime = 0;
CKTdltNNum(ckt, here->HSMHVsbNode);
here->HSMHVsbNode = 0;
}
if (here->HSMHVbNodePrime
&& here->HSMHVbNodePrime != here->HSMHVbNode)
@ -1503,11 +1491,23 @@ HSMHVunsetup(
CKTdltNNum(ckt, here->HSMHVdbNode);
here->HSMHVdbNode = 0;
}
if (here->HSMHVsbNode
&& here->HSMHVsbNode != here->HSMHVbNode)
if (here->HSMHVgNodePrime
&& here->HSMHVgNodePrime != here->HSMHVgNode)
{
CKTdltNNum(ckt, here->HSMHVsbNode);
here->HSMHVsbNode = 0;
CKTdltNNum(ckt, here->HSMHVgNodePrime);
here->HSMHVgNodePrime = 0;
}
if (here->HSMHVsNodePrime
&& here->HSMHVsNodePrime != here->HSMHVsNode)
{
CKTdltNNum(ckt, here->HSMHVsNodePrime);
here->HSMHVsNodePrime = 0;
}
if (here->HSMHVdNodePrime
&& here->HSMHVdNodePrime != here->HSMHVdNode)
{
CKTdltNNum(ckt, here->HSMHVdNodePrime);
here->HSMHVdNodePrime = 0;
}
}
}

View File

@ -1741,23 +1741,11 @@ HSMHV2unsetup(
for (here = model->HSMHV2instances; here != NULL;
here=here->HSMHV2nextInstance)
{
if (here->HSMHV2dNodePrime
&& here->HSMHV2dNodePrime != here->HSMHV2dNode)
if (here->HSMHV2sbNode
&& here->HSMHV2sbNode != here->HSMHV2bNode)
{
CKTdltNNum(ckt, here->HSMHV2dNodePrime);
here->HSMHV2dNodePrime = 0;
}
if (here->HSMHV2sNodePrime
&& here->HSMHV2sNodePrime != here->HSMHV2sNode)
{
CKTdltNNum(ckt, here->HSMHV2sNodePrime);
here->HSMHV2sNodePrime = 0;
}
if (here->HSMHV2gNodePrime
&& here->HSMHV2gNodePrime != here->HSMHV2gNode)
{
CKTdltNNum(ckt, here->HSMHV2gNodePrime);
here->HSMHV2gNodePrime = 0;
CKTdltNNum(ckt, here->HSMHV2sbNode);
here->HSMHV2sbNode = 0;
}
if (here->HSMHV2bNodePrime
&& here->HSMHV2bNodePrime != here->HSMHV2bNode)
@ -1771,11 +1759,23 @@ HSMHV2unsetup(
CKTdltNNum(ckt, here->HSMHV2dbNode);
here->HSMHV2dbNode = 0;
}
if (here->HSMHV2sbNode
&& here->HSMHV2sbNode != here->HSMHV2bNode)
if (here->HSMHV2gNodePrime
&& here->HSMHV2gNodePrime != here->HSMHV2gNode)
{
CKTdltNNum(ckt, here->HSMHV2sbNode);
here->HSMHV2sbNode = 0;
CKTdltNNum(ckt, here->HSMHV2gNodePrime);
here->HSMHV2gNodePrime = 0;
}
if (here->HSMHV2sNodePrime
&& here->HSMHV2sNodePrime != here->HSMHV2sNode)
{
CKTdltNNum(ckt, here->HSMHV2sNodePrime);
here->HSMHV2sNodePrime = 0;
}
if (here->HSMHV2dNodePrime
&& here->HSMHV2dNodePrime != here->HSMHV2dNode)
{
CKTdltNNum(ckt, here->HSMHV2dNodePrime);
here->HSMHV2dNodePrime = 0;
}
}
}

View File

@ -195,18 +195,18 @@ JFETunsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->JFETinstances; here != NULL;
here=here->JFETnextInstance)
{
if (here->JFETsourcePrimeNode
&& here->JFETsourcePrimeNode != here->JFETsourceNode)
{
CKTdltNNum(ckt, here->JFETsourcePrimeNode);
here->JFETsourcePrimeNode = 0;
}
if (here->JFETdrainPrimeNode
&& here->JFETdrainPrimeNode != here->JFETdrainNode)
{
CKTdltNNum(ckt, here->JFETdrainPrimeNode);
here->JFETdrainPrimeNode = 0;
}
if (here->JFETsourcePrimeNode
&& here->JFETsourcePrimeNode != here->JFETsourceNode)
{
CKTdltNNum(ckt, here->JFETsourcePrimeNode);
here->JFETsourcePrimeNode = 0;
}
}
}
return OK;

View File

@ -135,18 +135,18 @@ JFET2unsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->JFET2instances; here != NULL;
here=here->JFET2nextInstance)
{
if (here->JFET2sourcePrimeNode
&& here->JFET2sourcePrimeNode != here->JFET2sourceNode)
{
CKTdltNNum(ckt, here->JFET2sourcePrimeNode);
here->JFET2sourcePrimeNode = 0;
}
if (here->JFET2drainPrimeNode
&& here->JFET2drainPrimeNode != here->JFET2drainNode)
{
CKTdltNNum(ckt, here->JFET2drainPrimeNode);
here->JFET2drainPrimeNode = 0;
}
if (here->JFET2sourcePrimeNode
&& here->JFET2sourcePrimeNode != here->JFET2sourceNode)
{
CKTdltNNum(ckt, here->JFET2sourcePrimeNode);
here->JFET2sourcePrimeNode = 0;
}
}
}
return OK;

View File

@ -229,14 +229,14 @@ LTRAunsetup(GENmodel *inModel, CKTcircuit *ckt)
model = model->LTRAnextModel) {
for (here = model->LTRAinstances; here != NULL;
here = here->LTRAnextInstance) {
if (here->LTRAbrEq1) {
CKTdltNNum(ckt, here->LTRAbrEq1);
here->LTRAbrEq1 = 0;
}
if (here->LTRAbrEq2) {
CKTdltNNum(ckt, here->LTRAbrEq2);
here->LTRAbrEq2 = 0;
}
if (here->LTRAbrEq1) {
CKTdltNNum(ckt, here->LTRAbrEq1);
here->LTRAbrEq1 = 0;
}
}
}
return OK;

View File

@ -168,18 +168,18 @@ MESunsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->MESinstances; here != NULL;
here=here->MESnextInstance)
{
if (here->MESsourcePrimeNode
&& here->MESsourcePrimeNode != here->MESsourceNode)
{
CKTdltNNum(ckt, here->MESsourcePrimeNode);
here->MESsourcePrimeNode = 0;
}
if (here->MESdrainPrimeNode
&& here->MESdrainPrimeNode != here->MESdrainNode)
{
CKTdltNNum(ckt, here->MESdrainPrimeNode);
here->MESdrainPrimeNode = 0;
}
if (here->MESsourcePrimeNode
&& here->MESsourcePrimeNode != here->MESsourceNode)
{
CKTdltNNum(ckt, here->MESsourcePrimeNode);
here->MESsourcePrimeNode = 0;
}
}
}
return OK;

View File

@ -419,6 +419,24 @@ MESAunsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->MESAinstances; here != NULL;
here=here->MESAnextInstance)
{
if (here->MESAdrainPrmPrmNode
&& here->MESAdrainPrmPrmNode != here->MESAdrainPrimeNode)
{
CKTdltNNum(ckt, here->MESAdrainPrmPrmNode);
here->MESAdrainPrmPrmNode = 0;
}
if (here->MESAsourcePrmPrmNode
&& here->MESAsourcePrmPrmNode != here->MESAsourcePrimeNode)
{
CKTdltNNum(ckt, here->MESAsourcePrmPrmNode);
here->MESAsourcePrmPrmNode = 0;
}
if (here->MESAgatePrimeNode
&& here->MESAgatePrimeNode != here->MESAgateNode)
{
CKTdltNNum(ckt, here->MESAgatePrimeNode);
here->MESAgatePrimeNode = 0;
}
if (here->MESAdrainPrimeNode
&& here->MESAdrainPrimeNode != here->MESAdrainNode)
{
@ -431,24 +449,6 @@ MESAunsetup(GENmodel *inModel, CKTcircuit *ckt)
CKTdltNNum(ckt, here->MESAsourcePrimeNode);
here->MESAsourcePrimeNode = 0;
}
if (here->MESAgatePrimeNode
&& here->MESAgatePrimeNode != here->MESAgateNode)
{
CKTdltNNum(ckt, here->MESAgatePrimeNode);
here->MESAgatePrimeNode = 0;
}
if (here->MESAsourcePrmPrmNode
&& here->MESAsourcePrmPrmNode != here->MESAsourcePrimeNode)
{
CKTdltNNum(ckt, here->MESAsourcePrmPrmNode);
here->MESAsourcePrmPrmNode = 0;
}
if (here->MESAdrainPrmPrmNode
&& here->MESAdrainPrmPrmNode != here->MESAdrainPrimeNode)
{
CKTdltNNum(ckt, here->MESAdrainPrmPrmNode);
here->MESAdrainPrmPrmNode = 0;
}
}
}

View File

@ -223,18 +223,18 @@ MOS1unsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->MOS1instances; here != NULL;
here=here->MOS1nextInstance)
{
if (here->MOS1dNodePrime
&& here->MOS1dNodePrime != here->MOS1dNode)
{
CKTdltNNum(ckt, here->MOS1dNodePrime);
here->MOS1dNodePrime= 0;
}
if (here->MOS1sNodePrime
&& here->MOS1sNodePrime != here->MOS1sNode)
{
CKTdltNNum(ckt, here->MOS1sNodePrime);
here->MOS1sNodePrime= 0;
}
if (here->MOS1dNodePrime
&& here->MOS1dNodePrime != here->MOS1dNode)
{
CKTdltNNum(ckt, here->MOS1dNodePrime);
here->MOS1dNodePrime= 0;
}
}
}
return OK;

View File

@ -271,18 +271,18 @@ MOS3unsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->MOS3instances; here != NULL;
here=here->MOS3nextInstance)
{
if (here->MOS3dNodePrime
&& here->MOS3dNodePrime != here->MOS3dNode)
{
CKTdltNNum(ckt, here->MOS3dNodePrime);
here->MOS3dNodePrime= 0;
}
if (here->MOS3sNodePrime
&& here->MOS3sNodePrime != here->MOS3sNode)
{
CKTdltNNum(ckt, here->MOS3sNodePrime);
here->MOS3sNodePrime= 0;
}
if (here->MOS3dNodePrime
&& here->MOS3dNodePrime != here->MOS3dNode)
{
CKTdltNNum(ckt, here->MOS3dNodePrime);
here->MOS3dNodePrime= 0;
}
}
}
return OK;

View File

@ -233,18 +233,18 @@ MOS6unsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->MOS6instances; here != NULL;
here=here->MOS6nextInstance)
{
if (here->MOS6dNodePrime
&& here->MOS6dNodePrime != here->MOS6dNode)
{
CKTdltNNum(ckt, here->MOS6dNodePrime);
here->MOS6dNodePrime= 0;
}
if (here->MOS6sNodePrime
&& here->MOS6sNodePrime != here->MOS6sNode)
{
CKTdltNNum(ckt, here->MOS6sNodePrime);
here->MOS6sNodePrime= 0;
}
if (here->MOS6dNodePrime
&& here->MOS6dNodePrime != here->MOS6dNode)
{
CKTdltNNum(ckt, here->MOS6dNodePrime);
here->MOS6dNodePrime= 0;
}
}
}
return OK;

View File

@ -271,18 +271,18 @@ MOS9unsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->MOS9instances; here != NULL;
here=here->MOS9nextInstance)
{
if (here->MOS9dNodePrime
&& here->MOS9dNodePrime != here->MOS9dNode)
{
CKTdltNNum(ckt, here->MOS9dNodePrime);
here->MOS9dNodePrime= 0;
}
if (here->MOS9sNodePrime
&& here->MOS9sNodePrime != here->MOS9sNode)
{
CKTdltNNum(ckt, here->MOS9sNodePrime);
here->MOS9sNodePrime= 0;
}
if (here->MOS9dNodePrime
&& here->MOS9dNodePrime != here->MOS9dNode)
{
CKTdltNNum(ckt, here->MOS9dNodePrime);
here->MOS9dNodePrime= 0;
}
}
}
return OK;

View File

@ -674,11 +674,30 @@ SOI3unsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->SOI3instances; here != NULL;
here=here->SOI3nextInstance)
{
if (here->SOI3dNodePrime
&& here->SOI3dNodePrime != here->SOI3dNode)
if (here->SOI3tout4Node)
{
CKTdltNNum(ckt, here->SOI3dNodePrime);
here->SOI3dNodePrime= 0;
CKTdltNNum(ckt, here->SOI3tout4Node);
here->SOI3tout4Node = 0;
}
if (here->SOI3tout3Node)
{
CKTdltNNum(ckt, here->SOI3tout3Node);
here->SOI3tout3Node = 0;
}
if (here->SOI3tout2Node)
{
CKTdltNNum(ckt, here->SOI3tout2Node);
here->SOI3tout2Node = 0;
}
if (here->SOI3tout1Node)
{
CKTdltNNum(ckt, here->SOI3tout1Node);
here->SOI3tout1Node = 0;
}
if (here->SOI3branch)
{
CKTdltNNum(ckt, here->SOI3branch);
here->SOI3branch=0;
}
if (here->SOI3sNodePrime
&& here->SOI3sNodePrime != here->SOI3sNode)
@ -686,30 +705,11 @@ SOI3unsetup(GENmodel *inModel, CKTcircuit *ckt)
CKTdltNNum(ckt, here->SOI3sNodePrime);
here->SOI3sNodePrime= 0;
}
if (here->SOI3branch)
if (here->SOI3dNodePrime
&& here->SOI3dNodePrime != here->SOI3dNode)
{
CKTdltNNum(ckt, here->SOI3branch);
here->SOI3branch=0;
}
if (here->SOI3tout1Node)
{
CKTdltNNum(ckt, here->SOI3tout1Node);
here->SOI3tout1Node = 0;
}
if (here->SOI3tout2Node)
{
CKTdltNNum(ckt, here->SOI3tout2Node);
here->SOI3tout2Node = 0;
}
if (here->SOI3tout3Node)
{
CKTdltNNum(ckt, here->SOI3tout3Node);
here->SOI3tout3Node = 0;
}
if (here->SOI3tout4Node)
{
CKTdltNNum(ckt, here->SOI3tout4Node);
here->SOI3tout4Node = 0;
CKTdltNNum(ckt, here->SOI3dNodePrime);
here->SOI3dNodePrime= 0;
}
}
}

View File

@ -126,21 +126,21 @@ TRAunsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->TRAinstances; here != NULL;
here=here->TRAnextInstance)
{
if (here->TRAbrEq1) {
CKTdltNNum(ckt, here->TRAbrEq1);
here->TRAbrEq1= 0;
}
if (here->TRAbrEq2) {
CKTdltNNum(ckt, here->TRAbrEq2);
here->TRAbrEq2= 0;
if (here->TRAintNode2) {
CKTdltNNum(ckt, here->TRAintNode2);
here->TRAintNode2= 0;
}
if (here->TRAintNode1) {
CKTdltNNum(ckt, here->TRAintNode1);
here->TRAintNode1= 0;
}
if (here->TRAintNode2) {
CKTdltNNum(ckt, here->TRAintNode2);
here->TRAintNode2= 0;
if (here->TRAbrEq2) {
CKTdltNNum(ckt, here->TRAbrEq2);
here->TRAbrEq2= 0;
}
if (here->TRAbrEq1) {
CKTdltNNum(ckt, here->TRAbrEq1);
here->TRAbrEq1= 0;
}
}
}

View File

@ -170,16 +170,16 @@ TXLunsetup(GENmodel *inModel, CKTcircuit *ckt)
for (here = model->TXLinstances; here != NULL;
here = here->TXLnextInstance) {
if (here->TXLibr1) {
CKTdltNNum(ckt, here->TXLibr1);
here->TXLibr1 = 0;
}
if (here->TXLibr2) {
CKTdltNNum(ckt, here->TXLibr2);
here->TXLibr2 = 0;
}
if (here->TXLibr1) {
CKTdltNNum(ckt, here->TXLibr1);
here->TXLibr1 = 0;
}
here->TXLdcGiven=0;
}

View File

@ -558,35 +558,6 @@ VBICunsetup(
for (here = model->VBICinstances; here != NULL;
here=here->VBICnextInstance)
{
if (here->VBICcollCXNode
&& here->VBICcollCXNode != here->VBICcollNode)
{
CKTdltNNum(ckt, here->VBICcollCXNode);
here->VBICcollCXNode = 0;
}
if (here->VBICbaseBXNode
&& here->VBICbaseBXNode != here->VBICbaseNode)
{
CKTdltNNum(ckt, here->VBICbaseBXNode);
here->VBICbaseBXNode = 0;
}
if (here->VBICemitEINode
&& here->VBICemitEINode != here->VBICemitNode)
{
CKTdltNNum(ckt, here->VBICemitEINode);
here->VBICemitEINode = 0;
}
if (here->VBICsubsSINode
&& here->VBICsubsSINode != here->VBICsubsNode)
{
CKTdltNNum(ckt, here->VBICsubsSINode);
here->VBICsubsSINode = 0;
}
if (here->VBICcollCINode)
{
CKTdltNNum(ckt, here->VBICcollCINode);
here->VBICcollCINode = 0;
}
if (here->VBICbaseBINode)
{
CKTdltNNum(ckt, here->VBICbaseBINode);
@ -597,6 +568,35 @@ VBICunsetup(
CKTdltNNum(ckt, here->VBICbaseBPNode);
here->VBICbaseBPNode = 0;
}
if (here->VBICcollCINode)
{
CKTdltNNum(ckt, here->VBICcollCINode);
here->VBICcollCINode = 0;
}
if (here->VBICsubsSINode
&& here->VBICsubsSINode != here->VBICsubsNode)
{
CKTdltNNum(ckt, here->VBICsubsSINode);
here->VBICsubsSINode = 0;
}
if (here->VBICemitEINode
&& here->VBICemitEINode != here->VBICemitNode)
{
CKTdltNNum(ckt, here->VBICemitEINode);
here->VBICemitEINode = 0;
}
if (here->VBICbaseBXNode
&& here->VBICbaseBXNode != here->VBICbaseNode)
{
CKTdltNNum(ckt, here->VBICbaseBXNode);
here->VBICbaseBXNode = 0;
}
if (here->VBICcollCXNode
&& here->VBICcollCXNode != here->VBICcollNode)
{
CKTdltNNum(ckt, here->VBICcollCXNode);
here->VBICcollCXNode = 0;
}
}
}
return OK;