I was looking for a place where to issue a warning about Bison’s private macros, and noticed too many confusing comments and useless #lines.
commit 81a9580622fc69375f8062f66a7ee0d0ef525397 Author: Akim Demaille <[email protected]> Date: Sun Oct 21 09:40:16 2018 +0200 all: avoid useless comments and #lines Currently we emit useless code for places where we might issue user content, but there is none. This commit avoids this. Besides, some of the comments looked like implementation details ("Copy the first part of user declarations"), rather than made for the reader of the result ("First part of user prologue"). On Bison's parse-gram.c we get: @@ -76,10 +76,6 @@ #define yynerrs gram_nerrs -/* Copy the first part of user declarations. */ - -#line 82 "src/parse-gram.c" /* yacc.c:339 */ - * data/bison.m4 (b4_define_user_code): Accept a comment to document the section. Do not emit any code if the content is empty. Adjust callers to not emit the comment. Do not * data/glr.c, data/glr.cc, data/lalr1.cc, data/lalr1.java, data/yacc.c: Adjust. diff --git a/data/bison.m4 b/data/bison.m4 index cb777d07..f727a04d 100644 --- a/data/bison.m4 +++ b/data/bison.m4 @@ -613,13 +613,15 @@ m4_define([b4_user_code], b4_syncline([@oline@], [@ofile@])]) -# b4_define_user_code(MACRO) -# -------------------------- -# From b4_MACRO, build b4_user_MACRO that includes the synclines. +# b4_define_user_code(MACRO, COMMENT) +# ----------------------------------- +# From b4_MACRO, if defined, build b4_user_MACRO that includes the synclines. m4_define([b4_define_user_code], [m4_define([b4_user_$1], -[b4_user_code([b4_$1])])]) - + [m4_ifdef([b4_$1], + [m4_ifval([$2], + [b4_comment([$2]) +])b4_user_code([b4_$1])])])]) # b4_user_actions # b4_user_initial_action @@ -629,9 +631,9 @@ m4_define([b4_define_user_code], # ---------------------- # Macros that issue user code, ending with synclines. b4_define_user_code([actions]) -b4_define_user_code([initial_action]) -b4_define_user_code([post_prologue]) -b4_define_user_code([pre_prologue]) +b4_define_user_code([initial_action], [User initialization code.]) +b4_define_user_code([post_prologue], [Second part of user prologue.]) +b4_define_user_code([pre_prologue], [First part of user prologue.]) b4_define_user_code([union_members]) @@ -1056,8 +1058,6 @@ b4_check_user_names_wrap([[code]], [[qualifier]]) ## ---------------- ## # m4_define_default([b4_lex_param], []) dnl breaks other skeletons -m4_define_default([b4_pre_prologue], []) -m4_define_default([b4_post_prologue], []) m4_define_default([b4_epilogue], []) m4_define_default([b4_parse_param], []) diff --git a/data/glr.c b/data/glr.c index 8247af5b..6da6d45f 100644 --- a/data/glr.c +++ b/data/glr.c @@ -236,7 +236,6 @@ b4_copyright([Skeleton implementation for Bison GLR parsers in C], #define yynerrs ]b4_prefix[nerrs]b4_locations_if([[ #define yylloc ]b4_prefix[lloc]])]))[ -/* First part of user declarations. */ ]b4_user_pre_prologue[ ]b4_null_define[ @@ -259,9 +258,8 @@ b4_copyright([Skeleton implementation for Bison GLR parsers in C], static YYSTYPE yyval_default;]b4_locations_if([[ static YYLTYPE yyloc_default][]b4_yyloc_default;])[ -/* Copy the second part of user declarations. */ -]b4_user_post_prologue -b4_percent_code_get[]dnl +]b4_user_post_prologue[ +]b4_percent_code_get[]dnl [#include <stdio.h> #include <stdlib.h> @@ -820,7 +818,7 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp, ]])[ switch (yyn) { - ]b4_user_actions[ +]b4_user_actions[ default: break; } @@ -2266,7 +2264,6 @@ yyrecoverSyntaxError (yyGLRStack* yystackp]b4_user_formals[) yylloc = yyloc_default;])[ ]m4_ifdef([b4_initial_action], [ b4_dollar_pushdef([yylval], [], [yylloc])dnl - /* User initialization code. */ b4_user_initial_action b4_dollar_popdef])[]dnl [ diff --git a/data/glr.cc b/data/glr.cc index f6632c9b..b6139da7 100644 --- a/data/glr.cc +++ b/data/glr.cc @@ -44,7 +44,7 @@ # filename member). # We require a pure interface. -m4_define([b4_pure_flag], [1]) +m4_define([b4_pure_flag], [1]) m4_include(b4_pkgdatadir/[c++.m4]) b4_bison_locations_if([m4_include(b4_pkgdatadir/[location.cc])]) diff --git a/data/lalr1.cc b/data/lalr1.cc index 6633cbd2..6b6d1584 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -418,13 +418,11 @@ m4_if(b4_prefix, [yy], [], // Take the name prefix into account. [#]define yylex b4_prefix[]lex])[ -// First part of user declarations. ]b4_user_pre_prologue[ ]b4_defines_if([[#include "@basename(]b4_spec_defines_file[@)"]], [b4_shared_declarations([cc])])[ -// User implementation prologue. ]b4_user_post_prologue[ ]b4_percent_code_get[ @@ -768,7 +766,6 @@ m4_if(b4_prefix, [yy], [], ]m4_ifdef([b4_initial_action], [ b4_dollar_pushdef([yyla.value], [], [yyla.location])dnl - // User initialization code. b4_user_initial_action b4_dollar_popdef])[]dnl diff --git a/data/lalr1.java b/data/lalr1.java index 86798dc0..d270850b 100644 --- a/data/lalr1.java +++ b/data/lalr1.java @@ -87,10 +87,10 @@ b4_copyright([Skeleton implementation for Bison LALR(1) parsers in Java], [2007-2015, 2018]) b4_percent_define_ifdef([package], [package b4_percent_define_get([package]); -])[/* First part of user declarations. */ -]b4_user_pre_prologue -b4_user_post_prologue -b4_percent_code_get([[imports]]) +])[ +]b4_user_pre_prologue[ +]b4_user_post_prologue[ +]b4_percent_code_get([[imports]]) [/** * A Bison parser, automatically generated from <tt>]m4_bpatsubst(b4_file_name, [^"\(.*\)"$], [\1])[</tt>. * @@ -586,7 +586,6 @@ b4_define_state])[ yystack.push (yystate, yylval ]b4_locations_if([, yylloc])[); ]m4_ifdef([b4_initial_action], [ b4_dollar_pushdef([yylval], [], [yylloc])dnl - /* User initialization code. */ b4_user_initial_action b4_dollar_popdef[]dnl ])[ @@ -597,7 +596,6 @@ b4_dollar_popdef[]dnl push_parse_initialize (); ]m4_ifdef([b4_initial_action], [ b4_dollar_pushdef([yylval], [], [yylloc])dnl - /* User initialization code. */ b4_user_initial_action b4_dollar_popdef[]dnl ])[ diff --git a/data/yacc.c b/data/yacc.c index 34d719b0..880379ba 100644 --- a/data/yacc.c +++ b/data/yacc.c @@ -335,9 +335,7 @@ m4_if(b4_api_prefix, [yy], [], #define yychar ]b4_prefix[char]b4_locations_if([[ #define yylloc ]b4_prefix[lloc]])]))[ -/* Copy the first part of user declarations. */ ]b4_user_pre_prologue[ - ]b4_null_define[ /* Enabling verbose error messages. */ @@ -354,9 +352,8 @@ m4_if(b4_api_prefix, [yy], [], ]])dnl b4_shared_declarations[ -/* Copy the second part of user declarations. */ -]b4_user_post_prologue -b4_percent_code_get[]dnl +]b4_user_post_prologue[ +]b4_percent_code_get[]dnl [#ifdef short # undef short @@ -1433,7 +1430,6 @@ b4_function_define([[yyparse]], [[int]], b4_parse_param)[ ]m4_ifdef([b4_initial_action], [ b4_dollar_pushdef([m4_define([b4_dollar_dollar_used])yylval], [], [b4_push_if([b4_pure_if([*])yypushed_loc], [yylloc])])dnl -/* User initialization code. */ b4_user_initial_action b4_dollar_popdef[]dnl m4_ifdef([b4_dollar_dollar_used],[[ yyvsp[0] = yylval; @@ -1653,7 +1649,7 @@ yyreduce: int yychar_backup = yychar; switch (yyn) { - ]b4_user_actions[ +]b4_user_actions[ default: break; } if (yychar_backup != yychar)
