mesasetup.c, MESAunsetup(), bug fix, reorder CKTdltNNum() invocations

invoke CKTdltNNUM() in revers order of creation.

The guarding of the CKTdltNNum() invocations needed access to node numbers
which have already been killed. (MESAdrainPrimeNode and MESAsourcePrimeNode)
This commit is contained in:
rlar 2017-01-06 10:53:11 +01:00
parent 27c22a3041
commit dd0a4307d0
1 changed files with 29 additions and 31 deletions

View File

@ -412,47 +412,45 @@ MESAunsetup(GENmodel *inModel, CKTcircuit *ckt)
{
MESAmodel *model;
MESAinstance *here;
for (model = (MESAmodel *)inModel; model != NULL;
model = model->MESAnextModel)
model = model->MESAnextModel)
{
for (here = model->MESAinstances; here != NULL;
here=here->MESAnextInstance)
here = here->MESAnextInstance)
{
// ouch, reorder, this is still needed some lines down
if (here->MESAdrainPrimeNode
&& here->MESAdrainPrimeNode != here->MESAdrainNode)
{
CKTdltNNum(ckt, here->MESAdrainPrimeNode);
here->MESAdrainPrimeNode = 0;
}
// ouch, reorder, this is still needed some lines down
if (here->MESAsourcePrimeNode
&& here->MESAsourcePrimeNode != here->MESAsourceNode)
{
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)
&& 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)
{
CKTdltNNum(ckt, here->MESAdrainPrimeNode);
here->MESAdrainPrimeNode = 0;
}
if (here->MESAsourcePrimeNode
&& here->MESAsourcePrimeNode != here->MESAsourceNode)
{
CKTdltNNum(ckt, here->MESAsourcePrimeNode);
here->MESAsourcePrimeNode = 0;
}
}
}
return OK;
}