bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FYI: fix string aliases for character tokens


From: Joel E. Denny
Subject: FYI: fix string aliases for character tokens
Date: Sun, 13 Aug 2006 20:36:12 -0400 (EDT)

Index: ChangeLog
===================================================================
RCS file: /sources/bison/bison/ChangeLog,v
retrieving revision 1.1546
diff -p -u -r1.1546 ChangeLog
--- ChangeLog   13 Aug 2006 03:18:14 -0000      1.1546
+++ ChangeLog   14 Aug 2006 00:32:54 -0000
@@ -1,3 +1,13 @@
+2006-08-13  Joel E. Denny  <address@hidden>
+
+       Handle string aliases for character tokens correctly.
+       * src/symtab.c (symbol_user_token_number_set): If the token has an
+       alias, check and set its alias's user token number instead of its own,
+       which is set to indicate the alias.  Previously, every occurrence of
+       the character token in the grammar overwrote that alias indicator with
+       the character code.
+       * tests/input.at (String aliases for character tokens): New test.
+
 2006-08-12  Joel E. Denny  <address@hidden>
 
        * src/parse-gram.y: Add `%expect 0' so we don't overlook conflicts.
Index: src/symtab.c
===================================================================
RCS file: /sources/bison/bison/src/symtab.c,v
retrieving revision 1.74
diff -p -u -r1.74 symtab.c
--- src/symtab.c        29 Jul 2006 05:53:41 -0000      1.74
+++ src/symtab.c        14 Aug 2006 00:32:54 -0000
@@ -287,13 +287,19 @@ symbol_class_set (symbol *sym, symbol_cl
 void
 symbol_user_token_number_set (symbol *sym, int user_token_number, location loc)
 {
+  int *user_token_numberp;
+
   assert (sym->class == token_sym);
 
-  if (sym->user_token_number != USER_NUMBER_UNDEFINED
-      && sym->user_token_number != user_token_number)
+  if (sym->user_token_number != USER_NUMBER_ALIAS)
+    user_token_numberp = &sym->user_token_number;
+  else
+    user_token_numberp = &sym->alias->user_token_number;
+  if (*user_token_numberp != USER_NUMBER_UNDEFINED
+      && *user_token_numberp != user_token_number)
     complain_at (loc, _("redefining user token number of %s"), sym->tag);
 
-  sym->user_token_number = user_token_number;
+  *user_token_numberp = user_token_number;
   /* User defined $end token? */
   if (user_token_number == 0)
     {
Index: tests/input.at
===================================================================
RCS file: /sources/bison/bison/tests/input.at,v
retrieving revision 1.51
diff -p -u -r1.51 input.at
--- tests/input.at      29 Jul 2006 05:53:42 -0000      1.51
+++ tests/input.at      14 Aug 2006 00:32:54 -0000
@@ -471,3 +471,24 @@ AT_CHECK_REQUIRE(1.0, 0)
 AT_CHECK_REQUIRE(AT_PACKAGE_VERSION, 0)
 ## FIXME: Some day augment this version number.
 AT_CHECK_REQUIRE(100.0, 63)
+
+
+## ------------------------------------- ##
+## String aliases for character tokens.  ##
+## ------------------------------------- ##
+
+AT_SETUP([String aliases for character tokens])
+
+# Bison once thought a character token and its alias were different symbols
+# with the same user token number.
+
+AT_DATA_GRAMMAR([input.y],
+[[%token 'a' "a"
+%%
+start: 'a';
+%%
+]])
+
+AT_CHECK([bison -o input.c input.y])
+
+AT_CLEANUP




reply via email to

[Prev in Thread] Current Thread [Next in Thread]