]> git.saurik.com Git - bison.git/commitdiff
* src/reader.c (readgram): Make sure rules for mid-rule actions
authorAkim Demaille <akim@epita.fr>
Mon, 26 Nov 2001 15:27:58 +0000 (15:27 +0000)
committerAkim Demaille <akim@epita.fr>
Mon, 26 Nov 2001 15:27:58 +0000 (15:27 +0000)
have a lineno equal to that of their host rule.
Reported by Hans Aberg.
* tests/regression.at (Rule Line Numbers): New.

ChangeLog
src/reader.c
tests/regression.at

index 22be68e6aed77d5d920b08f9f809c473ae804ad3..b7c5a449df5592b97c924d41fd1b32f68af04071 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2001-11-26  Akim Demaille  <akim@epita.fr>
+
+       * src/reader.c (readgram): Make sure rules for mid-rule actions
+       have a lineno equal to that of their host rule.
+       Reported by Hans Aberg.
+       * tests/regression.at (Rule Line Numbers): New.
+
 2001-11-26  Akim Demaille  <akim@epita.fr>
 
        * src/LR0.c (allocate_itemsets): kernel_size contains ints, not
index 8f01a7c4ae49678991d211b710799a335f0f8eff..73e79704a6024fcacda7a22a7c928d1550c3b6cd 100644 (file)
@@ -1474,12 +1474,14 @@ readgram (void)
                  /* Make a dummy nonterminal, a gensym.  */
                  bucket *sdummy = gensym ();
 
-                 /* Make a new rule, whose body is empty,
-                    before the current one, so that the action
-                    just read can belong to it.  */
+                 /* Make a new rule, whose body is empty, before the
+                    current one, so that the action just read can
+                    belong to it.  */
                  nrules++;
                  nitems++;
                  p = symbol_list_new (sdummy);
+                 /* Attach its lineno to that of the host rule. */
+                 p->line = crule->line;
                  if (crule1)
                    crule1->next = p;
                  else
index 68f02adc99b4451f39e9b769e5d71338c6e109e7..f6b5fe0d5fa77586f19e26b64576f1d8ad33201c 100644 (file)
@@ -242,6 +242,148 @@ AT_CLEANUP
 
 
 
+
+## ------------------- ##
+## Rule Line Numbers.  ##
+## ------------------- ##
+
+AT_SETUP([Rule Line Numbers])
+
+AT_DATA([input.y],
+[[%%
+expr:
+'a'
+
+{
+
+}
+
+'b'
+
+{
+
+}
+
+|
+
+
+{
+
+
+}
+
+'c'
+
+{
+
+}
+]])
+
+AT_CHECK([bison input.y -o input.c -v], 0, [], [])
+
+# Check the contents of the report.
+AT_CHECK([cat input.output], [],
+[[
+Grammar
+
+  Number, Line, Rule
+    1   2 @1 -> /* empty */
+    2   2 expr -> 'a' @1 'b'
+    3  15 @2 -> /* empty */
+    4  15 expr -> @2 'c'
+
+Terminals, with rules where they appear
+
+$ (-1)
+'a' (97) 2
+'b' (98) 2
+'c' (99) 4
+error (256)
+
+Nonterminals, with rules where they appear
+
+expr (6)
+    on left: 2 4
+@1 (7)
+    on left: 1, on right: 2
+@2 (8)
+    on left: 3, on right: 4
+
+
+state 0
+
+    'a'        shift, and go to state 1
+
+    $default   reduce using rule 3 (@2)
+
+    expr       go to state 6
+    @2         go to state 2
+
+
+
+state 1
+
+    expr  ->  'a' . @1 'b'   (rule 2)
+
+    $default   reduce using rule 1 (@1)
+
+    @1         go to state 3
+
+
+
+state 2
+
+    expr  ->  @2 . 'c'   (rule 4)
+
+    'c'        shift, and go to state 4
+
+
+
+state 3
+
+    expr  ->  'a' @1 . 'b'   (rule 2)
+
+    'b'        shift, and go to state 5
+
+
+
+state 4
+
+    expr  ->  @2 'c' .   (rule 4)
+
+    $default   reduce using rule 4 (expr)
+
+
+
+state 5
+
+    expr  ->  'a' @1 'b' .   (rule 2)
+
+    $default   reduce using rule 2 (expr)
+
+
+
+state 6
+
+    $          go to state 7
+
+
+
+state 7
+
+    $          go to state 8
+
+
+
+state 8
+
+    $default   accept
+]])
+
+AT_CLEANUP
+
+
+
 ## -------------------- ##
 ## %expect not enough.  ##
 ## -------------------- ##