From db0f5184f86a12c9583554d3305f15510e86c3ea Mon Sep 17 00:00:00 2001 From: ceriel Date: Mon, 2 Mar 1987 16:15:07 +0000 Subject: [PATCH] Improved userhooks --- util/LLgen/lib/rec | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/util/LLgen/lib/rec b/util/LLgen/lib/rec index 03d19ad3..0f666d1f 100644 --- a/util/LLgen/lib/rec +++ b/util/LLgen/lib/rec @@ -57,8 +57,13 @@ LLerror(t) { #ifdef LL_NEWMESS if (t == EOFILE) { - LLmessage(-1); - while ((LLsymb = LL_LEXI()) > 0) /* nothing */ ; +#ifdef LL_USERHOOK + LLuserhook(EOFILE); +#endif LL_USERHOOK + if (LLsymb != EOFILE) { + LLmessage(-1); + while ((LLsymb = LL_LEXI()) > 0) /* nothing */ ; + } return; } #endif @@ -98,6 +103,14 @@ LLskip() { return LLdoskip(0); } +LLuserhook(exp) +{ + int old = LLsymb; + LL_USERHOOK(exp); + LLread(); + return LLsymb != old; +} + LLdoskip(exp) { #endif LL_USERHOOK register int i; @@ -106,22 +119,19 @@ LLdoskip(exp) { retval = 0; for (;;) { +#ifdef LL_USERHOOK + if (LLuserhook(exp)) continue; +#endif LL_USERHOOK if (LLtcnt[LLcsymb] != 0) return retval; LLi = LLcsymb >> 3; LLb = 1 << (LLcsymb & 07); for (i = LL_NSETS - 1; i >= 0; i--) { if (LLscnt[i] != 0) { - if (LLsets[LL_SSIZE*i+LLi] & LLb) return retval; + if (LLsets[LL_SSIZE*i+LLi] & LLb) { + return retval; + } } } -#ifdef LL_USERHOOK - { - int old = LLsymb; - LL_USERHOOK(exp); - LLread(); - if (LLsymb != old) continue; - } -#endif LL_USERHOOK LLmessage(0); retval = 1; LLread();