|
@@ -190,26 +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
|