bug-bison
[Top][All Lists]
Advanced

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

Bison 3.6.4 (was: EOF redefinition (3.5->3.6 error))


From: Akim Demaille
Subject: Bison 3.6.4 (was: EOF redefinition (3.5->3.6 error))
Date: Tue, 16 Jun 2020 07:26:44 +0200


> Le 15 juin 2020 à 12:06, Egor Pugin <egor.pugin@gmail.com> a écrit :
> 
> I've made the replacement you suggest.
> It compiles now. Thank you!

Excellent!  Thanks for the feedback.

I have released Bison 3.6.4 with that fix, and merged the maint branch into 
master.  Here is the corresponding diff.

Cheers!

commit c662b23735ae59a9e38dcef5ad88e185334235e7 (HEAD -> merge)
Merge: 251e1b13 627fecb1
Author: Akim Demaille <akim.demaille@gmail.com>
Date:   Mon Jun 15 21:16:04 2020 +0200

    Merge 'maint'
    
    * upstream/maint:
      maint: post-release administrivia
      version 3.6.4
      glr.cc: don't leak glr.c/glr.cc scaffolding to the user
    
    Some fixes were needed to adjust to recent changes in glr.cc and
    glr.c.
    
    * data/skeletons/glr.cc: Stop messing with the user's epilogue to
    insert glr.cc code.  We need that code to be inserted _before_ the
    user's epilogue, not after.  So define b4_glr_cc_pre_epilogue.
    * data/skeletons/glr.c: Use it.

diff --git a/.prev-version b/.prev-version
index 4a788a01..0f44168a 100644
--- a/.prev-version
+++ b/.prev-version
@@ -1 +1 @@
-3.6.3
+3.6.4
diff --git a/NEWS b/NEWS
index 1584d49e..6feb8258 100644
--- a/NEWS
+++ b/NEWS
@@ -54,6 +54,13 @@ GNU Bison NEWS
   to the -ffile-prefix-map in GCC. This option can be used to make bison output
   reproducible.
 
+* Noteworthy changes in release 3.6.4 (2020-06-15) [stable]
+
+** Bug fixes
+
+  In glr.cc some internal macros leaked in the user's code, and could damage
+  access to the token kinds.
+
 * Noteworthy changes in release 3.6.3 (2020-06-03) [stable]
 
 ** Bug fixes
diff --git a/TODO b/TODO
index 5d440169..33b1925b 100644
--- a/TODO
+++ b/TODO
@@ -12,6 +12,9 @@ list_get_end (gl_list_t list)
   return res;
 }
 
+** glr.cc
+Get rid of global_tokens_and_yystype.
+
 ** Bistromathic
 - Hitting tab on a line with a syntax error is ugly
 
@@ -149,6 +152,9 @@ Les catégories d'avertissements incluent :
 Line -1 and -3 should mention CATEGORIE, not CATEGORY.
 
 * Bison 3.8
+** Rewrite glr.cc
+Get rid of scaffolding in glr.c.
+
 ** Unit rules / Injection rules (Akim Demaille)
 Maybe we could expand unit rules (or "injections", see
 https://homepages.cwi.nl/~daybuild/daily-books/syntax/2-sdf/sdf.html), i.e.,
diff --git a/data/skeletons/glr.c b/data/skeletons/glr.c
index 1f877988..6ae27fa1 100644
--- a/data/skeletons/glr.c
+++ b/data/skeletons/glr.c
@@ -230,7 +230,9 @@ b4_copyright([Skeleton implementation for Bison GLR parsers 
in C],
 
 ]b4_defines_if([[#include "@basename(]b4_spec_header_file[@)"]],
                [b4_shared_declarations])[
-]b4_declare_symbol_enum[
+
+]b4_glr_cc_if([b4_glr_cc_setup],
+              [b4_declare_symbol_enum])[
 
 /* Default (constant) value used for initialization for null
    right-hand sides.  Unlike the standard yacc.c template, here we set
@@ -2731,7 +2733,8 @@ m4_if(b4_prefix, [yy], [],
 #define yynerrs ]b4_prefix[nerrs]b4_locations_if([[
 #define yylloc  ]b4_prefix[lloc]])])[
 
-]m4_ifdef([b4_pre_epilogue], [b4_pre_epilogue])[]dnl This is a hack for 
glr.cc.  To remove when we have a better glr.cc.
-b4_percent_code_get([[epilogue]])[]dnl
+]b4_glr_cc_if([b4_glr_cc_pre_epilogue
+b4_glr_cc_cleanup])[
+]b4_percent_code_get([[epilogue]])[]dnl
 b4_epilogue[]dnl
 b4_output_end
diff --git a/data/skeletons/glr.cc b/data/skeletons/glr.cc
index 374e5e83..1c75b27e 100644
--- a/data/skeletons/glr.cc
+++ b/data/skeletons/glr.cc
@@ -99,15 +99,9 @@ yyerror (]b4_locations_if([[const 
]b4_namespace_ref::b4_parser_class[::location_
          ]])[]m4_ifset([b4_parse_param], [b4_formals(b4_parse_param),
          ])[const char* msg);]])[
 
-]b4_percent_define_flag_if([[global_tokens_and_yystype]], [],
-[m4_define([b4_pre_epilogue],
-[[/* The user is using the C++ token kind, not the C one. */
-#undef ]b4_symbol(0, [id])
-])])[
-
-# Hijack the epilogue to define implementations (yyerror, parser member
+# Inserted before the epilogue to define implementations (yyerror, parser 
member
 # functions etc.).
-]m4_append([b4_epilogue],
+]m4_define([b4_glr_cc_pre_epilogue],
 [b4_syncline([@oline@], [@ofile@])dnl
 [
 /*------------------.
@@ -216,6 +210,62 @@ b4_namespace_close[]dnl
 ])
 
 
+m4_define([b4_define_symbol_kind],
+[m4_format([#define %-15s %s],
+           b4_symbol($][1, kind_base),
+           b4_namespace_ref[::]b4_parser_class[::symbol_kind::]b4_symbol($1, 
kind_base))
+])
+
+# b4_glr_cc_setup
+# ---------------
+# Setup redirections for glr.c: Map the names used in c.m4 to the ones used
+# in c++.m4.
+m4_define([b4_glr_cc_setup],
+[[#undef ]b4_symbol(-2, [id])[
+#define ]b4_symbol(-2, [id])[ 
]b4_namespace_ref[::]b4_parser_class[::token::]b4_symbol(-2, [id])[
+#undef ]b4_symbol(0, [id])[
+#define ]b4_symbol(0, [id])[ 
]b4_namespace_ref[::]b4_parser_class[::token::]b4_symbol(0, [id])[
+#undef ]b4_symbol(1, [id])[
+#define ]b4_symbol(1, [id])[ 
]b4_namespace_ref[::]b4_parser_class[::token::]b4_symbol(1, [id])[
+
+#ifndef ]b4_api_PREFIX[STYPE
+# define ]b4_api_PREFIX[STYPE 
]b4_namespace_ref[::]b4_parser_class[::semantic_type
+#endif
+#ifndef ]b4_api_PREFIX[LTYPE
+# define ]b4_api_PREFIX[LTYPE 
]b4_namespace_ref[::]b4_parser_class[::location_type
+#endif
+
+typedef ]b4_namespace_ref[::]b4_parser_class[::symbol_kind_type 
yysymbol_kind_t;
+
+// Expose C++ symbol kinds to C.
+]b4_define_symbol_kind(-2)dnl
+b4_symbol_foreach([b4_define_symbol_kind])])[
+]])
+
+
+m4_define([b4_undef_symbol_kind],
+[[#undef ]b4_symbol($1, kind_base)[
+]])
+
+
+# b4_glr_cc_cleanup
+# -----------------
+# Remove redirections for glr.c.
+m4_define([b4_glr_cc_cleanup],
+[b4_percent_define_flag_if([[global_tokens_and_yystype]], [],
+[[#undef ]b4_symbol(-2, [id])[
+#undef ]b4_symbol(0, [id])[
+#undef ]b4_symbol(1, [id])[
+]])[
+
+#undef ]b4_api_PREFIX[STYPE
+#undef ]b4_api_PREFIX[LTYPE
+
+]b4_undef_symbol_kind(-2)dnl
+b4_symbol_foreach([b4_undef_symbol_kind])dnl
+])
+
+
 # b4_shared_declarations(hh|cc)
 # -----------------------------
 # Declaration that might either go into the header (if --defines, $1 = hh)
@@ -333,37 +383,11 @@ b4_percent_define_flag_if([[global_tokens_and_yystype]],
 ])[
 ]b4_namespace_close[
 
-]dnl Map the name used in c.m4 to the one used in c++.m4.
-[#undef ]b4_symbol(-2, [id])[
-#define ]b4_symbol(-2, [id])[ 
]b4_namespace_ref[::]b4_parser_class[::token::]b4_symbol(-2, [id])[
-#undef ]b4_symbol(0, [id])[
-#define ]b4_symbol(0, [id])[ 
]b4_namespace_ref[::]b4_parser_class[::token::]b4_symbol(0, [id])[
-#undef ]b4_symbol(1, [id])[
-#define ]b4_symbol(1, [id])[ 
]b4_namespace_ref[::]b4_parser_class[::token::]b4_symbol(1, [id])[
-
-#ifndef ]b4_api_PREFIX[STYPE
-# define ]b4_api_PREFIX[STYPE 
]b4_namespace_ref[::]b4_parser_class[::semantic_type
-#endif
-#ifndef ]b4_api_PREFIX[LTYPE
-# define ]b4_api_PREFIX[LTYPE 
]b4_namespace_ref[::]b4_parser_class[::location_type
-#endif
-
-]m4_define([b4_define_symbol_kind],
-  [m4_format([#define %-15s %s],
-             b4_symbol($][1, kind_base),
-             
b4_namespace_ref[::]b4_parser_class[::symbol_kind::]b4_symbol($][1, kind_base))
-])[
-]m4_define([b4_declare_symbol_enum],
-[[typedef ]b4_namespace_ref[::]b4_parser_class[::symbol_kind_type 
yysymbol_kind_t;
-
-// Expose C++ symbol kinds to C.
-]b4_define_symbol_kind(-2)dnl
-b4_symbol_foreach([b4_define_symbol_kind])])[
 ]b4_percent_code_get([[provides]])[
 ]m4_popdef([b4_parse_param])dnl
-])
+])[
 
-b4_defines_if(
+]b4_defines_if(
 [b4_output_begin([b4_spec_header_file])
 b4_copyright([Skeleton interface for Bison GLR parsers in C++],
              [2002-2015, 2018-2020])[




reply via email to

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