]> git.saurik.com Git - bison.git/commitdiff
xml: beware of user strings used to give a %prec to rules.
authorAkim Demaille <demaille@gostai.com>
Thu, 11 Jun 2009 12:45:10 +0000 (14:45 +0200)
committerAkim Demaille <demaille@gostai.com>
Thu, 11 Jun 2009 12:53:03 +0000 (14:53 +0200)
* tests/conflicts.at (%prec with user strings): New.
* src/gram.c (grammar_rules_print_xml): Escape the precedence for
XML output.

ChangeLog
src/gram.c
tests/conflicts.at

index 44db35c02ff2aa70465a0414ce794c3111fc9482..0147e0a55163c85f3cfafa17509719438bf6363d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2009-06-11  Akim Demaille  <demaille@gostai.com>
+
+       xml: beware of user strings used to give a %prec to rules.
+       * tests/conflicts.at (%prec with user strings): New.
+       * src/gram.c (grammar_rules_print_xml): Escape the precedence for
+       XML output.
+
 2009-06-11  Akim Demaille  <demaille@gostai.com>
 
        hash: check insertion for memory exhaustion.
index 725293bbbe847fd302095a76e3ab6afe2417713e..b2a0cb7a81db5bf7cb0ae5ca969fb14ff0a5d76a 100644 (file)
@@ -1,7 +1,7 @@
 /* Allocate input grammar variables for Bison.
 
    Copyright (C) 1984, 1986, 1989, 2001, 2002, 2003, 2005, 2006
-   2007, 2008 Free Software Foundation, Inc.
+   2007, 2008, 2009 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -224,7 +224,8 @@ grammar_rules_print_xml (FILE *out, int level)
         fprintf (out, "<rule number=\"%d\" usefulness=\"%s\"",
                  rules[r].number, usefulness);
         if (rules[r].precsym)
-          fprintf (out, " percent_prec=\"%s\"", rules[r].precsym->tag);
+          fprintf (out, " percent_prec=\"%s\"",
+                   xml_escape (rules[r].precsym->tag));
         fputs (">\n", out);
       }
       rule_lhs_print_xml (&rules[r], out, level + 3);
index 4c046dc7c5d077416b48ca63998533d941a7e90a..f91be51d3d5413e76006e169a88cef3a82694888 100644 (file)
@@ -600,9 +600,26 @@ input.y: expected 0 reduce/reduce conflicts
 AT_CLEANUP
 
 
-## ------------------------------- ##
-## %no-default-prec without %prec  ##
-## ------------------------------- ##
+## ------------------------- ##
+## %prec with user strings.  ##
+## ------------------------- ##
+
+AT_SETUP([%prec with user string])
+
+AT_DATA([[input.y]],
+[[%%
+exp:
+  "foo" %prec "foo"
+;
+]])
+
+AT_BISON_CHECK([-o input.c input.y])
+AT_CLEANUP
+
+
+## -------------------------------- ##
+## %no-default-prec without %prec.  ##
+## -------------------------------- ##
 
 AT_SETUP([%no-default-prec without %prec])