Bug fix. Error recovery did not always work as expected. The generated
authorceriel <none@none>
Wed, 29 Oct 1986 11:16:55 +0000 (11:16 +0000)
committerceriel <none@none>
Wed, 29 Oct 1986 11:16:55 +0000 (11:16 +0000)
parser sometimes assumed that a token would not be deleted, and inserted
tokens in front of it, and then deleted the token after all. It should
at each error, first delete, and then insert.

util/LLgen/src/compute.c

index 00c7419..fd42e1b 100644 (file)
@@ -759,6 +759,10 @@ STATIC int nsafes(p) register p_nont p; {
        i = getntsafe(p);
        if (i != NOSAFETY) {
                i = do_safes(p->n_rule, i, &ch);
+               if (i < SCANDONE) i = SCANDONE;
+               /* After a nonterminal, we only know whether a scan was done
+                  or not
+               */
                if (getntout(p) != i) {
                        ch = 1;
                        setntout(p,i);