From: ceriel Date: Wed, 5 Aug 1987 12:52:15 +0000 (+0000) Subject: fixed a subtle bug: in some obscure cases involving conflict resolvers and X-Git-Tag: release-5-5~3949 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=6439f0922084a1b5fe3528564e58086dc76f75e7;p=ack.git fixed a subtle bug: in some obscure cases involving conflict resolvers and defaults, wrong code was generated --- diff --git a/util/LLgen/src/gencode.c b/util/LLgen/src/gencode.c index e67b28441..59ff77899 100644 --- a/util/LLgen/src/gencode.c +++ b/util/LLgen/src/gencode.c @@ -526,12 +526,6 @@ alternation(p, safety, mustscan, mustpop, lb) register p_gram p; { fputs("switch(LLcsymb) {\n", f); while (g_gettype(p) != EORULE) { l = g_getlink(p); - if (unsafe && (l->l_flag & DEF)) { - haddefault = 1; - fprintf(f, -"default: if (LLskip()) goto L_%d;\ngoto L_%d;\n", - lb, hulp2); - } if (l->l_flag & COND) { if (l->l_flag & NOCONF) { fputs("#ifdef ___NOCONFLICT___\n", f); @@ -551,7 +545,7 @@ alternation(p, safety, mustscan, mustpop, lb) register p_gram p; { free((p_mem) set); } } - if (!haddefault && (l->l_flag & DEF)) { + if (!unsafe && (l->l_flag & DEF)) { haddefault = 1; fputs("default:\n", f); } @@ -565,6 +559,12 @@ alternation(p, safety, mustscan, mustpop, lb) register p_gram p; { } rulecode(l->l_rule, nsafe, mustscan, mustpop); fputs(c_break,f); + if (unsafe && (l->l_flag & DEF)) { + haddefault = 1; + fprintf(f, +"default: if (LLskip()) goto L_%d;\ngoto L_%d;\n", + lb, hulp2); + } if ((l->l_flag & COND) && !(l->l_flag & NOCONF)) { p++; fprintf(f,"L_%d : ;\n",hulp);