]> git.saurik.com Git - bison.git/commitdiff
Don't let %prec take a nonterminal.
authorJoel E. Denny <jdenny@ces.clemson.edu>
Fri, 17 Nov 2006 20:07:08 +0000 (20:07 +0000)
committerJoel E. Denny <jdenny@ces.clemson.edu>
Fri, 17 Nov 2006 20:07:08 +0000 (20:07 +0000)
* src/reader.c (grammar_current_rule_prec_set): Make the %prec symbol a
token.
* tests/input.at (%prec takes a token): New test checking that %prec
won't take a nonterminal.

ChangeLog
src/reader.c
tests/input.at

index b7b1f3767c3f30187fdb86b08f6ba3eb49bf943c..33c3e2da8862d5ff81d0427ff768924cdd56a8f7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2006-11-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Don't let %prec take a nonterminal.
+       * src/reader.c (grammar_current_rule_prec_set): Make the %prec symbol a
+       token.
+       * tests/input.at (%prec takes a token): New test checking that %prec
+       won't take a nonterminal.
+
 2006-11-10  Joel E. Denny  <jdenny@ces.clemson.edu>
 
        * tests/testsuite.at (AT_CHECK): Don't miss an exit value of 0 because
 2006-11-10  Joel E. Denny  <jdenny@ces.clemson.edu>
 
        * tests/testsuite.at (AT_CHECK): Don't miss an exit value of 0 because
index d5cd629fde13025cbb55b3114b237c8e15ad9bae..7b7692328bdc558d6b6aea82b813cc2a614e66e1 100644 (file)
@@ -387,6 +387,7 @@ grammar_midrule_action (void)
 void
 grammar_current_rule_prec_set (symbol *precsym, location loc)
 {
 void
 grammar_current_rule_prec_set (symbol *precsym, location loc)
 {
+  symbol_class_set (precsym, token_sym, loc, false);
   if (current_rule->ruleprec)
     complain_at (loc, _("only one %s allowed per rule"), "%prec");
   current_rule->ruleprec = precsym;
   if (current_rule->ruleprec)
     complain_at (loc, _("only one %s allowed per rule"), "%prec");
   current_rule->ruleprec = precsym;
index 1239df00193e83588381cc52c36dd3686f2371e0..dfcebfd9a6902cefb6a534f130c44e504c4e028c 100644 (file)
@@ -680,3 +680,24 @@ start: false_start ;
 AT_CHECK([bison -o input.c input.y])
 
 AT_CLEANUP
 AT_CHECK([bison -o input.c input.y])
 
 AT_CLEANUP
+
+
+## --------------------- ##
+## %prec takes a token.  ##
+## --------------------- ##
+
+AT_SETUP([%prec takes a token])
+
+# Bison once allowed %prec sym where sym was a nonterminal.
+
+AT_DATA([input.y],
+[[%%
+start: PREC %prec PREC ;
+PREC: ;
+]])
+
+AT_CHECK([bison input.y], [1], [],
+[[input.y:3.1-4: rule given for PREC, which is a token
+]])
+
+AT_CLEANUP