}
return "";
}
+
+int InputLevel;
#endif NOPP
int NoUnstack;
#ifndef NOPP
/* if (NoUnstack) lexwarning("unexpected EOF"); ??? */
DoUnstack();
+ InputLevel--;
#endif NOPP
return 0;
}
struct mlist *next;
struct macro *m_mac;
char *m_repl;
- char m_unstack;
+ int m_level;
};
/* ALLOCDEF "mlist" 20 */
char *strcpy(), *strcat();
char *long2str();
+extern int InputLevel;
PRIVATE struct mlist *ReplaceList; /* list of currently active macros */
else
reptext = "0";
InsertText(reptext, 1);
+ InputLevel++;
+ repl->m_level = InputLevel;
repl->next = ReplaceList;
ReplaceList = repl;
repl->m_mac = mac;
repl->m_repl = reptext;
}
InsertText(reptext, size);
+ InputLevel++;
+ repl->m_level = InputLevel;
repl->next = ReplaceList;
ReplaceList = repl;
return 1;
EXPORT
DoUnstack()
{
- register struct mlist *p = ReplaceList;
-
- while (p->m_unstack) p = p->next;
- p->m_unstack = 1;
- Unstacked++;
+ Unstacked = 1;
}
EXPORT
EnableMacros()
{
register struct mlist *p = ReplaceList, *prev = 0;
- int cnt = 0;
ASSERT(Unstacked > 0);
while (p) {
struct mlist *nxt = p->next;
- if (p->m_unstack) {
+ if (p->m_level > InputLevel) {
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;
}
- ASSERT(cnt == Unstacked);
Unstacked = 0;
}
#endif NOPP
int NoUnstack;
int Unstacked;
+int InputLevel;
AtEoIT()
{
if (NoUnstack) warning("unexpected EOF");
+ InputLevel--;
DoUnstack();
return 0;
}
struct mlist *next;
struct macro *m_mac;
char *m_repl;
- char m_unstack;
+ int m_level;
};
/* allocation definitions of struct mlist */
char *strcpy(), *strcat();
char *long2str();
+extern int InputLevel;
PRIVATE struct mlist *ReplList; /* list of currently active macros */
else
reptext = "0";
InsertText(reptext, 1);
+ InputLevel++;
+ repl->m_level = InputLevel;
repl->next = ReplList;
ReplList = repl;
repl->m_repl = reptext;
}
InsertText(reptext, size);
+ InputLevel++;
+ repl->m_level = InputLevel;
repl->next = ReplList;
ReplList = repl;
return 1;
EXPORT
DoUnstack()
{
- register struct mlist *p = ReplList;
-
- while (p->m_unstack) p = p->next;
- p->m_unstack = 1;
- Unstacked++;
+ Unstacked = 1;
}
EXPORT
EnableMacros()
{
register struct mlist *p = ReplList, *prev = 0;
- int cnt = 0;
assert(Unstacked > 0);
while (p) {
struct mlist *nxt = p->next;
- if (p->m_unstack) {
+ if (p->m_level > InputLevel) {
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) ReplList = nxt;
else prev->next = nxt;
free_mlist(p);
- cnt++;
}
else prev = p;
p = nxt;
}
- assert(cnt == Unstacked);
Unstacked = 0;
}