bison-patches
[Top][All Lists]
Advanced

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

[PATCH 10/21] yysymbol_type_t: always assign an enumerator


From: Akim Demaille
Subject: [PATCH 10/21] yysymbol_type_t: always assign an enumerator
Date: Wed, 1 Apr 2020 08:37:36 +0200

Currently we define enumerators only for symbols that have an
identifier.  That rules out tokens such as '+', and nonterminals such
as foo-bar and foo.bar.  As a consequence we are taking chances: the
compiler might compile yysymbol_type_t as too small an integral type
for some symbol codes.

* data/skeletons/bison.m4 (b4_symbol_sid): Forge a unique symbol
identifier for symbols that don't have an ID.
---
 data/skeletons/bison.m4 | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/data/skeletons/bison.m4 b/data/skeletons/bison.m4
index d54ea2b7..1bd30dd1 100644
--- a/data/skeletons/bison.m4
+++ b/data/skeletons/bison.m4
@@ -407,8 +407,10 @@ m4_define([_b4_symbol],
 
 # b4_symbol_sid(NUM)
 # ------------------
-# Build the symbol ID based for this symbol.  Return empty
-# if that would produce an invalid symbol.
+# Build the symbol ID based for this symbol.  It must always exist,
+# otherwise some symbols might not be represented in the enum, which
+# might be compiled into too small a type to contain all the symbol
+# numbers.
 m4_define([b4_symbol_sid],
 [m4_case([$1],
   [-2],                           [[YYSYMBOL_YYEMPTY]],
@@ -417,8 +419,9 @@ m4_define([b4_symbol_sid],
       [$accept],                  [[YYSYMBOL_YYACCEPT]],
       [error],                    [[YYSYMBOL_YYERROR]],
       [$undefined],               [[YYSYMBOL_YYUNDEF]],
-      [m4_quote(b4_symbol_if([$1], [has_id],
-                                  [[YYSYMBOL_]]m4_quote(_b4_symbol([$1], 
[id]))))])])])
+      [b4_symbol_if([$1], [has_id],
+                                  [[YYSYMBOL_]]m4_quote(_b4_symbol([$1], 
[id])),
+                                  
[[YYSYMBOL_$1_][]m4_bpatsubst(m4_quote(_b4_symbol([$1], [tag])), 
[[^a-zA-Z_0-9]], [_])])])])])
 
 
 # b4_symbol(NUM, FIELD)
-- 
2.26.0




reply via email to

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