From: ceriel Date: Wed, 4 Nov 1987 15:55:23 +0000 (+0000) Subject: fixed a minor problem with unstacking X-Git-Tag: release-5-5~3747 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=9dd87881e1472c9bcb47ab7dba229ebd609f6bd9;p=ack.git fixed a minor problem with unstacking --- diff --git a/util/cpp/macro.h b/util/cpp/macro.h index bf9f878e9..a501f8f35 100644 --- a/util/cpp/macro.h +++ b/util/cpp/macro.h @@ -45,6 +45,7 @@ struct mlist { struct mlist *next; struct macro *m_mac; char *m_repl; + char m_unstack; }; /* allocation definitions of struct mlist */ diff --git a/util/cpp/replace.c b/util/cpp/replace.c index 8aa4f4ea5..fb932a869 100644 --- a/util/cpp/replace.c +++ b/util/cpp/replace.c @@ -190,25 +190,36 @@ macro2buffer(idef, actpars, siztext) EXPORT DoUnstack() { + register struct mlist *p = ReplaceList; + + while (p->m_unstack) p = p->next; + p->m_unstack = 1; Unstacked++; } EXPORT EnableMacros() { - register struct mlist *p = ReplaceList; + register struct mlist *p = ReplaceList, *prev = 0; + int cnt = 0; assert(Unstacked > 0); - while (Unstacked > 0) { + while (p) { struct mlist *nxt = p->next; - assert(p != 0); - p->m_mac->mc_flag &= ~NOREPLACE; - if (p->m_mac->mc_count) p->m_mac->mc_count--; - if (p->m_repl) free(p->m_repl); - free_mlist(p); + if (p->m_unstack) { + p->m_mac->mc_flag &= ~NOREPLACE; + if (p->m_mac->mc_count) p->m_mac->mc_count--; + if (p->m_repl) free(p->m_repl); + if (! prev) ReplaceList = nxt; + else prev->next = nxt; + free_mlist(p); + cnt++; + } + else prev = p; p = nxt; - Unstacked--; } - ReplaceList = p; + assert(cnt == Unstacked); + Unstacked = 0; } +#endif NOPP