From a9e4dc07c946b61bd9d23e7577c043041c7fb9fe Mon Sep 17 00:00:00 2001 From: rlar Date: Fri, 6 Jan 2017 10:54:14 +0100 Subject: [PATCH] hfetsetup.c, HFETAunsetup(), 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. (HFETAdrainPrimeNode and HFETAsourcePrimeNode) --- src/spicelib/devices/hfet1/hfetsetup.c | 53 ++++++++++++-------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/src/spicelib/devices/hfet1/hfetsetup.c b/src/spicelib/devices/hfet1/hfetsetup.c index 9b3192840..98a482cca 100644 --- a/src/spicelib/devices/hfet1/hfetsetup.c +++ b/src/spicelib/devices/hfet1/hfetsetup.c @@ -405,49 +405,46 @@ HFETAunsetup(GENmodel *inModel, CKTcircuit *ckt) { HFETAmodel *model; HFETAinstance *here; - + for (model = (HFETAmodel *)inModel; model != NULL; - model = model->HFETAnextModel) + model = model->HFETAnextModel) { for (here = model->HFETAinstances; here != NULL; - here=here->HFETAnextInstance) + here = here->HFETAnextInstance) { - // ouch, reorder, this is still needed some lines down + 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) + && here->HFETAdrainPrimeNode != here->HFETAdrainNode) { CKTdltNNum(ckt, here->HFETAdrainPrimeNode); here->HFETAdrainPrimeNode = 0; } - // ouch, reorder, this is still needed some lines down if (here->HFETAsourcePrimeNode - && here->HFETAsourcePrimeNode != here->HFETAsourceNode) + && here->HFETAsourcePrimeNode != here->HFETAsourceNode) { 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; - } - - } + } } + return OK; }