From 35b617afb498d692729ae0689f96991c4672d822 Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Thu, 17 Oct 2002 09:11:33 +0000 Subject: 17794: fix bugs with tied parameters --- Src/params.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'Src/params.c') diff --git a/Src/params.c b/Src/params.c index f39f1012d..f461c15e0 100644 --- a/Src/params.c +++ b/Src/params.c @@ -2111,8 +2111,21 @@ unsetparam_pm(Param pm, int altflag, int exp) /* remove it under its alternate name if necessary */ if (pm->ename && !altflag) { altpm = (Param) paramtab->getnode(paramtab, pm->ename); - if (altpm) + /* tied parameters are at the same local level as each other */ + oldpm = NULL; + while (altpm && altpm->level > pm->level) { + /* param under alternate name hidden by a local */ + oldpm = altpm; + altpm = altpm->old; + } + if (altpm) { + if (oldpm && !altpm->level) { + oldpm->old = NULL; + /* fudge things so removenode isn't called */ + altpm->level = 1; + } unsetparam_pm(altpm, 1, exp); + } } /* -- cgit 1.4.1