[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- FYI: fix string aliases for character tokens,
Joel E. Denny <=