[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])[
- EOF redefinition (3.5->3.6 error), Egor Pugin, 2020/06/11
- Re: EOF redefinition (3.5->3.6 error), Akim Demaille, 2020/06/12
- Re: EOF redefinition (3.5->3.6 error), Egor Pugin, 2020/06/12
- Re: EOF redefinition (3.5->3.6 error), Akim Demaille, 2020/06/12
- Re: EOF redefinition (3.5->3.6 error), Egor Pugin, 2020/06/12
- Re: EOF redefinition (3.5->3.6 error), Akim Demaille, 2020/06/13
- Re: EOF redefinition (3.5->3.6 error), Egor Pugin, 2020/06/14
- Re: EOF redefinition (3.5->3.6 error), Akim Demaille, 2020/06/15
- Re: EOF redefinition (3.5->3.6 error), Egor Pugin, 2020/06/15
- Bison 3.6.4 (was: EOF redefinition (3.5->3.6 error)),
Akim Demaille <=