]> git.saurik.com Git - bison.git/commitdiff
Finer input type for yytranslate.
authorAkim Demaille <demaille@gostai.com>
Thu, 28 Aug 2008 08:32:14 +0000 (10:32 +0200)
committerAkim Demaille <demaille@gostai.com>
Thu, 13 Nov 2008 05:30:35 +0000 (06:30 +0100)
This patch is debatable: the tradition expects yylex to return an int
which happens to correspond to token_number (which is an enum).  This
allows for instance to return characters (such as '*' etc.).  But this
goes against the stronger typing I am trying to have with the new
lex interface which return a symbol_type.  So in this case, feed
yytranslate_ with a token_type.

* data/lalr1.cc (yytranslate_): When in %define lex-symbol,
expect a token_type.

ChangeLog
data/lalr1.cc

index 0ba320e21a59a5e95e1955bd44f08d2820f18b8e..fdc0d613933520746c963a8c48cb6aff64617c74 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+       Finer input type for yytranslate.
+       This patch is debatable: the tradition expects yylex to return an int
+       which happens to correspond to token_number (which is an enum).  This
+       allows for instance to return characters (such as '*' etc.).  But this
+       goes against the stronger typing I am trying to have with the new
+       lex interface which return a symbol_type.  So in this case, feed
+       yytranslate_ with a token_type.
+       
+       * data/lalr1.cc (yytranslate_): When in %define lex-symbol,
+       expect a token_type.
+
 2008-11-13  Akim Demaille  <demaille@gostai.com>
 
        Honor lex-params in %define lex_symbol mode.
index c2c634cf9459e8785792c1322941a0bcbd26bca8..6b0d9d9f1d80052a1a0e3703cf4c473c02e3d707 100644 (file)
@@ -635,7 +635,8 @@ m4_ifdef([b4_stype],
 #endif
 
     /// Convert a scanner token number \a t to a symbol number.
-    static inline token_number_type yytranslate_ (int t);
+    static inline token_number_type yytranslate_ (]b4_lex_symbol_if(
+                                                  [token_type], [int])[ t);
 
     /// A complete symbol, with its type.
     template <typename Exact>
@@ -1587,7 +1588,8 @@ b4_error_verbose_if([int yystate, int yytoken],
 
   /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
   ]b4_parser_class_name[::token_number_type
-  ]b4_parser_class_name[::yytranslate_ (int t)
+  ]b4_parser_class_name[::yytranslate_ (]b4_lex_symbol_if([token_type],
+                                                          [int])[ t)
   {
     static
     const token_number_type
@@ -1598,7 +1600,7 @@ b4_error_verbose_if([int yystate, int yytoken],
     const unsigned int user_token_number_max_ = ]b4_user_token_number_max[;
     const token_number_type undef_token_ = ]b4_undef_token_number[;
 
-    if (t <= yyeof_)
+    if (static_cast<int>(t) <= yyeof_)
       return yyeof_;
     else if (static_cast<unsigned int> (t) <= user_token_number_max_)
       return translate_table[t];