X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/fcd8e2011da5f87d20189ad69a989c166e05413f..30bb2edccf7f352a0c149513905f5e1fcac04aaf:/ChangeLog diff --git a/ChangeLog b/ChangeLog index d310fbe3..e3c3e0e5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,5783 @@ +2008-11-10 Akim Demaille + + Avoid trailing spaces. + * data/c.m4: b4_comment(TEXT): Don't indent empty lines. + * data/lalr1.cc: Don't indent before rule and symbol actions, as + they can be empty, and anyway this incorrectly indents the first + action. + +2008-11-10 Akim Demaille + + Comment changes. + +2008-11-10 Akim Demaille + + Use "enum" for integral constants. + This is just nicer to read, I observed no speedup. + + * data/lalr1.cc (yyeof_, yylast_, yynnts_, yyempty_, yyfinal_) + (yterror_, yyerrcode_, yyntokens_): Define as members of an enum. + (yyuser_token_number_max_, yyundef_token_): Move into... + (yytranslate_): here. + +2008-11-10 Akim Demaille + + Shortcuts in bench directives. + * etc/bench.pl.in (parse_dirs): New. + Use it. + (bench_variant_parser, bench_fusion_parser): Use %s and %d. + Create the benches in "benches/". + +2008-11-10 Akim Demaille + + Formatting changes. + * data/lalr1.cc: here. + +2008-11-10 Akim Demaille + + Adjust verbose message to using emacs. + * etc/bench.pl.in: Inform compilation-mode when we change the + directory. + (generate_grammar_list): Recognize %define "variant" in addition + to %define variant. + +2008-11-10 Akim Demaille + + Classify symbols by type-name. + * src/uniqstr.h (UNIQSTR_CMP): New. + * src/output.c (symbol_type_name_cmp, symbols_by_type_name) + (type_names_output): New. + (muscles_output): Use it. + * data/lalr1.cc (b4_symbol_action_): Remove. + (b4_symbol_case_, b4_type_action_): New. + Adjust uses of b4_symbol_action_ to use b4_type_action_. + +2008-11-10 Akim Demaille + + Change the handling of the symbols in the skeletons. + Before we were using tables which lines were the symbols and which + columns were things like number, tag, type-name etc. It is was + difficult to extend: each time a column was added, all the numbers had + to be updated (you asked for colon $2, not for "tag"). Also, it was + hard to filter these tables when only a subset of the symbols (say the + tokens, or the nterms, or the tokens that have and external number + *and* a type-name) was of interest. + + Now instead of monolithic tables, we define one macro per cell. For + instance "b4_symbol(0, tag)" is a macro name which contents is + self-decriptive. The macro "b4_symbol" provides easier access to + these cells. + + * src/output.c (type_names_output): Remove. + (symbol_numbers_output, symbol_definitions_output): New. + (muscles_output): Call them. + (prepare_symbols): Define b4_symbols_number. + +2008-11-10 Akim Demaille + + --trace=muscles + * src/getargs.h, src/getargs.c (trace_muscle): New. + (trace_types, trace_args): Support it. + * src/output.c (output_skeleton): Use it. + +2008-11-10 Akim Demaille + + muscles_output. + * src/output.c (muscles_output): New, extracted from... + (output_skeleton): here. + Adjust. + +2008-11-10 Akim Demaille + + Formatting changes. + +2008-11-10 Akim Demaille + + Update the variant example. + * examples/variant.yy: Formatting changes. + One stage build. + +2008-11-10 Akim Demaille + + Support constructor with an argument. + This improves the "list" bench by 2%. + + * data/lalr1.cc (variant::build): Add an overloaded version with + an argument. + * tests/c++.at (AT_CHECK_VARIANT): Check it. + +2008-11-10 Akim Demaille + + Test variants. + * tests/c++.at (AT_CHECK_VARIANTS): New. + Use it with and without %define assert. + +2008-11-10 Akim Demaille + + Add %precedence support. + Unfortunately it is not possible to reuse the %prec directive. This + is because to please POSIX, we do not require to end the rules with a + semicolon. As a result, + + foo: bar %prec baz + + is ambiguous: either a rule which precedence is that of baz, or a rule, + and then a declaration of the precedence of the token baz. + + * doc/bison.texinfo: Document %precedence. + (Precedence Only): New. + * src/assoc.h, src/assoc.c (precedence_assoc): New. + * src/conflicts.c (resolve_sr_conflict): Support it. + * src/scan-gram.l, src/parse-gram.y (%precedence): New token. + Parse it. + * tests/calc.at: Use %precedence for NEG. + * tests/conflicts.at (%precedence does not suffice) + (%precedence suffices): New tests. + +2008-11-09 Akim Demaille + + Make benches in a sub dirs. + * etc/bench.pl.in ($dir): New. + Use it. + Check the use of constructors with an argument. + (bench_variant_parser): Fix. + +2008-11-09 Akim Demaille + + fix eof condition + +2008-11-09 Akim Demaille + + Fix --help. + +2008-11-09 Akim Demaille + + Require the generation of parse-gram.output. + * src/Makefile.am (YACC): Pass --report=all. + +2008-11-09 Akim Demaille + + Formatting changes. + +2008-11-09 Akim Demaille + + Update TODO. + * TODO: Remove obsolete items. + Update others. + +2008-11-09 Akim Demaille + + Enhance bench.pl. + * etc/bench.pl.in (parse, parse_expr, parse_term, parse_fact) + (@token, $grammar, $bench): New. + (generate_grammar_variant): Rename as... + (generate_grammar_list): this. + (generate_grammar): Adjust. + (bench_grammar): Rename as... + (bench): this. + Use it in the various bench-marking routines. + (-b, -g): New options. + +2008-11-09 Akim Demaille + + Use a static hierarchy for symbols in the C++ parser. + * data/lalr1.cc (symbol_base_type, symbol_type) + (stack_symbol_type): Make it a static hierarchy. + Adjust dependencies. + +2008-11-09 Akim Demaille + + bench.pl -d, --directive. + * etc/bench.pl.in (@directive): New. + (&bench_grammar): Use it. + (&bench_list_grammar): New, to provide access to the "variant" + grammar. + Use it. + (getopts): Support -d, --directive. + +2008-11-09 Akim Demaille + + Use inline for small operations. + * data/lalr1.cc (symbol_base_type, symbol_type) + (stack_symbol_type): Declare constructor and other operations as + inline. + (yy_destroy_): Inline. + +2008-11-09 Akim Demaille + + Introduce a hierarchy for symbols. + * data/lalr1.cc (symbol_base_type, symbol_type): New. + (data_type): Rename as... + (stack_symbol_type): this. + Derive from symbol_base_type. + (yy_symbol_value_print_): Merge into... + (yy_symbol_print_): this. + Rename as... + (yy_print_): this. + (yydestruct_): Rename as... + (yy_destroy_): this. + (b4_symbols_actions, YY_SYMBOL_PRINT): Adjust. + (parser::parse): yyla is now of symbol_type. + Use its type member instead of yytoken. + +2008-11-09 Akim Demaille + + Rename data_type and stack_symbol_type. + * data/lalr1.cc (data_type): Rename as... + (stack_symbol_type): this. + +2008-11-09 Akim Demaille + + Handle semantic value and location together. + * data/lalr1.cc (b4_symbol_actions): Bounce $$ and @$ to + yydata.value and yydata.location. + (yy_symbol_value_print_, yy_symbol_print_, yydestruct_) + (YY_SYMBOL_PRINT): Now take semantic value and location as a + single arg. + Adjust all callers. + (yydestruct_): New overload for a stack symbol. + +2008-11-09 Akim Demaille + + Push a complete symbol, not connected parts. + * data/lalr1.cc (yypush_): Take a data_type&, not disconnected + state, value and location. + Adjust callers. + +2008-11-09 Akim Demaille + + Agregate yylval and yylloc. + * data/lalr1.cc (parser::yylval, parser::yylloc): Replace by... + (parser::yyla): this. + +2008-11-09 Akim Demaille + + Rely on the state stack to display reduction traces. + To display rhs symbols before a reduction, we used information about the rule + reduced, which required the tables yyrhs and yyprhs. Now use rely only on the + state stack to get the same information. + + * data/lalr1.cc (b4_rhs_data, b4_rhs_state): New. + Use them. + (parser::yyrhs_, parser::yyprhs_): Remove. + (parser::yy_reduce_print_): Use the state stack. + +2008-11-09 Akim Demaille + + Fuse yyval and yyloc into yylhs. + * data/lalr1.cc (b4_lhs_value, b4_lhs_location): Adjust to using + yylhs. + (parse): Replace yyval and yyloc with yylhs.value and + yylhs.location. + After a user action, compute yylhs.state earlier. + (yyerrlab1): Do not play tricks with yylhs.location, rather, use a + fresh error_token. + +2008-11-09 Di-an Jan + + Remove unused variable. + * src/output.c (type_names_output): Remove unused variable sep. + +2008-11-09 Paolo Bonzini + + Change tests/output.at quoting. + * tests/output.at (AT_CHECK_OUTPUT): Use conventional m4 quoting when + expanding arguments. + +2008-11-07 Joel E. Denny + + Don't add a semicolon to actions for %skeleton or %language. + It breaks Java test cases as reported by Akim Demaille. + * src/scan-code.l: Implement. + +2008-11-07 Joel E. Denny + + Clean up %skeleton and %language priority implementation. + * src/getargs.c (skeleton_prio): Use default_prio rather than 2, and + remove static qualifier because others will soon need to see it. + (language_prio): Likewise. + (getargs): Use command_line_prio rather than 0. + * src/getargs.h (command_line_prio, grammar_prio, default_prio): New + enum fields. + (skeleton_prio): Extern it. + (language_prio): Extern it. + * src/parse-gram.y: Use grammar_prio rather than 1. + +2008-11-07 Akim Demaille + + Moving push traces into yypush_. + * data/lalr1.cc (yypush_): Now takes a optional trace message. + Adjust all uses. + +2008-11-07 Akim Demaille + + The single-stack C++ parser is now the standard one. + * data/lalr1.cc: Rename as... + * data/lalr1-split.cc: this. + * data/lalr1-fusion.cc: Rename as... + * data/lalr1.cc: this. + * etc/bench.pl.in: Adjust. + +2008-11-07 Akim Demaille + + Avoid empty-if warnings. + Reported by Quentin Hocquet. + + * data/lalr1-fusion.cc (YY_SYMBOL_PRINT, YY_REDUCE_PRINT) + (YY_STACK_PRINT): Provide some contents even when !YYDEBUG. + +2008-11-07 Akim Demaille + + Pass command line location to skeleton_arg and language_argmatch. + * src/getargs.h, src/getargs.c (skeleton_arg, language_argmatch): + The location argument is now mandatory. + Adjust all dependencies. + (getargs): Use command_line_location. + +2008-11-07 Akim Demaille + + -D, --define. + * src/getargs.c (usage): Document -D. + Fix help string for --locations. + (command_line_location): New. + (short_options, long_options, getargs): Support -D, --define. + (getargs): Move -d support at the right place. + * doc/bison.texinfo (Bison Options): Update. + * tests/input.at (%define, --define): New. + +2008-11-07 Akim Demaille + + Initialize the muscle table before parsing the command line. + * src/getargs.c (quotearg.h, muscle_tab.h): Include. + (getargs): Define file_name. + * src/main.c (main): Initialize muscle_tab before calling + getargs. + * src/muscle_tab.c (muscle_init): No longer define file_name, as + its value is not available yet. + +2008-11-07 Akim Demaille + + Locations without columns for command line arguments. + * src/location.c (location_print): Don't display negative columns. + * src/location.h: Document this. + +2008-11-07 Akim Demaille + + Fix --help. + * src/getargs.c (usage): Fix help string for -W. + +2008-11-07 Akim Demaille + + Handle more general types of option arguments. + * build-aux/cross-options.pl: The argument ends at the first + space, not the first non-symbol character. + Use @var for each word appearing the argument description. + +2008-11-07 Akim Demaille + + Destroy the variants that remain on the stack in case of error. + * data/lalr1-fusion.cc (yydestruct_): Invoke the variant's + destructor. + Display the value only if yymsg is nonnull. + (yyreduce): Invoke yydestruct_ when popping lhs symbols. + +2008-11-07 Akim Demaille + + Add "%define assert" to variants. + This is used to help the user catch cases where some value gets + ovewritten by a new one. This should not happen, as this will + probably leak. + + Unfortunately this uncovered a bug in the C++ parser itself: the + lookahead value was not destroyed between two calls to yylex. For + instance if the previous lookahead was a std::string, and then an int, + then the value of the std::string was correctly taken (i.e., the + lookahead was now an empty string), but std::string structure itself + was not reclaimed. + + This is now done in variant::build(other&) (which is used to take the + value of the lookahead): other is not only stolen from its value, it + is also destroyed. This incurs a new performance penalty of a few + percent, and union becomes faster again. + + * data/lalr1-fusion.cc (variant::build(other&)): Destroy other. + (b4_variant_if): New. + (variant::built): New. + Use it whereever the status of the variant changes. + * etc/bench.pl.in: Check the penalty of %define assert. + +2008-11-07 Akim Demaille + + Use "%define variant" in bench.pl. + * etc/bench.pl.in: No longer use the pseudo directive %variants, + just use %define variants. + +2008-11-07 Akim Demaille + + Regen. + * src/parse-gram.h, src/parse-gram.c: Regen. + +2008-11-04 Joel E. Denny + + Fix user actions without a trailing semicolon. + Reported by Sergei Steshenko at + . + * THANKS (Sergei Steshenko): Add. + * src/scan-code.l (SC_RULE_ACTION): Fix it. + * tests/regression.at (Fix user actions without a trailing semicolon): + New test case. + +2008-11-04 Akim Demaille + + Use b4_copyright_years. + * data/yacc.c (b4_copyright_years): New. + Fix its value according to the comments in the file. + Use it and undefine it. + +2008-11-04 Akim Demaille + + Formatting changes. + * data/lalr1-fusion.cc, src/parse-gram.y: here. + +2008-11-04 Akim Demaille + + Formatting changes. + * data/lalr1-fusion.cc: here. + +2008-11-04 Akim Demaille + + Use strict on bench.pl. + * etc/bench.pl.in (&run, &generate_grammar): New. + Rename the grammar generating functions for consistency. + Change the interface so that the list of benches to run is passed + as (optionless) arguments. + (&compile): Use &run. + +2008-11-04 Akim Demaille + + Remove spurious initial empty lines. + * data/glr.c, data/glr.cc, data/lalr1.cc, data/lalr1.java, + * data/yacc.c: End the @output lines with an @. + +2008-11-04 Akim Demaille + + Improve the display of sizes. + * etc/bench.p.in: Higher precision. + Sort by decreasing size. + +2008-11-04 Akim Demaille + + Don't memcpy C++ structures. + * data/lalr1-fusion.cc (b4_symbol_variant): Adjust additional + arguments. + (variant::build): New overload for + copy-construction-that-destroys. + (variant::swap): New. + (parser::yypush_): Use it in variant mode. + +2008-11-04 Akim Demaille + + Better defaults for bench.pl. + * etc/bench.pl.in ($verbose, $cflags, $iterations): Change the + default values. + Adjust &verbose uses. + (-q, --quiet): New. + +2008-11-04 Akim Demaille + + Make variant.yy more complex. + std::list cannot be copied via memcpy, they are more demanding than + std::string. Use one std::list to strengthen the test. + + * examples/variant.yy: Use lalr1-fusion.cc, not lalr1.cc. + Adjust. + Create a list of strings, instead of a single large string. + +2008-11-04 Akim Demaille + + bench.pl --bench. + * etc/bench.pl.in (--bench, $bench): New. + +2008-11-04 Akim Demaille + + Sort methods. + * data/lalr1-fusion.cc (destroy): Use as() in its definition. + Define it after as(). + +2008-11-04 Akim Demaille + + Useless parens. + * data/lalr1-fusion.cc (b4_rhs_location): Remove useless parens. + +2008-11-04 Akim Demaille + + Issue missing synclines after user actions. + * data/c.m4 (b4_case): Issue synclines on the output file. + +2008-11-04 Akim Demaille + + Remove trailing empty line. + * data/lalr1-fusion.cc: Don't add an empty line after the user's + epilogue. + +2008-11-04 Akim Demaille + + Fix output of copyright years. + * data/bison.m4 (b4_copyright): Fix the indentation of the + copyright year paragraph. + Use b4_copyright_years when no years are given. + * data/lalr1.cc, data/lalr1-fusion.cc, data/location.cc + (b4_copyright_years): New. + Use it. + +2008-11-04 Akim Demaille + + Avoid the spurious initial empty line. + * data/lalr1-fusion.cc, data/location.cc: Put a trailing "@" at + the end of @output request to suppress the empty line that + results. + +2008-11-04 Akim Demaille + + Remove parser::rhs_number_type. + * data/lalr1-fusion.cc (rhs_number_type): No longer define it. + (yyrhs_): Use b4_table_define. + +2008-11-04 Akim Demaille + + Fix iteration type. + * data/lalr1-fusion.cc: Use an int to iterate up to an int. + +2008-11-04 Akim Demaille + + Factor the declaration of the integer tables. + * data/lalr1-fusion.cc (b4_table_define): New. + Use it. + +2008-11-03 Akim Demaille + + Fix indentation of tables in lalr1.cc + * data/lalr1-fusion.cc: Fix the indentation. + +2008-11-03 Akim Demaille + + Destroy the lhs symbols after reduction. + * data/lalr1-fusion.cc (parse): After the user action, when in + variant mode, destroy the lhs symbols. + +2008-11-03 Akim Demaille + + Simplify yysyntax_error_ use. + * data/lalr1-fusion.cc (yysyntax_error_): Always pass it the token + type, but make it unnamed in the declaration when it is not used. + +2008-11-03 Akim Demaille + + Let yy::variant::build return an lvalue. + * data/lalr1-fusion.cc (variant::build): Return a reference to the + object. + +2008-11-03 Akim Demaille + + Define yy::variant only when needed. + * data/lalr1-fusion.cc (yy::variant): Define only if variants are + used. + +2008-11-03 Akim Demaille + + Bench the three-stack lalr1.cc. + * etc/bench.pl.in: Bench the three-stack lalr1.cc vs. the + one-stack one. + +2008-11-03 Akim Demaille + + Fail on parse error in calc++. + * doc/bison.texinfo (calc++.cc): Propagate failures to the exit + status. + * examples/calc++/test ($me, $number, $exit, run): New. + Use them to propagate errors to the exit status. + +2008-11-03 Akim Demaille + + Don't specify the skeleton twice in the example. + * examples/calc++/Makefile.am: Don't pass -S to Bison, the grammar + file does what is needed. + +2008-11-03 Akim Demaille + + bench: Improve output. + * etc/bench.pl.in (bench_grammar): Tune the printf format. + +2008-11-03 Akim Demaille + + bench: check impact of %debug on variants. + * etc/bench.pl.in (variant_grammar): Fix the computation of + $variant. + Generate a grammar file that can work with or without %debug. + Do use the @directive. + (bench_variant_parser): Check impact of %debug. + (@directives): Rename all the occurrences to... + (@directive): this, for consistency. + +2008-11-03 Akim Demaille + + bench: report the size too. + * etc/bench.pl.in ($iterations): Defaults to -3. + (&bench_grammar): Require hireswallclock. + Compute and display the size of the result. + More comments. + +2008-11-03 Akim Demaille + + bench: More use of the verbosity level. + * etc/bench.pl.in ($verbose, &verbose): New. + Use them. + More POD documentation. + +2008-11-03 Akim Demaille + + bench.pl: a command line interface + * etc/bench.pl.in: More doc. + Some fixes in the documentation. + ($cflags, $iterations, &help, &getopt): New. + Use them. + (&variant_grammar): Let the number of stages be 10 times what is + specified. + +2008-11-03 Akim Demaille + + Bench the use of Boost.Variants. + * etc/bench.pl.in ($cxx, &variant_grammar, &bench_variant_parser): + New. + (&compile): Be ready to compile C++ parsers. + (&bench_push_parser): Move debug information to the outermost + level. + * THANKS: Add Michiel De Wilde. + +2008-11-03 Akim Demaille + + bench.pl: Pass directives as a list instead of as a string. + * etc/bench.pl.in (&directives): New. + (&triangular_grammar, &calc_grammar): Use it to format the Bison + directives. + (&triangular_grammar): Do use the directives (were ignored). + (&bench_grammar, &bench_push_parser): Adjust to pass lists of + directives. + +2008-11-03 Akim Demaille + + Improve genericity of bench.pl. + * etc/bench.pl.in (&bench_grammar): Take the set of benches as + argument. + (&bench_push_parser): New. + Call it. + +2008-11-03 Akim Demaille + + Add documentation to bench.pl. + * etc/bench.pl.in: Comment changes. + +2008-11-03 Akim Demaille + + Fuse the three stacks into a single one. + In order to make it easy to perform benchmarks to ensure that there are no + performance loss, lalr1.cc is forked into lalr1-fusion.cc. Eventually, + lalr1-fusion.cc will replace lalr1.cc. + + Meanwhile, to make sure that lalr1-fusion.cc is correctly exercized by the + test suite, the user must install a symbolic link from lalr1.cc to it. + + Instead of having three stacks (state, value, location), use a stack + of triples. This considerably simplifies the code (and it will be + easier not to require locations as currently does the C++ parser), + and also gives a 10% speedup according to etc/bench (probably mainly since + memory allocation is done once instead of three times). + + Another motivation is to make it easier to destruct properly + semantic values: now that they are bound to their state (hence + symbol type) it will be easier to call the appropriate destructor. + + These changes should probably benefit the C parser too. + + * data/lalr1.cc: Copy as... * data/lalr1-fusion.cc: this new + file. + (b4_rhs_value, b4_rhs_location): New definitions overriding those + from c++.m4. + (state_stack_type, semantic_stack_type, location_stack_type) + (yystate_stack_, yysemantic_stack_, yylocation_stack_): Remove. + (data_type, stack_type, yystack_): New. + (YYLLOC_DEFAULT, yypush_): Adjust. + (yyerror_range): Now based on data_type, not location_type. + +2008-11-03 Akim Demaille + + Push the state, value, and location at the same time. + This is needed to prepare a forthcoming patch that fuses the three + stacks into one. + + * data/lalr1.cc (parser::yypush_): New. + (parser::yynewstate): Change the semantics: instead of arriving to + this label when value and location have been pushed, but yystate + is to be pushed on the state stack, now the three of them must + have been pushed before. yystate still must be the new state. + This allows to use yypush_ everywhere instead of individual + handling of the stacks. + +2008-11-03 Akim Demaille + + Prefer references to pointers. + * data/lalr1.cc (b4_symbol_actions): New, overrides the default C + definition to use references instead of pointers. + (yy_symbol_value_print_, yy_symbol_print_, yydestruct_): + Take the value and location as references. + Adjust callers. + +2008-11-03 Akim Demaille + + stack::size instead of stack::height. + * data/lalr1.cc (stack::height): Rename as... + (stack::size): this. + Fix the output type. + Comment changes. + +2008-11-03 Akim Demaille + + Use variants to support objects as semantic values. + This patch was inspired by work by Michiel De Wilde. But he used Boost + variants which (i) requires Boost on the user side, (ii) is slow, and + (iii) has useless overhead (the parser knows the type of the semantic value + there is no reason to duplicate this information as Boost.Variants do). + + This implementation reserves a buffer large enough to store the largest + objects. yy::variant implements this buffer. It was implemented with + Quentin Hocquet. + + * src/output.c (type_names_output): New. + (output_skeleton): Invoke it. + * data/c++.m4 (b4_variant_if): New. + (b4_symbol_value): If needed, provide a definition for variants. + * data/lalr1.cc (b4_symbol_value, b4_symbol_action_) + (b4_symbol_variant, _b4_char_sizeof_counter, _b4_char_sizeof_dummy) + (b4_char_sizeof, yy::variant): New. + (parser::parse): If variants are requested, define + parser::union_type, parser::variant, change the definition of + semantic_type, construct $$ before running the user action instead + of performing a default $$ = $1. + * examples/variant.yy: New. + Based on an example by Michiel De Wilde. + +2008-11-03 Akim Demaille + + Parameterize the extraction of semantic values. + To make future changes easier, no longer rely on ".TYPE" being the + way to get a semantic value. + + * data/c.m4 (b4_symbol_value): New. + Use it. + * data/c++.m4, data/yacc.c: Use it. + * data/glr.c: Use b4_symbol_value. + (b4_rhs_data): New. + Use it. + +2008-11-03 Akim Demaille + + Prepare easier M4 changes. + * data/lalr1.cc: Use escaped [] instead of literals to prepare + future changes. + +2008-11-02 Joel E. Denny + + Initiate further development. + * NEWS: Create an empty section for new entries. + * gnulib: Update submodule to HEAD. + +2008-11-02 Joel E. Denny + + * NEWS: Version 2.4. + +2008-11-02 Joel E. Denny + + Prepare for next release. + * NEWS: Briefly mention changes since 2.3b. + * README: Say GNU m4 1.4.6, which we've been requiring in release + announcements already, not 1.4.3, which breaks the build. + +2008-11-02 Joel E. Denny + + Say %language is experimental. + We're thinking of extending it's effect on output file naming. See the + thread at + . + * NEWS: Say it's experimental. + * doc/bison.texinfo (Decl Summary): Say it's experimental, and so don't + recommend it over %skeleton for now. + (Bison Options): Likewise. + (C++ Bison Interface): Use %skeleton not %language. + (Calc++ Parser): Use %skeleton not %language. + * src/getargs.c (usage): Say it's experimental. + +2008-11-01 Di-an Jan + Paolo Bonzini + + Support all Java parser class modifiers. + * data/java.m4 (b4_percent_define_get3): New. + (b4_final_if, b4_strictfp_if): New. + * data/lalr1.java (final, strictfp, extends, implements): Support. + * doc/bison.texinfo (final, strictfp, extends, implements): Add + documentation. + * tests/java.at (AT_CHECK_JAVA_MINIMAL): New. + (AT_CHECK_JAVA_MINIMAL_W_LEXER): New. + (AT_CHECK_JAVA_GREP): New. + (Java parser class modifiers): New test. + (Java parser class extends and implements): New test. + + Model exception propagation better with throws and lex_throws. + * data/java.m4 (b4_list2): New. + (throws): Change default. + * data/lalr1.java (yyaction): Add throws. + (parse): Add lex_throws in addition to throws. + * doc/bison.texinfo (throws, lex_throws): Add documentation. + * tests/java.at (Java throws specifications): New test. + + Improve documentation for Java parsers. + * doc/bison.texinfo (Java Parsers): Add subsections. + Don't quote first argument of %define. + (Java Bison Interface): Document output files. Move documentation + of parser class and merge into Java Parser Interface. Document + features that error out. Document directives with no effect. + Move note about Javadoc higher. + (Java Semantic Values): Explicitly mention stype. + Document that generic types cannot be used. + (Java Location Values): Use @deftypeivar. Document constructors. + Correct return value for toString. + (Java Parser Interface): List undocumented constants/fields. + Move documentation of fields added by %parse-param closer to list + of members. Document that token names are added as fields. + Document constructors accurately. Remove error method. + (Java Scanner Interface): Move note on %pure-parser to Java Bison + Interface. Describe %code lexer and yylex accutately. + Remove documentation that does not match the code. + (Java Action Features): New. + (Java Differences): Add reference. Add item on semantic values. + Add note about @{ ... @}. Clarify %% epilogue placement. + (Java Declarations Summary): New. + + Fix Java skeleton. + * data/java.m4 (b4_prefix): Correct quoting for m4_define_default. + (b4_remove_comma): Quote test argument. + (b4_identification): Remove "bison" field. + * tests/java.at (Java parser class and package names): New test. + (Java %parse-param and %lex-param): New test. + (Java stype, position_class and location_class): New test. + +2008-10-31 Di-an Jan + + * data/lalr1.jave: Update copyright years. + (YYParser): Correct name of "generated from" file in Javadoc: + use b4_file_name instead of @ofile@. + (Location constructor): Correct Javadoc parameter name. + (yylloc): Add missing opening m4 quote after b4_location_if. + This removes a stray [ in the Javadoc of Lexer.getStartPos. + (Lexer.yyerror): Fix incorrect m4 and Javadoc. + (YYParser constructor): Correct Javadoc parameter name. + +2008-10-30 Joel E. Denny + + Always put auxiliary code files in the same dir as other output files. + * src/files.c (compute_file_name_parts): When the user specifies + --output but not --file-prefix, extract the directory prefix from the + file prefix not from the grammar file name. This affects the location + of files like location.hh generated by the C++ skeleton. The includes + in the other output files require this fix. + * tests/output.at (AT_CHECK_OUTPUT): Automatically create directories + for expected output files. + (Output files): Add a test for the above. + +2008-10-29 Joel E. Denny + + * gnulib: Update submodule to HEAD. + +2008-10-28 Joel E. Denny + + Update copyright year. + * src/files.c: Here. + +2008-10-28 Di-an Jan (tiny change) + + Don't overwrite the input file. + * src/files.c (output_file_name_check): Fatal error if using input file + for output. + * tests/output.at: (AT_CHECK_CONFLICTING_OUTPUT): Add return status + argument. + (Conflicting output files): Add test. + +2008-10-28 Akim Demaille + + Space changes. + * data/lalr1.cc: Formatting changes. + +2008-10-28 Akim Demaille + + Don't define debugging functions when !YYDEBUG. + * data/lalr1.cc (debug_stream, set_debug_stream) + (debug_level_type, debug_level, set_debug_level): Don't + declare them when YYDEBUG is not defined. + The implementation are already YYDEBUG-aware. + +2008-10-28 Akim Demaille + + Prefer "continue" for empty loop bodies. + * etc/bench.pl.in: Use "continue" instead of {}. + +2008-10-28 Akim Demaille + + Space and comments changes. + * data/c++.m4, data/glr.c, data/lalr1.cc: Copyright year changes. + * data/c.m4, data/lalr1.cc: Space changes. + +2008-10-28 Akim Demaille + + Make gnulib a submodule. + * gnulib: New. + * .gitmodules (gnulib): New. + +2008-10-18 Joel E. Denny + + Fix yyerror_range for user-defined location type in C++. Reported by + Georg Sauthoff at + . + * data/lalr1.cc (parse): Change type of yyerror_range to location_type. + * THANKS (Georg Sauthoff): Add. + +2008-10-18 Joel E. Denny + + Update several administrative files mainly to facilitate releasing. + * HACKING (Administrivia): Make the git-merge-changelog notes more + helpful. + (Test suite): Don't say lalr1.cc is not exercised in the test suite. + (Release Procedure): Update for git and add numerous details that were + previously missing. + * Makefile.am (EXTRA_DIST): Remove Makefile.cfg and Makefile.maint. + * maint.mk (announcement): Don't list bison as a bootstrap tool so + that announcements don't claim we bootstrapped with whatever bison + happened to be in PATH. Add flex as a bootstrap tool. + * Makefile.maint: Remove, previously replaced by maint.mk. + * Makefile.cfg: Remove, and migrate settings to... + * cfg.mk: ... here for the sake of `make announcement'. + * bootstrap.conf (gnulib_modules): Add announce-gen. + * README: Say GNU Bison instead of just Bison. Suggested by Karl + Berry. + +2008-10-08 Di-an Jan (tiny change) + + Small but important bugfixes for the Java skeleton. + * data/lalr1.java (yyerror): Change Location to b4_location_type. + (yy_symbol_print): Call toString on yyvaluep. + +2008-08-29 Akim Demaille + + Clarify UPDATED use. + * doc/bison.texinfo: It refers to the last edition of this file, + not to the release date of Bison. + Reported by Joel E. Denny. + +2008-08-29 Akim Demaille + + * README: Update FAQ pointer. + Reported by Joel E. Denny. + +2008-08-27 Eric Blake + + Resync m4sugar from autoconf. + * data/m4sugar/m4sugar.m4 (m4_defn, m4_popdef, m4_undefine) + (m4_init): Adjust to latest m4.git changes. + (m4_mapall_sep, _m4_list_cmp, m4_version_compare): Reduce side + effects. + * data/m4sugar/foreach.m4 (_m4_shiftn): Fix off-by-one bug. + (_m4_list_cmp): Reduce side effects. + +2008-08-27 Akim Demaille + + Check yyerrok in calc.at. + * tests/calc.at (calc.y): Use yyerrok on "( error )". + (AT_CHECK_CALC): Add a check that ensures that yyerrok works as + expected. + +2008-08-27 Akim Demaille + + Support yyerrok in lalr1.cc. + YYBACKUP is still to import back into lalr1.cc. + * data/lalr1.cc (yyerrork, yyclearin, YYRECOVERING): Define. + +2008-08-26 Joel E. Denny + + For maintainer-check*, don't recompile for a $(VERSION) update. + * cfg.mk: New file. + (_is-dist-target): Override the one in GNUmakefile. + * Makefile.am (EXTRA_DIST): Add cfg.mk. + +2008-08-26 Joel E. Denny + + Update for recent change to gnulib. + * src/parse-gram.y: Don't include strverscmp.h. It comes from + string.h now. + +2008-08-15 Eric Blake + + Remaining m4sugar merge from autoconf. + * data/m4sugar/m4sugar.m4: Copy entire file from autoconf. + * data/m4sugar/foreach.m4: New file, copied from autoconf. + * data/Makefile.am (dist_m4sugar_DATA): Distribute it. + * src/output.c (output_skeleton): Tell m4 how to find it. + + Partial m4sugar merge from autoconf: m4_map. + * data/m4sugar/m4sugar.m4 (m4_fst): Delete. + (m4_map, m4_map_sep, _m4_map): Rewrite more efficiently. + (m4_apply, _m4_apply, m4_mapall, m4_mapall_sep): New macros. + * data/java.m4 (b4_token_enums): Use more efficient short-circuit + for empty list. + * data/c.m4 (b4_token_defines, b4_token_enums, b4_c_ansi_formals): + Likewise. + (b4_parse_param_for): Avoid m4_fst, now that autoconf no longer + declares it. + +2008-08-07 Joel E. Denny + + Keep .version and PACKAGE_VERSION in sync. + * Makefile.am ($(top_srcdir)/.version): Declare configure as a + dependency, and add comments justifying this in more detail. Discussed + starting at + . + +2008-08-06 Eric Blake + + Partial m4sugar merge from autoconf: m4_shiftn. + * data/m4sugar/m4sugar.m4 (m4_shiftn): Faster implementation. + (m4_shift2, m4_shift3): New macros. + (m4_case, m4_bmatch, m4_bpatsubsts, m4_join): Adjust clients. + * data/c.m4 (b4_c_function_def, b4_c_ansi_function_def) + (b4_c_ansi_function_decl, b4_c_function_call): Likewise. + * data/java.m4 (b4_remove_comma): Likewise. + + Partial m4sugar merge from autoconf: m4_wrap vs. m4 1.6. + * data/m4sugar/m4sugar.m4 (m4_unquote, m4_wrap_lifo): New macros. + (m4_wrap): Guarantee FIFO order, in spite of m4 1.6. + (m4_init): Consolidate wrapped text into single m4_wrap. + * data/bison.m4 (b4_check_user_names_wrap): Stick with LIFO order + in wrapped text. + +2008-08-05 Eric Blake + + Partial m4sugar merge from autoconf: builtins, version.m4. + * data/m4sugar/m4sugar.m4 (changeword): Nuke. + (m4_prepend): Remove, as it is unused and inherently quadratic, + whereas m4_append is linear in newer m4. + (m4_mkstemp): New builtin. + (m4_symbols): Make rename conditional. + (m4_version_prereq): Ensure fatal error if used in bison, which + intentionally lacks version.m4. + + Fix comments in m4sugar. + * data/m4sugar/m4sugar.m4: Comment changes, borrowed from autoconf. + +2008-08-02 Joel E. Denny + + Update for recent .gitignore fix in Gnulib. + * bootstrap: Back out 2008-07-18 hack now that gnulib-tool creates + anchored .gitignore entries. + +2008-08-02 Joel E. Denny + + Set gnu or gnits strictness. + * configure.ac (AM_INIT_AUTOMAKE): Set gnu strictness during + development and gnits strictness for releases. Based on Eric Blake's + suggestion at + . + +2008-07-31 Paolo Bonzini + + * NEWS: Clarify documentation of %language. + +2008-07-31 Paolo Bonzini + + Support usage of git-merge-changelog. + * .gitattributes: New. + * HACKING: Document usage of git-merge-changelog. + * bootstrap: Install git-merge-changelog entries in .git/config + if appropriate. + +2008-07-27 Joel E. Denny + + Remove remaining dependence on CVS Id keyword. + * ChangeLog: For the sake of people still using CVS, don't use dollars + when mentioning Id. + * data/xslt/bison.xsl: Remove Id from header comments, where it was + unusual anyway. + * data/xslt/xml2dot.xsl: Likewise. + * data/xslt/xml2text.xsl: Likewise. + * data/xslt/xml2xhtml.xsl: Likewise. + * doc/Doxyfile.in (PROJECT_NUMBER): Don't use ID. + * doc/Makefile.am (neutralize): Remove, no longer needed. + (.x.1): Don't use neutralize. + (edit): Don't substitute for ID. + (Doxyfile): Don't define Id, and thus don't depend on ChangeLog. + +2008-07-27 Joel E. Denny + + Fix dependence on computed configure variables. + * doc/Makefile.am (common_dep): Depend on $(top_srcdir)/configure not + $(top_srcdir)/configure.ac so that changes to computed variables, such + as PACKAGE_VERSION, are seen. + * tests/Makefile.am ($(srcdir)/package.m4): Likewise. + +2008-07-20 Joel E. Denny + + Update copyright dates for recent changes. + * Makefile.am: Here. + * src/Makefile.am: Here. + * src/reduce.c: Here. + * tests/reduce.at: Here. + +2008-07-18 Joel E. Denny + + Use git-version-gen for version names between releases. + * .cvsignore (.tarball-version, GNUmakefile, *~): Add. + * .gitignore (/.tarball-version, /GNUmakefile, /*~): Add. + * .prev-version: New. + * .version.in: Remove. + * ChangeLog: Remove the Id previously used for capturing the CVS + revision. + * GNUmakefile: Remove, now copied from Gnulib. + * Makefile.am: Add code suggested by comments in + build-aux/git-version-gen. + (EXTRA_DIST): Remove GNUmakefile, handled by Gnulib. Add maint.mk, + .prev-version, and .version. + * NEWS (2.3b+): Rename to... + (?.?): ... this because we're dropping the "+" version naming scheme, + but, in general, we still can't be sure of our next release name. + * bootstrap: Add a quick hack to remove from .gitignore the + GNUmakefile entry that gnulib adds. We already have a /GNUmakefile + entry. This should really be fixed in gnulib instead. + * bootstrap.conf (gnulib_modules): Add gnumakefile. + * configure.ac (AC_INIT): Set version name by invoking + build-aux/git-version-gen. + (AC_CONFIG_FILES): Remove .version, now generated by + build-aux/git-version-gen. + * maint.mk: New, copied from coreutils. + * doc/.cvsignore (bison.1): Add. + * doc/.gitignore (/bison.1): Add. + * doc/bison.1: Remove, generated. + * src/.cvsignore (revision.c): Remove. + * src/.gitignore (/revision.c): Remove. + * src/Makefile.am (bison_SOURCES): Remove revision.c and revision.h. + (BUILT_SOURCES): Remove revision.c. + (revision.c): Remove. + * src/getargs.c (version): Don't print revision after the VERSION. + * src/revision.h: Remove. + +2008-07-16 Joel E. Denny + + Fix untranslatable composition of sentences. Reported by Goran + Uddeborg at + . + * THANKS (Goran Uddeborg): Add. + * src/reduce.c (reduce_print): Report the number of nonterminals and + rules useless in the grammar in separate sentences. + * tests/reduce.at (Useless Rules): Update output. + (Reduced Automaton): Likewise. + (Underivable Rules): Likewise. + (Empty Language): Likewise. + +2008-07-15 Joel E. Denny + + Fix some .gitignore and .cvsignore problems. + * bootstrap (insert_sorted_if_absent): Replace all uses with... + (insert_vc_ignore): ... this new function, which prepends `/' to all + .gitignore entries before passing them to insert_sorted_if_absent. + * bootstrap.conf (vc_ignore): Set to '.cvsignore .gitignore' so that + .cvsignore files are maintained even though Bison developers run + bootstrap while using Git. + * .cvsignore (*.patch *.log log patches applied): Remove, apparently + unneeded by Bison. + (gnulib): Add. + * .gitignore (/*.patch *.log log patches applied): Remove, broken and + unneeded. Reported by Eric Blake. + * lib/.gitignore (/*~): Add. + * po/.cvsignore, runtime-po/.cvsignore: Sync with .gitignore. + * examples/calc++/.gitignore (/calc++.exe): Add. Reported by Eric + Blake. + * src/.gitignore (/bison.exe): Add. Reported by Eric Blake. + +2008-07-15 Joel E. Denny + + Improve forward-compatibility with GNU M4. Reported by Eric Blake at + . + * bootstrap.conf (gnulib_modules): Add unsetenv. + * lib/.gitignore, lib/.cvsignore (/unsetenv.c): Add. + * m4/.gitignore, m4/.cvsignore (/environ.m4): Add. + (/setenv.m4): Add. + * src/output.c (output_skeleton): For the m4 invocation, pass -dV as + the first argument because it may become position-dependent, and unset + POSIXLY_CORRECT so Bison's skeletons have access to GNU M4 extensions. + Add comments explaining these issues in more detail. + +2008-07-14 Joel E. Denny + + Add .gitignore everywhere based on .cvsignore. + * .gitignore: New. + * build-aux/.gitignore: New. + * data/.gitignore: New. + * doc/.gitignore: New. + * etc/.gitignore: New. + * examples/.gitignore: New. + * examples/calc++/.gitignore: New. + * lib/.gitignore: New. + * m4/.gitignore: New. + * po/.gitignore: New. + * runtime-po/.gitignore: New. + * src/.gitignore: New. + * tests/.gitignore: New. + +2008-05-27 Joel E. Denny + + * NEWS (2.3b+): New section, empty for now. + * configure.ac (AC_INIT): 2.3b -> 2.3b+. + +2008-05-27 Joel E. Denny + + * NEWS (2.3b): Update release date since there has been a delay in + getting the announcements and tarballs out. + +2008-05-23 Joel E. Denny + + * NEWS: Version 2.3b. + * configure.ac (AC_INIT): Likewise. + (PACKAGE_COPYRIGHT_YEAR): Update to 2008. + +2008-05-23 Joel E. Denny + + * HACKING: Don't say don't mention HACKING in the ChangeLog. We've + been doing it for years. + (Test suite): Mention maintainer-push-check and maintainer-xml-check. + (Release Procedure): Add FIXME about make alpha being unmaintained. + +2008-05-13 Joel E. Denny + + * data/yacc.c: Reformat m4 a little for readability. + * src/lalr.c (build_relations): Correct comment. + +2008-05-12 Juan Manuel Guerrero + + DJGPP specific issue. + * djgpp/config.sed: Fixes required to run configure scripts generated + by autoconf 2.62. + +2008-05-07 Joel E. Denny + + * HACKING (Release Procedure): translation@iro.umontreal.ca is now + coordinator@translationproject.org. + +2008-05-06 Joel E. Denny + + * THANKS: Add Eric Blake. + +2008-04-23 Eric Blake + + Revert prior patch, by working around autoconf regression. + * tests/output.at (m4_expand): Add workaround for autoconf 2.62. + ("Output file name: ("): Uncomment test. + ("Output file name: )"): Likewise. + Based on an idea from Noah Misch. + +2008-04-21 Joel E. Denny + + Work-around an Autoconf 2.62 AT_SETUP bug that was not present in + 2.61. Reported by Juan Manuel Guerrero at + . + * tests/output.at ("Output file name: ("): Comment out test case for + now. + ("Output file name: )"): Likewise. + +2008-04-21 Joel E. Denny + + * GNUmakefile: Update git-version-gen invocation so make dist + succeeds. + +2008-04-21 Joel E. Denny + + Update to the current gnulib CVS repository, and fix trigraph handling + in Bison. + * bootstrap: Update gnulib CVS repository URL. + (symlink_to_dir): Encapsulate the code that guarantees the destination + directory exists into... + (check_dst_dir): ... this new function, and... + (cp_mark_as_generated): ... reuse it here so that bootstrap doesn't + fail when copying files into lib/uniwidth/. + * src/output.c (prepare_symbols): When writing yytname muscles, where + symbol names will be encoded in C-string literals, tell quotearg to + escape trigraphs. This used to be the default in gnulib. + * tests/regression.at (Token definitions): Because of the change in + gnulib's quotearg behavior, string_as_id in parse-gram.y no longer + escapes trigraphs in symbol names. Thus, yytname no longer has + trigraphs unnecessarily doubly escaped. Update test case output. + Extend test case to be sure Bison's own error messages will no longer + have trigraphs in symbol names unnecessarily escaped once. + +2008-04-20 Joel E. Denny + + Fix make dist infinite loop reported by Juan Manuel Guerrero at + . + * .cvsignore: Add .version. + * .version.in: New. + * bootstrap.conf (gnulib_modules): Add git-version-gen. + * configure.ac (AC_CONFIG_FILES): Add .version. + * build-aux/.cvsignore: Add git-version-gen. + +2008-03-08 Joel E. Denny + + * NEWS (2.3a+): Mention that -g now takes an argument. + * doc/bison.texinfo (Bison Options): Reword -W entry a little for + consistency. Update the -g and -x entries now that they take + arguments. Use brackets to indicate optional arguments. + * src/getargs.c (usage): Explain the relationship between arguments of + long and short options more completely. Document --defines and -d + separately since the former takes an argument but, for POSIX Yacc, the + latter does not. + (short_options): Let -W take an optional argument like --warnings. + (getargs): Sort cases. + +2008-02-28 Akim Demaille + + * doc/bison.texinfo: Fix a few typos. + +2008-02-28 Akim Demaille + + * doc/bison.texinfo (Bison Options): Document -W. + Based on Joel E. Denny's NEWS entry, and Automake's documentation. + +2008-02-28 Akim Demaille + + * src/getargs.c (short_options): Split and sort for readability. + -g and -x take optional arguments, just like their long options. + * build-aux/cross-options.pl: Use /x to make the regexp easier to + understand. + Fix the handling of $opt which resulted in all the argument to be + considered as optional. + +2008-02-22 Joel E. Denny + + * NEWS (2.3a+): Don't say %language is experimental. Mention Java and + say its interface is experimental. + * doc/bison.texinfo (Decl Summary): In the %language entry, mention + Java. + (Bison Options): In the -L and --language entry, mention Java. + (Java Bison Interface): Say the interface is experimental. + * src/getargs.c (usage): Mention -L and --language. + + * NEWS (2.3a+): Say the push parsing interface is experimental. + * doc/bison.texinfo (Push Decl): Likewise. + (Decl Summary): Likewise in the "%define api.push_pull" entry. + (Push Parser Function): Likewise. + (Pull Parser Function): Likewise. + (Parser Create Function): Likewise. + (Parser Delete Function): Likewise. + (Table of Symbols): Likewise in the yypstate_delete, yypstate_new, + yypull_parse, and yypush_parse entries. + + * NEWS (2.3a+): Mention XML support, and say the schema is + experimental. + * doc/bison.texinfo (Bison Options): Mention -x and --xml. + * src/getargs.c (usage): Say the XML schema is experimental. + + * NEWS (2.3a+): Say option instead of flag. + +2008-02-21 Wojciech Polak + + * data/xslt/xml2xhtml.xsl (xsl:template match="/"): Change footer + text. + +2008-02-20 Joel E. Denny + + Fix impure push parser compile error reported by Bob Rossi at + . + * data/yacc.c: Clean up whitespace in the output a little. + (yypstate_allocated): Define for impure push parsers regardless of + whether the pull interface is also requested. + * tests/push.at (Push Parsing: Multiple impure instances): Extend to + check impure push parsers without the pull interface. + + * data/yacc.c (yypstate_new): Don't try to invoke yyerror since + yyerror takes arguments specified by %parse-param while yypstate_new + does not. + * doc/bison.texinfo (Parser Create Function): Document that + yypstate_new returns 0 for multiple impure parser instances. + * tests/push.at (Push Parsing: Multiple impure instances): Update + expected stderr output. + +2008-02-19 Joel E. Denny + + * runtime-po/POTFILES.in (push.c): Remove. + +2008-02-17 Joel E. Denny + + * data/Makefile.am (dist_pkgdata_DATA): Remove push.c. + * data/push.c: Rename to... + * data/yacc.c: ... this, overwriting it. + * etc/bench.pl.in (bench_grammar): `%pure-parser'-> `%define api.pure'. + `%push-pull-parser' -> `%define api.push_pull "both"'. + Remove old yacc.c tests, and update push.c tests to yacc.c. + +2008-02-17 Joel E. Denny + + * data/bison.m4 (b4_percent_code_get): Output %code block comments like + `"%code top" blocks' instead of `%code "top" blocks'. + * data/push.c: Import yacc.c changes from 2008-01-09 and 2007-08-03. + Clean up whitespace in the output a little. + +2008-02-16 Joel E. Denny + + Fix documentation problems reported by Tim Josling at + . + * NEWS (2.3a+): Mention removal of --no-parser, -n, and %no-parser. + * doc/bison.texinfo (Token Decl): Token numbers are *nonnegative* + integers. Explain the effect of literal string aliases on error + messages. Copy token 0 documentation from the C++ skeleton + documentation. + +2008-02-16 Joel E. Denny + + Accept a token number in a %left, %right, or %nonassoc for POSIX + conformance. Reported by Tim Josling at + . + * NEWS (2.3a+): Mention. + * doc/bison.texinfo (Precedence Decl): Describe how literal strings + and code numbers are treated by precedence declarations. + * src/parse-gram.y (precedence_declaration): Use symbols.prec instead + of symbols.1. + (symbols.prec): New, just like symbols.1 but uses symbol.prec instead + of symbol. + (symbol.prec): New, just like symbol but allows INT. + * src/symtab.c (symbol_user_token_number_set): Remove an aver that no + longer holds. + * tests/regression.at (Token number in precedence declaration): New + test case. + +2008-02-06 Juan Manuel Guerrero + + DJGPP specific issues. + * djgpp/config.bat: Add filenames that are not 8.3 clean and that must + be changed. Copyright timestamp adjusted. + * djgpp/config.sed: Add filenames that are not 8.3 clean and that must + be changed. Copyright timestamp adjusted. + * djgpp/config.site: Copyright timestamp adjusted. + * djgpp/config_h.sed: Copyright timestamp adjusted. + * djgpp/djunpack.bat: Copyright timestamp adjusted. + * djgpp/fnchnage.lst: Add filenames that are not 8.3 clean to the + filename translation list. + * djgpp/subpipe.c (init_subpipe): Check the environment variables + TMPDIR, TMP and TEMP, in that order, to determinate where the temp + files shall be created. Before trying to use the temp dir where the + environment variable points to check that the dir really exists. If + not default to the cwd as temp dir. Copyright timestamp adjusted. + * djgpp/subpipe.h: Copyright timestamp adjusted. + * djgpp/testsuite.sed: Copyright timestamp adjusted. + +2008-01-30 Paul Eggert + + * doc/bison.texinfo: Update Back-Cover text to reflect new GNU wording. + +2008-01-09 Paul Eggert + + * data/yacc.c (yyparse): Correct the comment when locations aren't used. + Problem reported by Claudio Saavedra in + . + +2008-01-05 Wojciech Polak + + * data/xslt/xml2xhtml.xsl (xsl:template match="/"): Precede an XHTML + document's title with the input grammar file name. + +2007-12-22 Joel E. Denny + + Automate regression testing of the XML/XSLT implementation. Discussed + starting at + . + * configure.ac (XSLTPROC): New substitution. + * Makefile.am (maintainer-xml-check): New phony target invoking... + * tests/Makefile.am (maintainer-xml-check): ... this new phony target + invoking make maintainer-check with BISON_TEST_XML=1. + * tests/atlocal.in (XSLTPROC): New. + * tests/local.at (AT_BISON_CHECK): New macro to (1) instruct Valgrind + not to report reachable memory when Bison is expected to have a + non-zero exit status and (2) to compare XML/XSLT output with --graph + and --report=all output for every working grammar when + BISON_TEST_XML=1. + (AT_BISON_CHECK_NO_XML): Likewise, but skip XML checks. + (AT_BISON_CHECK_XML): New. + (AT_QUELL_VALGRIND): New. + * tests/testsuite.at (ORIGINAL_AT_CHECK): Remove this and... + (AT_CHECK): ... don't redefine this since this was the old way to + quell Valgrind. + * tests/actions.at: Rewrite all AT_CHECK invocations for bison as + AT_BISON_CHECK invocations. + * tests/c++.at: Likewise. + * tests/calc.at: Likewise. + * tests/conflicts.at: Likewise. + * tests/cxx-type.at: Likewise. + * tests/existing.at: Likewise. + * tests/glr-regression.at: Likewise. + * tests/headers.at: Likewise. + * tests/input.at: Likewise. + * tests/java.at: Likewise. + * tests/output.at: Likewise. + * tests/push.at: Likewise. + * tests/reduce.at: Likewise. + * tests/regression.at: Likewise. + * tests/sets.at: Likewise. + * tests/skeletons.at: Likewise. + * tests/synclines.at: Likewise. + * tests/torture.at: Likewise. + (Big triangle): Use AT_BISON_CHECK_NO_XML instead since this grammar + tends to hang xsltproc. + (Big horizontal): Likewise. + +2007-12-08 Joel E. Denny + + In XML output, remove redundant class attribute on symbol element. + * data/xslt/bison.xsl (xsl:key name="bison:symbolByName"): New. + * data/xslt/xml2xhtml.xsl (xsl:template match="symbol"): Use it to + look up a symbol to determine whether it's a nonterminal or terminal. + * src/gram.c (rule_rhs_print_xml): Remove class attribute. + * src/state.c (state_rule_lookahead_tokens_print_xml): Likewise. + + Add prec/assoc information to XML output. + * src/gram.c (grammar_rules_print_xml): For each rule that has a + %prec, add a percent_prec attribute. + * src/print-xml.c (print_grammar): For each terminal that has a + precedence or associativity, add a prec or assoc attribute. + (xml_indent): New. + (xml_puts): Use xml_indent. + (xml_printf): Use xml_indent. + * src/print-xml.h (xml_indent): Prototype. + + * tests/existing.at (GNU pic Grammar): Fix a rule miscopied from + . + +2007-12-08 Joel E. Denny + + * data/xslt/bison.xsl (bison:ruleNumber): Rename to... + (bison:ruleByNumber): ... this for clarity. + * data/xslt/xml2dot.xsl (xsl:template match="item"): Update. + * data/xslt/xml2text.xsl (xsl:template match="item"): Update. + (xsl:template match="reduction"): Update. + (xsl:template match="item"): Update. + (xsl:template match="reduction"): Update. + + In the XML output, don't print the list of rules where symbols appear. + Compute it in XSLT instead. Discussed at + . + * data/xslt/bison.xsl (bison:ruleByLhs): New. + (bison:ruleByRhs): New. + * data/xslt/xml2text.xsl (xsl:template match="terminal"): Use + bison:ruleByRhs. + (xsl:template match="terminal/rule"): Remove. + (xsl:template match="nonterminal"): Use bison:ruleByLhs and + bison:ruleByRhs. + (xsl:template match="nonterminal/left/rule|nonterminal/right/rule"): + Remove. + * data/xslt/xml2xhtml.xsl (xsl:template match="terminal"): Use + bison:ruleByRhs and mode="number-link" for rule template. + (xsl:template match="terminal/rule"): Remove. + (xsl:template match="nonterminal"): Use bison:ruleByLhs and + bison:ruleByRhs and mode="number-link" for rule template. + (xsl:template match="nonterminal/left/rule|nonterminal/right/rule"): + Rewrite as... + (xsl:template match="rule" mode="number-link"): ... this. + * src/print-xml.c (print_grammar): Don't print the list of rules. + +2007-12-01 Joel E. Denny + + Don't let --report affect XML output; always print all information. + Discussed at + . + * src/conflicts.c (log_resolution): Implement. + * src/print-xml.c (print_core): Implement. + (print_state): Implement. + (print_xml): Implement. + + * NEWS (2.3a+): Fix quotes. + * src/parse-gram.y (prologue_declaration): For consistency with -v, + don't let %verbose clear the list specified by --report. + +2007-11-26 Akim Demaille + + * data/Makefile.am (dist_pkgdata_DATA): Ship and install bison.xsl. + +2007-11-24 Joel E. Denny + + In the XML output, list useless and unused symbols and rules with the + useful ones and add a "usefulness" attribute. Discussed starting at + . + * src/gram.c (grammar_rules_partial_print_xml): Remove. + (grammar_rules_print_xml): Print all rules instead of just those + useful in the grammar, and add a "usefulness" attribute. + * src/gram.h (grammar_rules_partial_print_xml): Remove prototype. + * src/print-xml.c (print_rules_useless_in_parser): Remove. + (print_grammar): Print all nonterminals instead of just useful ones, + and add a "usefulness" attribute to nonterminals and terminals. + (print_xml): Don't print a separate "reductions" or + "rules-useless-in-parser" element. + * src/reduce.c (reduce_output): Use reduce_token_unused_in_grammar. + (reduce_xml): Remove. + (reduce_token_unused_in_grammar): New. + (reduce_nonterminal_useless_in_grammar): New. + * src/reduce.h (reduce_xml): Remove prototype. + (reduce_token_unused_in_grammar): Add prototype. + (reduce_nonterminal_useless_in_grammar): Add prototype. + * data/xslt/xml2text.xsl: Update for XML changes. + * data/xslt/xml2xhtml.xsl: Update for XML changes. + * tests/reduce.at (Useless Terminals): Update output. + (Useless Rules): Update output. + (Reduced Automaton): Update output. + + Say "Terminals unused in grammar" instead of "Unused terminals". + * NEWS (2.3a+): Update. + * doc/bison.texinfo (Understanding): Update example output. + * src/reduce.c (reduce_output): Implement. + * data/xslt/xml2text.xsl: Implement. + * data/xslt/xml2xhtml.xsl: Implement. + +2007-11-18 Joel E. Denny + + Accept --report-file=FILE to override the default `.output' filename. + * NEWS (2.3a+): Mention. + * doc/bison.texinfo (Bison Options): Add an entry. + * src/files.c (compute_output_file_names): Don't override + spec_verbose_file if already set. + * src/getargs.c (usage): Document --report-file. + (REPORT_FILE_OPTION): New anonymous enum member. + (long_options): Add entry for it. + (getargs): Add case for it setting spec_verbose_file. + + * build-aux/cross-options.pl: Don't record a short option just because + there's an arg. + * doc/.cvsignore: Add yacc.1. + +2007-11-14 Akim Demaille + + * doc/yacc.1.in: New. + * configure.ac, doc/Makefile.am: Adjust. + * configure.ac (PACKAGE_COPYRIGHT_YEAR): New substitution, and new + config.h symbol. + Use AC_SUBST for assignments too. + * src/getargs.c (version): Use PACKAGE_COPYRIGHT_YEAR. + +2007-11-10 Joel E. Denny + + * src/gram.c: Remove comments that duplicate comments in gram.h. + + When reporting useless rules and nonterminals, say "useless in grammar" + instead of "useless", and say "useless in parser" instead of "never + reduced". Discussed starting at + . + * NEWS (2.3a+): Mention this change. + * data/xslt/xml2text.xsl: Update output text and expected input XML + element names to match changes below. + * data/xslt/xml2xhtml.xsl: Likewise. + (xsl:template match="bison-xml-report"): Add missing entry in Table of + Contents: "Rules useless in parser due to conflicts". + * doc/bison.texinfo (Decl Summary): Reword a little. + (Understanding): Update example output for changes below. + * src/gram.c: (rule_useful_p): Rename to... + (rule_useful_in_grammar_p): ... this. + (rule_useless_p): Rename to... + (rule_useless_in_grammar_p): ... this. + (rule_never_reduced_p): Rename to... + (rule_useless_in_parser_p): ... this. + (grammar_rules_print): Update for renames. + (grammar_rules_print_xml): Update for renames. + (grammar_rules_never_reduced_report): Rename to... + (grammar_rules_useless_report): ... this since it is used for either + kind of useless rule. + * src/gram.h: Reword comments and update function names in prototypes. + * src/main.c (main): Say "rule useless in parser due to conflicts". + * src/print-xml.c (print_rules_never_reduced): Rename to... + (print_rules_useless_in_parser): ... this, and rename output XML + element "rules-never-reduced" to "rules-useless-in-parser". + (print_xml): Update for rename. + * src/print.c (print_results): Say "Rules useless in parser due to + conflicts". + * src/reduce.c (reduce_grammar_tables): Say "rule useless in grammar". + (nonterminals_reduce): Say "nonterminal useless in grammar". + (reduce_output): Say "Nonterminals useless in grammar". + Say "Rules useless in grammar". + (reduce_xml): Rename output XML element "useless" to + "useless-in-grammar". + (reduce_print): Don't report the count of grammatically useless rules + as "rules never reduced" just because %yacc is specified. + In the correct report of this count, say nonterminal(s) and rule(s) + "useless in grammar". + * tests/conflicts.at (S/R in initial): Update expected output. + (Defaulted Conflicted Reduction): Likewise. + (Unreachable States After Conflict Resolution): Likewise. + * tests/existing.at (GNU pic Grammar): Likewise. + * tests/reduce.at (Useless Nonterminals): Likewise. + (Useless Rules): Likewise. + (Reduced Automaton): Likewise. + (Underivable Rules): Likewise. + (Empty Language): Likewise. + +2007-11-09 Joel E. Denny + + * data/bison.m4 (b4_cat): Put a newline after the end delimiter of the + here document and before the EOF so that BSD's implementation of Bourne + shell doesn't parse the delimiter as part of the here document. + * doc/.cvsignore: Add cross-options.texi. + * src/getargs.c (usage): Add a blank line after the warning categories. + +2007-11-08 Paolo Bonzini + + * data/lalr1.java (Lexer): Remove usage of b4_pure_if. + +2007-11-05 Akim Demaille + + Remove Id: from bison.1. + * doc/Makefile.am (remove_time_stamp): Include the sed invocation. + (perl -0777 -pi -e 's/\.PP\nId): New. + (.x.1): Use it to ignore the version control revision. + +2007-11-05 Akim Demaille + + * build-aux/Makefile.am: Ship cross-options.pl. + * doc/Makefile.am: Always refer to cross-options.texi with + $(srcdir). + (MAINTAINERCLEANFILES): Add it. + +2007-11-04 Akim Demaille + + Generate the long/short option cross-table. + * build-aux/cross-options.pl: New. + * doc/Makefile.am (cross-options.texi): New. + * doc/bison.texinfo: Use it. + +2007-11-04 Akim Demaille + + Generate bison.1 using help2man. + * doc/common.x, doc/bison.x: New. + * doc/Makefile.am (bison.1, .x.1): New. + The code is taken from autoconf-2.61/man/Makefile.am. + * configure.ac: Look for help2man. + +2007-11-04 Akim Demaille + + Complete --help. + * src/getargs.c (usage): Document -W, make it clear that -d, + -g and -x have optional arguments. + +2007-11-04 Akim Demaille + + Find sha1sum when named gsha1sum. + * bootstrap (find_tool): New. + ($SHA1SUM): New. + +2007-10-28 Joel E. Denny + + Deprecate %pure-parser and add `%define api.pure'. Discussed starting + at + . + * NEWS (2.3a+): Mention. + * data/bison.m4 (b4_pure_if): Don't define it here. + * data/c.m4 (b4_identification): Depend on individual skeletons to + define b4_pure_flag, b4_push_flag, or b4_pull_flag if they use the + values of the %define variables api.pure or api.push_pull. Define + YYPURE, YYPUSH, and YYPULL accordingly. + * data/glr.c: Define b4_pure_if based on `%define api.pure' unless + glr.cc has already defined b4_pure_flag. + * data/push.c: Define b4_pure_if based on `%define api.pure'. + Remove YYPUSH and YYPULL since they're back in b4_identification again. + * data/yacc.c: Define b4_pure_if based on `%define api.pure'. + * doc/bison.texinfo (Pure Decl): Update. + (Push Decl): Update. + (Decl Summary): Add api.pure to %define entry. + In %pure-parser entry, say it's deprecated and reference %define. + (Pure Calling): Update. + (Error Reporting): Update. + (C++ Scanner Interface): Update. + (How Can I Reset the Parser): Update. + (Table of Symbols): In %pure-parser entry, say it's deprecated and + reference %define. + * src/getargs.c (pure_parser): Remove global variable. + * src/getargs.h (pure_parser): Remove extern. + * src/output.c (prepare): Don't define pure_flag muscle. + * src/parse-gram.y (prologue_declaration): Implement %pure-parser as a + wrapper around `%define api.pure'. + * tests/calc.at (Simple LALR Calculator): Update. + (Simple GLR Calculator): Update. + * tests/cxx-type.at (GLR: Resolve ambiguity, pure, no locations): + Update. + (GLR: Resolve ambiguity, pure, locations): Update. + (GLR: Merge conflicting parses, pure, no locations): Update. + (GLR: Merge conflicting parses, pure, locations): Update. + * tests/glr-regression.at (Uninitialized location when reporting + ambiguity): Update + * tests/input.at (Unused %define api.pure): New test case. + * tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Update definition for + AT_PURE_IF and AT_PURE_AND_LOC_IF. + * tests/push.at (Push Parsing: Memory Leak for Early Deletion): Update. + +2007-10-28 Joel E. Denny + + %define push_pull -> %define api.push_pull. Discussed starting at + . + * data/push.c: Expect the new name. + * data/yacc.c: Likewise. + * doc/bison.texinfo (Push Decl): Update. + (Decl Summary): Update %define entry. + (Push Parser Function): Update. + (Pull Parser Function): Update. + (Parser Create Function): Update. + (Parser Delete Function): Update. + * tests/calc.at (Simple LALR Calculator): Update. + * tests/input.at (%define enum variables): Update. + * tests/push.at (Push Parsing: Memory Leak for Early Deletion): Update. + (Push Parsing: Multiple impure instances): Update. + (Push Parsing: Unsupported Skeletons): Update. + * tests/torture.at (Exploding the Stack Size with Alloca): Update. + (Exploding the Stack Size with Malloc): Update. + + * NEWS (2.3a+): Add an entry for the push parser, and clean up the + other entries some. + +2007-10-27 Joel E. Denny + + For the XML output's terminal element, rename @number to @token-number, + and add @symbol-number. In the nonterminal element, rename @number to + @symbol-number. Discussed starting at + . + * data/xslt/xml2text.xsl (xsl:template match="terminal"): Update for + renames. + (xsl:template match="nonterminal"): Likewise. + * data/xslt/xml2xhtml.xsl (xsl:template match="terminal"): Likewise. + (xsl:template match="nonterminal"): Likewise. + * src/print-xml.c (print_grammar): Implement. + +2007-10-21 Joel E. Denny + + * data/xslt/xml2dot.xsl (xsl:template match="automaton/state"): After + 2007-10-11 change, the child elements here are items not rules. + (xsl:template match="item"): New. + (xsl:template match="rule"): Update for new reduced itemset. + (xsl:template match="point"): Remove. + (xsl:template match="empty"): For consistency with --graph, don't + output "/* empty */". + * data/xslt/xml2text.xsl (xsl:template match="terminal"): When invoking + line-wrap, don't pass a negative value as first-line-length since this + won't work with the following changes. + (xsl:template name="line-wrap"): Simplify slightly. + (xsl:template name="ws-search"): Eliminate recursion. + * src/print_graph.c (print_core): Don't print a reduction's lookahead + set next to an item whose dot is not at the end of the RHS even if it + happens to be associated with the same rule. + +2007-10-19 Joel E. Denny + + Add %define lr.keep_unreachable_states. + * NEWS (2.3a+): Mention it in the entry for unreachable state removal. + * doc/bison.texinfo (Decl Summary): Mention it in the %define entry. + * src/main.c (main): Implement it. + * tests/conflicts.at (Unreachable States After Conflict Resolution): + Extend to test it, and fix a typo. + +2007-10-19 Joel E. Denny + + * NEWS (2.3a+): Add entry for recent .output file lookahead set fix. + * doc/bison.texinfo (Understanding): Remove a bogus lookahead set in + the example .output text. + * tests/regression.at (Extra lookahead sets in report): Improve wording + of comments. + +2007-10-17 Wojciech Polak + + * src/print-xml.c (print_grammar): Renamed + and attributes: + "type" to "number" and "symbol" to "name". + * data/xslt/xml2text.xsl (xsl:template match="terminal"): + Use new attribute names. + (xsl:template match="nonterminal"): Likewise. + * data/xslt/xml2xhtml.xsl: Likewise. + +2007-10-17 Joel E. Denny + + * doc/bison.texinfo (Bison Options): Add entry for --print-datadir. + (Option Cross Key): Likewise. + + * src/print-xml.c (print_core): Don't print a reduction's lookahead set + next to an item whose dot is not at the end of the RHS even if it + happens to be associated with the same rule. + * src/print.c (print_core): Likewise. + * tests/conflicts.at (Unresolved SR Conflicts): Update output. + (Resolved SR Conflicts): Update output. + * tests/regression.at (Extra lookahead sets in report): New test case. + +2007-10-11 Wojciech Polak + + * src/print-xml.c (print_core): Remove item set + redundancy. + * data/xslt/bison.xsl (bison:ruleNumber): New key. + Improve processing time. Suggested by Joel E. Denny. + * data/xslt/xml2dot.xsl (xsl:template name="escape"): + Write xsl:param "required" attribute as comment. + * data/xslt/xml2text.xsl (xsl:template match="item"): New. + (xsl:template match="rule"): Support new reduced itemset. + (xsl:template match="point"): Remove. + * data/xslt/xml2xhtml.xsl: Likewise. + +2007-10-09 Joel E. Denny + + * src/getargs.c (version): Update copyright year. + +2007-10-09 Joel E. Denny + + Make xml2dot.xsl and --graph produce the same output. + * data/xslt/xml2dot.xsl (xsl:template match="rule"): Use a ` ' + instead of a `\n'. That is, don't add escapes yet or they'll be doubly + escaped later. + (xsl:template name="output-node"): Use the new escape template instead + of the string-replace template directly. + (xsl:template name="output-edge"): Likewise. + (xsl:template name="escape"): New, escapes backslashes and newlines in + addition to quotation marks. + * src/graphviz.c (start_graph, output_node, output_edge): Add + whitespace to output for legibility. + + Make xml2text.xsl and --report produce the same output, and remove the + XML "conflicts" element since a conflict summary is easily extracted + from the automaton. + * data/xslt/bison.xsl: New. + (xsl:template match="state" mode="bison:count-conflicts): New. + * data/xslt/xml2text.xsl: Import bison.xsl. + (xsl:template match="bison-xml-report"): Instead of styling the + "conflicts" element, style the "automaton" element with mode + "conflicts". Unlike the former, the latter lists S/R and R/R + conflicts for a state on the same line. + (xsl:template match="conflicts"): Remove. + (xsl:template match="conflict"): Remove. + (xsl:template match="terminal"): Line-wrap the list of rules in which + the terminal is used. + (xsl:template match="nonterminal"): Likewise for nonterminals. + (xsl:template match="automaton" mode="conflicts"): New. + (xsl:template match="state" mode="conflicts"): New. + (xsl:template name="line-wrap"): New. + (xsl:template name="ws-search"): New. + * data/xslt/xml2xhtml.xsl: Import bison.xsl. + (xsl:template match="bison-xml-report"): Instead of styling the + "conflicts" element, style the "automaton" element with mode + "conflicts." + (xsl:template match="conflicts"): Remove. + (xsl:template match="conflict"): Remove. + (xsl:template match="automaton" mode="conflicts"): New. + (xsl:template match="state" mode="conflicts): New. + * src/conflicts.c (conflicts_output_xml): Remove. + * src/conflicts.h (conflicts_output_xml): Remove prototype. + * src/print-xml.c (print_xml): Don't invoke conflicts_output_xml. + * src/print.c (print_grammar): Consistently wrap at the 66th column so + the corresponding XSLT is easier. Also, never wrap between a word and + the comma that follows it. + +2007-10-08 Joel E. Denny + + Improve C++ namespace support. Discussed starting at + . + * data/c++.m4: (b4_namespace_ref, b4_namespace_open, + b4_namespace_close): New macros that interpret the %define variable + "namespace" so its value can contain "::" to indicate nested + namespaces. + * data/glr.cc (b4_namespace): Don't define, and replace all uses with + the above macros. + * data/lalr1.cc (b4_namespace): Likewise. + * data/location.cc (b4_namespace): Likewise. + * doc/bison.texinfo (Decl Summary): Move `%define push_pull' entry + inside a new table in the general %define entry. Document `%define + namespace' there as well. Point the %name-prefix entry to it since it + explains it more completely in the case of C++. + (C++ Bison Interface): Mention `%define namespace' instead of + %name-prefix. + (Table of Symbols): Remove the `%define push_pull' entry. The %define + entry suffices. + * tests/c++.at (Relative namespace references): New test case. + (Absolute namespace references): New test case. + (Syntactically invalid namespace references): New test case. + * tests/input.at (C++ namespace reference errors): New test case. + +2007-10-08 Joel E. Denny + + Add syncline support and location accessor to internal %define + interfaces. + * data/bison.m4 (b4_percent_define_get_loc): New. + (b4_percent_define_get_syncline): New. + (b4_percent_define_flag_if): Use b4_percent_define_get_loc. + (b4_percent_define_default): Record defining location as line 1 rather + than 0 for the sake of synchronizing #line's, and define + b4_percent_define_syncline(VARIABLE). + (b4_percent_define_check_values): Use b4_percent_define_get_loc. + * src/muscle_tab.c (muscle_syncline_grow): New. + (muscle_code_grow): Use muscle_syncline_grow. + (muscle_percent_define_insert): Use muscle_percent_define_get_loc, and + define b4_percent_define_syncline(VARIABLE). + (muscle_percent_define_get_loc): New. + (muscle_percent_define_get_syncline): New. + (muscle_percent_define_flag_if): Use muscle_percent_define_get_loc, and + remove some unused variables. + (muscle_percent_define_default): Record defining location as line 1 + rather than 0 for the sake of synchronizing #line's, and define + b4_percent_define_syncline(VARIABLE). + (muscle_percent_define_check_values): Use + muscle_percent_define_get_loc. + * src/muscle_tab.h (muscle_percent_define_get_loc): Prototype. + (muscle_percent_define_get_syncline): Prototype. + * tests/skeletons.at (%define Boolean variables: invalid skeleton + defaults): Update output for location change. + (Complaining during macro argument expansion): Extend to test + b4_percent_define_get_loc and b4_percent_define_get_syncline errors. + +2007-10-07 Joel E. Denny + + Fix some error-reporting macro bugs. + * data/bison.m4 (b4_cat): New. + (b4_error, b4_error_at): Use b4_cat to send error directives directly + to stdout so they don't become arguments to other macros. Update + comments and add examples. + (b4_warn, b4_warn_at, b4_complain, b4_complain_at): Update comments and + add examples. + (b4_fatal, b4_fatal_at): Likewise, and invoke m4_exit(1) immediately + after printing the error directive so that M4 doesn't report subsequent + problems that are induced by this problem. + * src/scan-skel.l: Recognize @` digraph outside of directive arguments + instead of just in them. Recognize @\n in both places. Both expand to + the empty string. Needed by b4_cat. + * tests/skeletons.at (Complaining during macro argument expansion): + New test case. + (Fatal errors make M4 exit immediately): New test case. + +2007-10-04 Joel E. Denny + + Implement --print-datadir. + * src/getargs.c (usage): Mention. + (PRINT_DATADIR_OPTION): New anonymous enum member. + (long_options): Add entry for it. + (getargs): Add case for it calling compute_pkgdatadir. + * src/output.c (output_skeleton): Encapsulate data directory + computation from here... + (prepare): ... and from here... + (compute_pkgdatadir): ... into this new function. + * src/output.h (compute_pkgdatadir): Prototype. + +2007-09-29 Joel E. Denny + + * src/print-xml.c (escape_bufs): New static global variable + replacing... + (xml_escape_n): ... the static local variable buf here. + (print_xml): Free memory for escape_bufs. + * src/reduce.c (reduce_xml): XML-escape terminal symbol tags. + +2007-09-25 Joel E. Denny + + Replace `%push-parser' and `%push-pull-parser' with + `%define push_pull "push"' and `%define push_pull "both"'. + `%define push_pull "pull"' is the default. + * doc/bison.texinfo (Push Decl, Push Parser Function, + Pull Parser Function, Parser Create Function, Parser Delete Function): + Update declarations. + (Decl Summary, Table of Symbols): Replace %push-parser and + %push-pull-parser entries with a %define push_pull entry. + * data/bison.m4 (b4_percent_define_check_values): New macro. + (b4_pull_if, b4_push_if, b4_use_push_for_pull_if): Move these + definitions... + * data/c.m4 (b4_identification): ... and the YYPUSH and YYPULL cpp + definitions... + * data/push.c: ... to here and compute them from the value of the + %define variable push_pull. + * data/c-skel.m4: Instead of choosing the push.c skeleton for push + parsing requests here... + * data/yacc.c: ... hack this to switch to push.c any time + b4_use_push_pull_flag or the %define variable push_pull is set. This + will go away when we mv push.c yacc.c. + * data/c++-skel.m4, data/glr.c, data/java-skel.m4: Don't report that + push parsing is not supported since unused %define variables are + reported anyway. + * src/getargs.c, src/getargs.h (pull_parser, push_parser): Remove. + * src/muscle_tab.h (muscle_percent_define_check_values): Update + comments for consistency with b4_percent_define_check_values. + * src/output.c (prepare): Don't insert b4_pull_flag and b4_push_flag + muscles. + * src/parse-gram.y (PERCENT_PUSH_PARSER, PERCENT_PUSH_PULL_PARSER): + Remove. + (prologue_declaration): Remove %push-parser and %push-pull-parser + rules. + * src/scan-gram.l (%push-parser, %push-pull-parser): Remove rules. + * tests/calc.at: Update declarations. + * tests/input.at (%define enum variables): New test case. + * tests/push.at (Push Parsing: Memory Leak for Early Deletion): Update + declaration. + (Push Parsing: Multiple impure instances): Update declaration. + (Push Parsing: Unsupported Skeletons): New test case. + * tests/torture.at (Exploding the Stack Size with Alloca): Update + declaration. + (Exploding the Stack Size with Malloc): Update declaration. + +2007-09-24 Wojciech Polak + + Add XSLT transformations. + + * data/xslt/xml2dot.xsl: Transform XML into DOT. + * data/xslt/xml2text.xsl: Transform XML into plain text. + * data/xslt/xml2xhtml.xsl: Transform XML into XHTML. + * data/Makefile.am (xsltdir): New variable. + (dist_xslt_DATA): Add xslt/*.xsl files. + +2007-09-23 Paul Eggert + + * src/conflicts.c (log_resolution): Fix indenting bugs I introduced. + Problem reported by Wojciech Polak. + * src/print-xml.c (xml_puts): Work even if LEVEL exceeds INT_MAX/2. + (xml_printf): Undo change I made on 21 September; that is, + indent 2 spaces, not 1. + +2007-09-23 Joel E. Denny + + Pacify ./configure --enable-gcc-warnings. + * src/print-xml.c, src/print-xml.h (xml_puts): Make third argument + `char const *' instead of `char *'. + * src/state.c (state_rule_lookahead_tokens_print_xml): Remove unused + local variable `sep'. + +2007-09-21 Paul Eggert + + * src/gram.c (rule_rhs_print_xml): Now static, since it isn't used + elsewhere. + * src/print-xml.c: Prefer "const" after types; that's more consistent. + (xml_printf): Indent just 1 space for level. + (e_char, xlate_char): Remove. + (xml_escape_string): Rewrite to avoid undefined behavior (used + storage that was freed from the stack). + (xml_escape_n): Don't bother checking for subscript error. + +2007-09-21 Wojciech Polak + + Add Bison XML Automaton Report. + + Add support for an -x option to generate an XML report. + It is not documented yet. + * src/print-xml.c: New file. + * src/print-xml.h: Likewise. + * lib/timevar.def (TV_XML): New var. + * src/Makefile.am (bison_SOURCES): Add print-xml.c, print-xml.h. + * src/conflicts.c: Include print-xml.h. + (solved_conflicts_xml_obstack): New var. + (log_resolution, conflicts_solve, conflicts_free): + Add support for XML report. + (conflicts_output_val): New function. + * src/conflicts.h (conflicts_output_val): New decl. + * src/files.c (spec_xml_file): New var. + (compute_output_file_names, output_file_names_free): Add XML support. + * src/files.h (spec_xml_file): New decl. + * src/getargs.c (xml_flag): New var. + (usage, short_options, long_options, getargs): Add XML support. + * src/getargs.h (xml_flag): New decl. + * src/gram.c: Include print-xml.h. + (rule_lhs_print_xml, rule_rhs_print_xml): + (grammar_rules_partial_print_xml, grammar_rules_print_xml): + New functions. + * src/gram.h: Declare external ones. + * src/main.c: Include print-xml.h. + (main): Add XML support. + * src/reduce.c: Include print-xml.h. + (reduce_xml): New function. + * src/reduce.h: Declare it. + * src/state.c: Include print-xml.h. + (state_new): Add XML support. + (state_rule_lookahead_tokens_print_xml): New function. + * src/state.h: Declare it. + (struct state): New member solved_conflicts_xml. + * src/symtab.c (symbol_class_get_string): New function. + * src/symtab.h: Declare it. + +2007-09-21 Paul Eggert + + * GNUmakefile: Switch to coreutils's version. + * bootstrap: Likewise. + * Makefile.cfg: Adjust to new GNUmakefile. + * README-hacking: Likewise. + + Import from gnulib: + + 2006-08-18 Paul Eggert + Bruno Haible + + * m4/bison-i18n.m4 (BISON_I18N): Also handle the case where yacc exists + and is a script that invokes bison. Tighten the code. Add comments. + +2007-08-28 Joel E. Denny + + Spell "boolean" as "Boolean". Reported by Akim Demaille. + * data/bison.m4 (b4_percent_define_flag_if): Fix complaint. + * doc/bison.texinfo (Decl Summary): Fix. + * src/muscle_tab.c (muscle_percent_define_flag_if): Fix complaint. + * tests/input.at (Boolean %define variables): Update output. + * tests/skeletons.at (%define boolean variables: invalid skeleton + defaults): Rename to... + (%define Boolean variables: invalid skeleton defaults): ... this and + update output. + +2007-08-17 Joel E. Denny + + In impure push mode, don't allow more than one yypstate to be allocated + since multiple impure parsers would corrupt yynerrs. + * data/push.c (yypstate_allocated): New static global variable + initialized to 0. + (yypull_parse): If yypstate_new returns 0, don't report it as memory + exhaustion if yypstate_allocated is 1, but still return 2. + (yypstate_new): Invoke yyerror and return 0 if yypstate_allocated is + already 1. Otherwise, set it to 1. + (yypstate_delete): Set it to 0. + * tests/push.at (Push Parsing: Multiple impure instances): New test + case. + +2007-08-17 Bob Rossi + + * doc/bison.texinfo (Push Decl): Document the push parser. + (Table of Symbols): Ditto. + (Pure Decl): Ditto. + (Decl Summary): Ditto. + (Multiple Parsers, Push Parser Function, Pull Parser Function, + Parser Create Function, Parser Delete Function): + Add new push parser symbols. + (Table of Symbols): Document push-parser, push-pull-parser, + yypush_parse, yypull_parse, yypstate_new and yypstate_delete. + +2007-08-15 Paul Eggert + + Update to GPLv3. + * doc/gpl-3.0.texi: New file. + * doc/gpl.texi: Remove. + * COPYING, GNUmakefile, HACKING, Makefile.am, Makefile.cfg: + * Makefile.maint, NEWS, PACKAGING, README, README-alpha: + * README-hacking, TODO, bootstrap, bootstrap.conf: + * configure.ac, data/Makefile.am, data/README, data/bison.m4: + * data/c++-skel.m4, data/c++.m4, data/c-skel.m4, data/c.m4: + * data/glr.c, data/glr.cc, data/java-skel.m4, data/java.m4: + * data/lalr1.cc, data/lalr1.java, data/location.cc: + * data/push.c, data/yacc.c, data/m4sugar/m4sugar.m4: + * djgpp/Makefile.maint, djgpp/README.in, djgpp/config.bat: + * djgpp/config.sed, djgpp/config.site, djgpp/config_h.sed: + * djgpp/djunpack.bat, djgpp/subpipe.c, djgpp/subpipe.h: + * djgpp/testsuite.sed, doc/Makefile.am, doc/bison.texinfo: + * doc/fdl.texi, doc/refcard.tex, etc/Makefile.am, etc/README: + * etc/bench.pl.in, examples/Makefile.am, examples/extexi: + * examples/calc++/Makefile.am, lib/Makefile.am, lib/abitset.c: + * lib/abitset.h, lib/bbitset.h, lib/bitset.c, lib/bitset.h: + * lib/bitset_stats.c, lib/bitset_stats.h, lib/bitsetv-print.c: + * lib/bitsetv-print.h, lib/bitsetv.c, lib/bitsetv.h: + * lib/ebitset.c, lib/ebitset.h, lib/get-errno.c: + * lib/get-errno.h, lib/lbitset.c, lib/lbitset.h: + * lib/libiberty.h, lib/main.c, lib/subpipe.c, lib/subpipe.h: + * lib/timevar.c, lib/timevar.def, lib/timevar.h: + * lib/vbitset.c, lib/vbitset.h, lib/yyerror.c: + * m4/c-working.m4, m4/cxx.m4, m4/m4.m4, m4/subpipe.m4: + * m4/timevar.m4, src/LR0.c, src/LR0.h, src/Makefile.am: + * src/assoc.c, src/assoc.h, src/closure.c, src/closure.h: + * src/complain.c, src/complain.h, src/conflicts.c: + * src/conflicts.h, src/derives.c, src/derives.h, src/files.c: + * src/files.h, src/flex-scanner.h, src/getargs.c: + * src/getargs.h, src/gram.c, src/gram.h, src/graphviz.c: + * src/lalr.c, src/lalr.h, src/location.c, src/location.h: + * src/main.c, src/muscle_tab.c, src/muscle_tab.h: + * src/nullable.c, src/nullable.h, src/output.c, src/output.h: + * src/parse-gram.c, src/parse-gram.h, src/parse-gram.y: + * src/print.c, src/print.h, src/print_graph.c: + * src/print_graph.h, src/reader.c, src/reader.h, src/reduce.c: + * src/reduce.h, src/relation.c, src/relation.h: + * src/revision.h, src/scan-code.h, src/scan-code.l: + * src/scan-gram.h, src/scan-gram.l, src/scan-skel.h: + * src/scan-skel.l, src/state.c, src/state.h, src/symlist.c: + * src/symlist.h, src/symtab.c, src/symtab.h, src/system.h: + * src/tables.c, src/tables.h, src/uniqstr.c, src/uniqstr.h: + * tests/Makefile.am, tests/actions.at, tests/c++.at: + * tests/calc.at, tests/conflicts.at, tests/cxx-type.at: + * tests/existing.at, tests/glr-regression.at: + * tests/headers.at, tests/input.at, tests/java.at: + * tests/local.at, tests/output.at, tests/push.at: + * tests/reduce.at, tests/regression.at, tests/sets.at: + * tests/skeletons.at, tests/synclines.at, tests/testsuite.at: + * tests/torture.at: + Update to GPLv3. + +2007-08-11 Joel E. Denny + + Get rid of broken %no-parser, -n, and --no-parser implementation and + documentation. + * TODO: Don't mention them. + * doc/bison.1: Likewise. + * doc/bison.texinfo (Decl Summary): Likewise. + (Bison Options): Likewise. + (Option Cross Key): Likewise. + * src/getargs.c (no_parser_flag): Remove global variable. + (usage): Don't print description of -n and --no-parser. + (long_options): Remove --no-parser entry here. + (getargs): Remove -n case in the switch here. + * src/getargs.h (no_parser_flag): Remove extern. + * tests/regression.at (Web2c Actions): Remove comment that mentions + --no-parser. + +2007-08-11 Joel E. Denny + + * tests/push.at (Push Parsing: Memory Leak for Early Deletion): Do not + name user variables starting with `yy'. Just pass NULL instead of a + dummy local &yylval to yypush_parse. + * tests/torture.at (AT_DATA_STACK_TORTURE): Do not name user variables + starting with `yy'. + +2007-08-03 Joel E. Denny + + * data/yacc.c (yyexhaustedlab): Define it when YYERROR_VERBOSE is + true since it's then always used regardless of whether yyoverflow is + defined. Reported by Christian Burger at + . + * THANKS: Add Christian Burger. + + * ChangeLog: For changes in doc/bison.texinfo, consistently reference + node names: say "Decl Summary" not "Bison Declaration Summary". + +2007-07-28 Joel E. Denny + + * src/muscle_tab.c (muscle_percent_define_flag_if): In order to + determine whether this function has already complained about an invalid + value for a %define boolean variable, don't check whether Bison has + ever examined the value. As written, the check was a tautology. + Instead, record and check for this complaint using a separate muscle. + +2007-07-27 Joel E. Denny + + Fix push parsing memory leak reported by Brandon Lucia at + . + * THANKS: Add Brandon Lucia. + * data/push.c (yypstate_delete): Free the stack if it was reallocated + but the parse never completed and thus freed it. + * tests/Makefile.am (TESTSUITE_AT): Add push.at. + * tests/testsuite.at: Include push.at. + * test/push.at: New. + (Push Parsing: Memory Leak for Early Deletion): New test case. + +2007-07-17 Joel E. Denny + + Improve handling of multiple S/R conflicts in the same state and of S/R + conflicts involving multiple reductions. + * src/conflicts.c (resolve_sr_conflict): Don't assign the error action + set for a state here or Bison will abort if it is reassigned on a + later conflicted reduction in the same state. + Similarly, don't finalize and assign the solved conflicts report here + or it will be lost if it is reassigned on a later conflicted reduction + in the same state. + (set_conflicts): Instead, assign them both here after all S/R conflicts + in the state have been fully examined. + * src/print.c (shift_set): Rename to... + (no_reduce_set): ... this. + (print_reductions): Update for rename, and add %nonassoc error action + tokens to no_reduce_set so that, when printing the first remaining + reduction on an error action token, the reduction is enclosed in + brackets. + (print_results): Update for rename. + * tests/conflicts.at (Solved conflicts report for multiple reductions + in a state): New test case. + (%nonassoc error actions for multiple reductions in a state): New test + case. + + * src/main.c (main): Don't depend on C99 features. + +2007-07-16 Joel E. Denny + + * build-aux/.cvsignore: Add compile. + * lib/.cvsignore: Add charset.alias, ref-add.sed, ref-del.sed, and + uniwidth. + +2007-07-10 Joel E. Denny + + * bootstrap (slurp): Create target directories that don't exist. + Specifically, we need lib/uniwidth/ because of recent Gnulib changes. + +2007-07-09 Joel E. Denny + + * LR0.c (new_itemsets): Fix wording in comments: say item index rather + than item number. + * closure.c (closure): Likewise. + * state.h (reductions): Comment sorting of rules. + (state): Comment sorting of items. + +2007-07-02 Joel E. Denny + + Fix C++ test cases after recent Gnulib changes. Discussed starting at + . + * examples/calc++/Makefile.am (DEFAULT_INCLUDES): Override Automake's + definition in order to avoid Gnulib headers since we don't use config.h + here. + * tests/output.at (AT_CHECK_OUTPUT_FILE_NAME): Use AT_DATA_GRAMMAR + rather than AT_DATA so that config.h is included. + +2007-07-01 Joel E. Denny + + * data/glr.c (yy_yypstack, yypstates, yypdumpstack): Use YYFPRINTF + instead of fprintf. Guard these functions with #if YYDEBUG instead of + #ifdef YYDEBUG for consistency with all other uses of YYDEBUG in Bison + and so that YYFPRINTF is guaranteed to be defined here. + +2007-05-29 Joel E. Denny + + * src/muscle_tab.c (muscle_percent_define_invalid_value): Replace + with... + (muscle_percent_define_check_values): ... this more helpful function. + Again, it's not used yet, but it will be. + * src/muscle_tab.h: Likewise. + + Improve some comments in parser table construction. + * src/LR0.c (new_itemsets): Explain sorting of itemset and kernel_base. + (generate_states): Don't mention ruleset, which is internal to closure. + * src/closure.c (closure): Explain sorting of core and itemset, which + is required for this function to behave correctly. + * src/closure.h (closure): Mention sorting. + +2007-05-28 Joel E. Denny + + * src/lalr.c (state_lookahead_tokens_count): For code readability, + move the check for disabled transitions to an aver since conflict + resolution hasn't happened yet. + + * src/lalr.c (state_lookahead_tokens_count): Remove the check that + labels a state as inconsistent just because it has error transitions. + The original form of this check appeared in revision 1.1 of lalr.c, + which was committed on 1991-12-21. Now (at least), changing the + consistency label on such a state appears to have no useful effect in + any of the places it is examined, which I enumerate below. The key + point to understanding each item in this enumeration is that a state + with an error transition is labelled consistent in the first place only + if it has no rules, so the check cannot matter for states that have + rules. (1) Labelling a state as inconsistent will cause set_conflicts + to try to identify its conflicts, and a state must have *rules* to have + conflicts. (2) Labelling a state as inconsistent will affect how + action_row sets the default *rule* for the state. (3) Labelling a + state as inconsistent will cause build_relations to add lookback edges + to *rules* in that state. + * src/state.h (struct state): Word the comment for member consistent + more carefully. + +2007-05-27 Joel E. Denny + + Don't depend on C99 features. + * src/conflicts.c (conflicts_update_state_numbers): Fix for-loop. + * src/lalr.c (lalr_update_state_numbers): Fix for-loop. + * src/reader.c (check_and_convert_grammar): Fix for-loop. + * src/state.c (state_mark_reachable_states): Fix for-loop. + (state_remove_unreachable_states): Fix for-loop. + + Don't widen struct state with member reachable just to temporarily + record reachability. Instead, use a local bitset. + * src/state.h (struct state): Remove member. + * src/state.c (state_new): Don't initialize it. + (state_mark_reachable_states): Rename to... + (state_record_reachable_states): ... this, and use bitset. + (state_remove_unreachable_states): Use bitset. + +2007-05-26 Joel E. Denny + + * src/Makefile.am (yacc): Quote target action commands properly so + that the yacc script isn't corrupt. Reported by Hans Aberg at + . + + * data/glr.c (yylval): As in yacc.c, don't extern in the header for + the case of pure parsers. Reported by Frans Englich at + . + * THANKS: Add Frans Englich. + + * NEWS (2.3a+): In the %code entry, reference section `Bison + Declaration Summary' from the manual now since the %code summary has + moved there. + * doc/bison.texinfo (Prologue Alternatives): Mention that directives + in the rules section must be terminated by semicolons. + +2007-05-20 Joel E. Denny + + Extend the front-end API for %define variables to more completely + mirror the back-end. This will be useful in the future. + * data/bison.m4 (b4_percent_define_get, b4_percent_define_ifdef): + Update comments to mention the new front-end counterparts of these + macros. + * src/muscle_tab.c (MUSCLE_COMMON_DECODE): New macro with common code + for muscle_string_decode and muscle_location_decode. + (muscle_string_decode): New static function. + (muscle_location_decode): Use MUSCLE_COMMON_DECODE. + (muscle_percent_define_get, muscle_percent_define_ifdef): New + functions. + (muscle_percent_define_flag_if): Use muscle_percent_define_ifdef and + muscle_percent_define_get to mimic the b4_percent_define_flag_if + implementation more closely. + (muscle_percent_define_invalid_value): New function. + * src/muscle_tab.h (muscle_percent_define_get, + muscle_percent_define_ifdef, muscle_percent_define_invalid_value): + Prototype. + +2007-05-07 Joel E. Denny + + * NEWS (2.3a+): Mention yesterday's state-removal change. + (2.3a): Remove the %language entry, which was added after 2.3a. + * src/LR0.c, src/closure.c, src/closure.h, src/conflicts.c, + src/conflicts.h, src/lalr.c, src/lalr.h, src/print.c, + src/print_graph.c, src/state.c, src/state.h, tests/conflicts.at, + tests/existing.at: Update copyright date. + +2007-05-06 Joel E. Denny + + If conflict resolution makes states unreachable, remove those states, + report rules that are then unused, and don't report conflicts in those + states. + * src/conflicts.c, src/conflicts.h (conflicts_update_state_numbers): + New global function. + * src/lalr.c, src/lalr.h (lalr_update_state_numbers): New global + function. + * src/main.c (main): After conflict resolution, remove the unreachable + states and update all data structures that reference states by number. + * src/state.c (state_new): Initialize each state's reachable member to + false. + (state_mark_reachable_states): New static function. + (state_remove_unreachable_states): New global function. + * src/state.h (struct state): Add member bool reachable. + (state_remove_unreachable_states): Prototype. + * tests/conflicts.at (Unreachable States After Conflict Resolution): + New test case. + * tests/existing.at (GNU pic Grammar): Update test case output now that + an unused rule is discovered. + +2007-05-06 Joel E. Denny + + Minor code cleanup in parser table construction. + * src/LR0.c (new_itemsets): Use item_number_is_symbol_number. + (new_itemsets, save_reductions): Update for rename to nitemset. + * src/closure.c (nritemset): Rename to... + (nitemset): ... this since the "r" appears to meaningless and isn't + used in the comments. + (closure): Update for rename. + * src/closure.h (nritemset): Update extern to... + (nitemset): ... this. + * src/lalr.c (LA): Fix a typo in comments. + * src/print.c (print_core): Update for rename to nitemset. + * src/print_graph.c (print_graph): Likewise. + * src/state.h: Fix some typos in header comments. + +2007-04-04 Paul Eggert + + * THANKS: Use ASCII for Sebastien Fricker's name. Bison source + still sticks to ASCII. Sorry! + + * README-hacking: New file, taken mostly from coreutils, with changes + for Bison. Contains much of the contents of: + * README-cvs: Remove. + * bootstrap: Sync from gnulib. + * build-aux/.cvsignore: Remove *.t, mkinstalldirs. + * lib/.cvsignore: Add wchar.h, wctype.h. Remove exit.h. + +2007-03-10 Joel E. Denny + + * doc/bison.texinfo (Destructor Decl): Fix typo reported by Sebastian + Setzer. + (Java Differences): Fix some typos. + * THANKS: Add Sebastian Setzer. + +2007-03-07 Paolo Bonzini + + * data/java.m4 (b4_single_class_if): Remove. + (b4_abstract_if): Look at "%define abstract". + (b4_lexer_if): New. + (b4_union_name): Rename... + (b4_yystype): ... to this. Map to "%define stype". + (b4_rhs_value, b4_parse_param_decl, b4_lex_param_decl, + b4_maybe_throws): Fix quoting. + (b4_lex_param_call): Move below to keep b4_*_param_decl close. + * data/lalr1.java (Lexer interface): Always define. + (Lexer interface within parser class): Remove. + (YYLexer class): New, used when "%code lexer" is present. + (constructor): When "%code lexer" is used, pass %lex-param + to the lexer constructor. + (yylex, yyparse): Remove %lex-param from method invocations + (YYStack, yyaction, yyparse): Rename b4_union_name to b4_yystype. + + * doc/bison.texinfo (Java Bison Interface): Mention "%define + abstract". Rename "%define union_name" to "%define stype". + Rename method names according to previous patch. + (Java Scanner Interface): Describe "%code lexer" instead of + "%pure-parser" and "%define single_class". + (Java Differences): Mention "%code lexer". + + * tests/java.at (_AT_DATA_JAVA_CALC_Y): Remove final argument. + Include scanner here, using macros from tests/local.at. + (AT_DATA_CALC_Y): Remove final argument. + (_AT_CHECK_JAVA_CALC): Likewise. + (AT_CHECK_JAVA_CALC): Likewise. Test all four combinations + of %locations and %error-verbose. + (main): Test with and without %lex-param. + * tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Push AT_LEXPARAM_IF. + (AT_BISON_OPTION_POPDEFS): Pop it. + +2007-03-07 Juan Manuel Guerrero + + DJGPP spefic issue. Inhibit the use of disallowed characters for + file name genertion on Win98, WinXP, etc. These are |<>":?*\ + and concern testsuite case 46. + * Makefile.am: djgpp/testsuite.sed added to EXTRA_DIST + * djgpp/testsuite.sed: Inhibit the use of disallowed characters. + * djgpp/config.bat: Inhibit the use of disallowed characters. + +2007-03-02 Joel E. Denny + + Miscellaneous %define and %code cleanup. + * data/bison.m4 (b4_percent_define_flag_if): Correct comments on how + values are interpreted. + * doc/bison.texinfo (Decl Summary): Clean up and extend %define + documentation a little more. + * src/muscle_tab.c (MUSCLE_USER_NAME_CONVERT, + muscle_percent_define_insert, muscle_percent_code_grow): New + functions/macros. + * src/muscle_tab.h (muscle_percent_define_insert, + muscle_percent_code_grow): Prototype. + * src/parse-gram.y (prologue_declaration): Use + muscle_percent_define_insert and muscle_percent_code_grow when parsing + %define and %code directives. + + Make it easy to share %define boolean variables between the front-end + and back-end. Though not used yet, this will be useful in the future. + * data/bison.m4 (b4_check_user_names): Rewrite comments to talk about + Bison uses of names rather than just skeleton uses of names. + (b4_percent_define_get, b4_percent_define_ifdef): Rename + b4_percent_define_skeleton_variables(VARIABLE) to + b4_percent_define_bison_variables(VARIABLE). + (b4_percent_code_get, b4_percent_code_ifdef): Rename + b4_percent_code_skeleton_qualifiers(QUALIFIER) to + b4_percent_code_bison_qualifiers(QUALIFIER). + (b4_check_user_names_wrap): Update for renames. + * src/muscle_tab.c, src/muscle_tab.h (muscle_percent_define_flag_if, + muscle_percent_define_default): New functions mimicking + b4_percent_define_flag_if and b4_percent_define_default. + + For %define variables, report locations for invalid values and + redefinitions. + * data/bison.m4 (b4_percent_define_flag_if): Read + b4_percent_define_loc(VARIABLE) to report the location of an invalid + value for VARIABLE. + (b4_percent_define_default): Save a special location in + b4_percent_define_loc(VARIABLE) in case the default value for VARIABLE + must later be reported as invalid. + * src/muscle_tab.c (muscle_location_grow, muscle_location_decode): New + functions. + (muscle_percent_define_insert): Record the location of VARIABLE in + muscle percent_define_loc(VARIABLE), and use it to report the previous + location for a redefinition. + (muscle_percent_define_flag_if): Update like b4_percent_define_flag_if. + (muscle_percent_define_default): Update like b4_percent_define_default. + (muscle_grow_user_name_list): Rename to... + (muscle_user_name_list_grow): ... this for consistency and use + muscle_location_grow. + * src/muscle_tab.h (muscle_location_grow): Prototype. + * tests/input.at (%define errors): Update expected output. + * tests/skeletons.at (%define boolean variables: invalid skeleton + defaults): New test case. + +2007-02-28 Joel E. Denny + + * src/print.c (lookahead_set, state_default_rule): Remove. + (print_reductions): Replace state_default_rule invocation with + equivalent use of yydefact, which was computed in token_actions in + tables.c. + (print_results): Don't allocate lookahead_set. + +2007-02-27 Paolo Bonzini + + * data/lalr1.java: Prefix all private members with yy. + +2007-02-24 Joel E. Denny + + Use YYFPRINTF instead of fprintf where appropriate. Reported by + Sebastien Fricker at + . + * THANKS: Add Sebastien Fricker. + * data/glr.c, data/push.c, data/yacc.c (yy_reduce_print): Implement. + * doc/bison.texinfo (Tracing): Make it clearer that YYFPRINTF must + accept a variable number of arguments. + +2007-02-19 Joel E. Denny + + * bootstrap: Remove occurrences of .#bootmp from lib/Makefile. + +2007-02-13 Juan Manuel Guerrero + + * djgpp/config.bat: Adjustments concerning the use of autoconf 2.61. + * djgpp/config.sed: Adjustments concerning the use of autoconf 2.61. + * djgpp/config.site: Adjustments concerning the use of autoconf 2.61. + +2007-02-11 Paul Eggert + + Undo my 2007-02-07 change, switching back to the c-strcase module + introduced in the 2007-02-03 change. Bruno Haible reported that + the 2007-02-07 change would be dangerous in Turkish if we add a + language whose name contains "i", since "i" is not lowercase "I" + in Turkish. + * bootstrap.conf (gnulib_modules): Add c-strcase. Remove strcase. + * lib/.cvsignore: Add c-ctype.c, c-ctype.h, c-strcase.h, + c-strcasecomp.c, c-strncasecmp.c. Remove strcasecmp.c, strncasecmp.c. + * m4/.cvsignore: Remove strcase.m4. + * src/getargs.c: Revert 2007-02-07 change, as follows. + Include c-strcase.h. + (language_argmatch): Use c_strcasecmp rather than strcasecmp. + +2007-02-11 Bruno Haible + + Enable the Java related testsuite tests when the only Java compiler + found is a gcj < 4.3. Discussed at + . + * configure.ac (gt_JAVACOMP): Don't specify a target_version. + +2007-02-11 Joel E. Denny + + * data/Makefile.am: Update copyright date. + * data/push.c (yypull_parse): Report memory exhaustion and return 2 if + yypstate_new returns NULL. + (yypstate_new): Return NULL if malloc does. + * src/reader.c (packgram): Move translation of rule actions from the + beginning of packgram to... + (check_and_convert_grammar): ... here right before packgram is invoked + so it's easier to write more complete comments, and remove redundant + code. + +2007-02-10 Joel E. Denny + + As in semantic actions, make @$ in %initial-action, %destructor, and + %printer imply %locations. + * src/scan-code.l (SC_SYMBOL_ACTION): Set locations_flag = true when + scanning @$. + * tests/actions.at (AT_CHECK_ACTION_LOCATIONS): New macro supporting... + (@$ in %initial-action implies %locations, + @$ in %destructor implies %locations, + @$ in %printer implies %locations): ... these new test cases. + +2007-02-07 Paul Eggert + + Undo most of the 2007-02-03 change, switching to the strcase module + now that gnulib strcase has been fixed. + * bootstrap.conf (gnulib_modules): Remove c-strcase. Add strcase. + * lib/.cvsignore: Remove c-ctype.c, c-ctype.h, c-strcase.h, + c-strcasecomp.c, c-strncasecmp.c. Add strcasecmp.c, strncasecmp.c + * m4/.cvsignore: Add strcase.m4. + * src/getargs.c: Revert 2007-02-03 change, as follows. + Don't include c-strcase.h. + (language_argmatch): Use strcasecmp rather than c_strcasecmp. + strcasecmp has "unspecified behavior" outside the POSIX locale, + but it works fine in practice if at least one argument is ASCII, + as is the case in Bison. + +2007-02-07 Paolo Bonzini + + * tests/java.at: Skip tests if only one of javac/java is present. + Reported by Joel E. Denny. + * tests/atlocal.in: Adjust copyright years. + +2007-02-05 Paolo Bonzini + + * data/lalr1.java (Stack): Work around old verifiers that disallow + access to the private fields of an inner class, from the outer class. + We can make Stack's fields public because user code doesn't have access + to the instance of Stack used by parse(). Reported by Paul Eggert. + +2007-02-03 Paul Eggert + + * .cvsignore: Add javacomp.sh, javaexec.sh. Is this really + the right spot for these files? + * bootstrap.conf (gnulib_modules): Add c-strcase. + * lib/.cvsignore: Add c-ctype.c c-ctype.h, c-strcasecomp.c, + c-strncasecmp.c. + * src/getargs.c: Include c-strcase.h. + (language_argmatch): Use c_strcasecmp rather than strcasecmp, + to avoid unspecified behavior. + +2007-02-01 Joel E. Denny + + * doc/bison.texinfo (Decl Summary): Correct typo. + +2007-01-30 Paolo Bonzini + + * data/bison.m4 (b4_percent_define_flag_if): Don't treat 0 as false. + Complain if the value does not match empty, "true" or "false". + * data/c++.m4: Adjust default definitions of %define variables. + * data/java.m4: Adjust default definitions of %define variables. + * doc/bison.texinfo (Decl Summary): Adjust the %define entry according + to above behavior. + * tests/input.at (Boolean %define variables): Test new behavior. + +2007-01-29 Paolo Bonzini + + * NEWS: Mention java. + * TODO: Remove things that are done. + * bootstrap.conf: Add javacomp-script and javaexec-script. + * configure.ac: Invoke gt_JAVACOMP and gt_JAVAEXEC. + + * data/Makefile.am: Add new files. + * data/java-skel.m4: New. + * data/java.m4: New. + * data/lalr1.java: New. + + * doc/bison.texinfo: Put "A Complete C++ Example" under + C++ Parsers. Add Java Parsers. Put C++ Parsers and Java Parsers + under Other Languages. + + * src/getargs.c (valid_languages): Add Java. + * src/getargs.h (struct bison_language): Update size of string fields. + + * tests/Makefile.am: Add java.at. + * tests/atlocal.in: Add CONF_JAVA and CONF_JAVAC. + * tests/java.at: New. + * tests/testsuite.at: Include it. + +2007-01-28 Joel E. Denny + + Clean up. + * src/scan-skel.l (at_directive_perform): Add at_directive_argc and + at_directive_argv arguments so these no longer have to be global + variables. Also, update the implementation for the following changes. + (fail_for_at_directive_too_many_args, + fail_for_at_directive_too_few_args): Add at_directive_name argument. + (at_directive_name): Remove as at_directive_argv[0] will be used for + this now. + (AT_DIRECTIVE_ARGC_MAX): Increment to make space in at_directive_argv + for the directive name. + (at_directive_argc, at_directive_argv): Make these local within + skel_lex instead of global. + (INITIAL): Update directive start action for above changes. + (SC_AT_DIRECTIVE_ARG): Rename to... + (SC_AT_DIRECTIVE_ARGS): ... this, and update for above changes. + (SC_AT_DIRECTIVE_SKIP_WS): Update. + (scan_skel): Move yylex_destroy to... + (skel_scanner_free): ... here. + * tests/skeletons.at (installed skeleton file name): Rename to... + (installed skeleton file names): ... this. + +2007-01-27 Joel E. Denny + + * ChangeLog: For changes in doc/bison.texinfo, consistently reference + node names: say "Table of Symbols" not "Bison Symbols", and say "Decl + Summary" not "Directives". + * doc/bison.texinfo (Decl Summary, Calc++ Parser): Cross-reference the + %code entry in "Decl Summary" rather than the one in "Table of Symbols" + since the former is now the more complete one. + (Prologue Alternatives): Likewise and do the same for %defines. + (Table of Symbols): Add summary of %code, add summary of %define, and + move full %code documentation to... + (Decl Summary): ... here for consistency with other entries in these + sections. + Move %define entry in order to keep this list alphabetized. + Reword %define entry a little to put less emphasis on the skeleton + concept, which most users shouldn't have to think about. + +2007-01-26 Paul Eggert + + Adjust to recent gnulib changes. + * lib/.cvsignore: Remove stpcpy.h, strndup.h, strnlen.h. + Add string.h, string_.h, unistd_.h, wchar_.h. + * m4/.cvsignore: Add gnulib-common.m4, string_h.m4, wchar.m4. + * src/system.h: Don't include ; this is now done by + . + +2007-01-23 Paolo Bonzini + + Simplify implementation of unqualified %code, implement macros for + uniform treatment of boolean %define flags. Document %define. + * data/bison.m4 (b4_percent_define_ifdef, b4_percent_define_flag_if, + b4_percent_code_ifdef): New. + (b4_percent_code_get): Map unqualified %code to b4_percent_code(). + * data/c++.m4: Define default value for global_tokens_and_yystype. + * data/glr.cc: Likewise. + * data/location.cc: Use b4_percent_define_flag_if. + + * doc/bison.texinfo (Decl Summary): Document %define. + + * src/parse-gram.y (Unqualified %code): Change muscle name to + b4_percent_code(). + (content.opt): Default to empty. + +2007-01-17 Joel E. Denny + + Implement support for relative and absolute skeleton file names. + Discussed starting at + . + * doc/bison.texinfo (Decl Summary): Document in %skeleton entry. + (Bison Options): Document in --skeleton entry. + * src/output.c (output_skeleton): Use strncpy rather than strcpy since + full_skeleton can't necessarily hold all of pkgdatadir. + If the specified skeleton file name contains a `/', don't prepend + pkgdatadir. + * src/parse-gram.y (prologue_declaration): If the specified skeleton + file name contains a `/', prepend the grammar file directory. + * tests/Makefile.am (TESTSUITE_AT): Add skeletons.at. + * skeletons.at: New file. + (relative skeleton file names): New test case. + (installed skeleton file names): New test case. + * tests/testsuite.at: Include skeletons.at. + + * bootstrap: Update copyright to 2007. + +2007-01-17 Paolo Bonzini + + * bootstrap: Remove occurrences of .#bootmp from the files. + +2007-01-17 Akim Demaille + + * doc/bison.texinfo (Calc++ Parser): Don't try to alias + nonterminals. + Use per-type %printer. + +2007-01-17 Joel E. Denny + + * NEWS, data/c++-skel.m4, data/c++.m4, data/c-skel.m4, data/c.m4, + data/glr.c, data/glr.cc, data/lalr1.cc, data/location.cc, + djgpp/config.site, src/files.c, src/files.h, src/main.c, + src/muscle_tab.c, src/muscle_tab.h, src/parse-gram.y, src/reader.h, + src/scan-skel.h, src/scan-skel.l, tests/actions.at, tests/calc.at, + tests/glr-regression.at, tests/input.at, tests/local.at, + tests/output.at, tests/torture.at: Update copyright to 2007. + +2007-01-16 Akim Demaille + + * doc/bison.texinfo (Calc++ Parsing Driver): Let "parse" return an + error code. + (Calc++ Scanner): Exit with failure if we can't open the input + file. + Accept "-" standing for stdin. + (Calc++ Top Level): Print the result only if the parsing was + successful. + +2007-01-16 Akim Demaille + + * data/lalr1.cc (yy_reduce_print_): Add a missing end-of-line. + +2007-01-15 Paolo Bonzini + and Joel E. Denny + + Clean up %define and %code implementation in M4 some. Most + importantly, rename all related macros to be in the b4_percent_define + and b4_percent_code namespaces. Also, complete support for `.' in + %define variable names and %code qualifiers. + * data/bison.m4 (b4_check_user_names): Check for special + "SKELETON-NAMESPACE(name)" macros instead of using two nested + m4_foreach loops. + (b4_get_percent_define, b4_get_percent_code): Rename to... + (b4_percent_define_get, b4_percent_code_get): ... these. + Extend documentation with examples. + For SKELETON-NAMESPACE (as documented for b4_check_user_names), use + b4_percent_define_skeleton_variables and + b4_percent_code_skeleton_qualifiers. + Expect any value for the %define variable `foo' to be stored in the + macro named `b4_percent_define(foo)'; expect any %code blocks for the + qualifier `foo' to be stored in a macro named `b4_percent_code(foo)'; + expect any unqualified %code blocks to be stored in a macro named + `b4_percent_code_unqualified'. + Use m4_indir so that %define variable names and %code qualifiers can + contain `.', which is allowed by the grammar parser. + (b4_percent_define_default): New macro to set a default value for a + %define variable. + (m4_wrap): Update wrapped code, and fix some underquoting. + (b4_check_user_names_wrap): Update and define outside the m4_wrap. + Expect grammar uses of %define variables and %code qualifiers to be + defined in b4_percent_define_user_variables and + b4_percent_code_user_qualifiers. + * data/c++.m4: Use b4_percent_define_default rather than + m4_define_default. Fix some underquoting. Skeleton usage of %define + variable define_location_comparison now implies skeleton usage of + %define variable filename_type. + * data/glr.c, data/glr.cc, data/lalr1.cc, data/location.cc, + data/push.c, data/yacc.c: Update macro names. + * src/parse-gram.y (prologue_declaration, grammar_declaration): Update + muscle names. + +2007-01-14 Juan Manuel Guerrero + + DJGPP specific issues. + + * djgpp/config.site: Set ac_cv_path_mkdir to a sane DJGPP specific + default. Set gl_cv_absolute_wctype_h to a sane DJGPP specific default. + +2007-01-09 Joel E. Denny + + * tests/glr-regression.at: Use AT_PARSER_CHECK rather than AT_CHECK to + run parsers in all tests so that Valgrind is invoked during + maintainer-check-valgrind. + (Duplicate representation of merged trees): Free all semantic values. + (Duplicated user destructor for lookahead): Likewise. + +2007-01-09 Joel E. Denny + + * tests/local.at (AT_PARSER_CHECK): Add a PRE argument to specify a + command-line prefix. + * tests/torture.at (Exploding the Stack Size with Alloca): Stderr is + ignored, so use that PRE to set --log-fd=1 in VALGRIND_OPTS so we don't + miss Valgrind messages. + (Exploding the Stack Size with Malloc): Likewise. + +2007-01-09 Joel E. Denny + + Ignore YYSTACK_USE_ALLOCA for push parsers since the stacks can't be + locals. Reported by Juan Manuel Guerrero at + . + * data/push.c: Enclose the #ifdef YYSTACK_USE_ALLOCA in b4_push_if. + Fix some indentation also. + * tests/torture.at (Exploding the Stack Size with Alloca): Add comment + explaining this issue. + +2007-01-09 Paolo Bonzini + and Joel E. Denny + + Simplify union and prologue handling, and escape union and lex/parse + params with digraphs. + * data/bison.m4 (b4_pre_prologue, b4_post_prologue): Set their default + values to the empty string since these are no longer guaranteed + initialized by the front-end. + * data/glr.c, data/glr.cc, data/lalr1.cc, data/push.c, data/yacc.c: Add + braces around b4_user_stype since this is no longer done by the + front-end. + * src/files.c, src/files.h (pre_prologue_obstack, + post_prologue_obstack): Remove. + * src/muscle_tab.c (muscle_pair_list_grow): Don't duplicate header + comments here. Use MUSCLE_OBSTACK_SGROW so that values are escaped + with digraphs. This fixes lex params and parse params. + * src/muscle_tab.h (muscle_pair_list_grow): Update comments. + * src/output.c (prepare): Remove muscle insertion of the prologues. + (output): Remove freeing of pre_prologue_obstack and + post_prologue_obstack. + * src/parse-gram.y (prologue_declaration): Use muscle_code_grow rather + than prologue_augment for prologue parsing so you don't need prologue + obstacks. + (grammar_declaration): For %union RHS, use `braceless' instead of + "{...}" so that braces are already stripped and code is escaped with + digraphs. + * src/reader.c (prologue_augment): Remove. + (reader): Remove initialization of pre_prologue_obstack and + post_prologue_obstack. + * src/reader.h (prologue_augment): Remove. + + * data/c.m4: Remove stray parenthesis. + +2007-01-08 Joel E. Denny + + Remove quotes from variables names in %define directives and from + qualifiers in %code directives, and restrict the characters that are + allowed in them to M4-friendly ones. For %define, continue to support + the quoted form as a deprecated feature. Discussed starting at + . + * NEWS (2.3a+): Add entry for the change to %define. Update entry for + %code. + * doc/bison.texinfo (Prologue Alternatives): Update. + (Decl Summary): In %defines entry, update mention of `%code requires' + and `%code provides'. + (C++ Location Values): Update %define uses. + (Calc++ Parser Interface): Likewise. + (Calc++ Parser): Likewise, and update `%code requires' uses. + (Table of Symbols): Update %code documentation. + * src/parse-gram.y (prologue_declaration): For %define variables, use + `variable' instead of `STRING'. + (grammar_declaration): For %code qualifiers, use `ID' instead of + `STRING'. + (variable): New nonterminal that takes an `ID' or a `STRING'. + * tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Update %code + and %define uses. + * tests/calc.at (_AT_DATA_CALC_Y): Update %define use. + * tests/input.at (Reject unused %code qualifiers): Update %code uses. + (%define errors): Update %define uses. + +2007-01-08 Joel E. Denny + + * src/parse-gram.y (prologue_declaration): Use MUSCLE_INSERT_STRING + instead of muscle_insert for %define values so that M4-special + characters are replaced with digraphs. + * tests/input.at (%define errors): Extend to check weird values. + +2007-01-08 Joel E. Denny + + Instead of having skeletons declare all valid %define variables and + %code qualifiers, provide macros that retrieve the associated values + and build these lists automatically. Thus Bison will now warn when a + variable or qualifier is not used by the skeleton in the current + invocation regardless of whether it might sometimes be used by that + skeleton in other invocations. Also, move all %define value macros to + the b4_percent_define_ namespace, and remove the %define "NAME" {CODE} + form, which is replaced by %code. + * data/bison.m4 (b4_check_for_unrecognized_names): Rename to... + (b4_check_user_names): ... this, and change the series of valid name + arguments to a single list argument for names used in the skeleton + similar to the existing list argument for names used in the grammar. + Warn instead of complaining. + (b4_get_percent_define, b4_get_percent_code): New to retrieve %define + values and %code code, to format %code code properly, and to build + lists of all %define variables and %code qualifiers used in the + skeleton: b4_skeleton_percent_define_variables and + b4_skeleton_percent_code_qualifiers. + (b4_check_percent_define_variables, b4_check_percent_code_qualifiers): + Remove, and... + (m4_wrap): ... m4_wrap b4_check_user_names invocations instead so that + the skeleton names lists can finish building first. In place of + b4_used_percent_define_variables and b4_used_percent_code_qualifiers, + expect the lists b4_user_percent_define_variables and + b4_user_percent_code_qualifiers. + * data/c++.m4: Where setting default values for b4_parser_class_name, + b4_location_type, b4_filename_type, b4_namespace, and + b4_define_location_comparison, update their names to the + b4_percent_define_ namespace. + * data/glr.c: Don't use b4_check_percent_define_variables and + b4_check_percent_code_qualifiers. Use b4_get_percent_code. + * data/glr.cc, data/lalr1.cc: Likewise, and use b4_get_percent_define. + (b4_parser_class_name, b4_namespace): Define these using + b4_get_percent_define for parser_class_name and namespace. + * data/location.cc: Use b4_get_percent_define. + * data/push.c: Don't use b4_check_percent_define_variables and + b4_check_percent_code_qualifiers. Use b4_get_percent_code. + * data/yacc.c: Likewise, and don't call m4_exit in + b4_use_push_for_pull_if or m4_wrap code will never execute. + * src/muscle_tab.c, src/muscle_tab.h (muscle_grow_used_name_list): + Rename to... + (muscle_grow_user_name_list): ... this for consistency with the + terminology used in bison.m4. + * src/parse-gram.y (prologue_declaration): Prepend "percent_define_" to + %define variable names, and rename muscle used_percent_define_variables + to user_percent_define_variables. + (grammar_declaration): Rename muscle used_percent_code_qualifiers to + user_percent_code_qualifiers. + (content): Remove. + (content.opt): Replace content RHS with STRING RHS so %define "NAME" + {CODE} form is no longer accepted. + * tests/input.at (Reject bad %code qualifiers): Rename to... + (Reject unused %code qualifiers): ... this, and update test output. + (%define error): Update test output. + +2007-01-07 Joel E. Denny + + Check for unrecognized %define variables similar to checking for + unrecognized %code qualifiers. Check for redefined %define variables. + * data/bison.m4 (b4_check_for_unrecognized_names): New macro that + generalizes... + (b4_check_percent_code_qualifiers): ... this, which now wraps it. + (b4_check_percent_define_variables): New, also wraps it. + * data/glr.c: Unless glr.cc is wrapping glr.c, declare no valid %define + variables using b4_check_percent_define_variables. + * data/glr.cc, data/lalr1.cc: Declare the valid %define variables as + all those exercised in the test suite and all those listed in the + `Default values' section of c++.m4. Are there others? + * data/push.c, data/yacc.c: Declare no valid %define variables. + * src/muscle_tab.c, src/muscle_tab.h (muscle_find_const): New function, + similar to muscle_find, but it works even when the muscle stores a + const value. + (muscle_grow_used_name_list): New function for constructing the used + name list muscles that b4_check_for_unrecognized_names requires. + * src/parse-gram.y (prologue_declaration): Warn if a variable is + %define'd more than once. Define the b4_used_percent_define_variables + muscle with muscle_grow_used_name_list. + (grammar_declaration): Abbreviate %code code with + muscle_grow_used_name_list. + * tests/input.at (%define errors): New. + +2007-01-06 Joel E. Denny + + Provide warn_at, complain_at, and fatal_at function callbacks to the + skeletons, and use this for %code qualifier complaints. + * data/bison.m4 (b4_error_at): New, invoked by... + (b4_warn_at, b4_complain_at, b4_fatal_at): ... these new macros to wrap + the skeleton scanner's new @warn_at(...@), @complain_at(...@), and + @fatal_at(...@) directives. + (b4_check_percent_code_qualifiers): Rewrite to expect locations for + qualifiers in b4_used_percent_code_qualifiers and to use + b4_complain_at. + * src/location.c, src/location.h (boundary_set_from_string): New global + function. + * src/muscle_tab.c, src/muscle_tab.h (muscle_boundary_grow): New global + function. + * src/parse-gram.y (grammar_declaration): Add locations for qualifiers + to b4_used_percent_code_qualifiers. + * src/scan-skel.l (fail_for_at_directive_too_few_args): New static + function. + (AT_DIRECTIVE_ARGC_MAX): Increase for boundary arguments. + (lineno): Rename to... + (out_lineno): ... this so I don't misunderstand it again. + (SC_AT_DIRECTIVE_SKIP_WS): Don't increment out_lineno for newlines + here; these newlines are in the input but not the output file. + (SC_AT_DIRECTIVE_ARG): Likewise. Extract directive execution to... + (at_directive_perform): ... this new static function, and add handling + of new @warn_at(...@), @complain_at(...@), and @fatal_at(...@) + directives. + * tests/input.at (Reject bad %code qualifiers): Update test output with + locations and extend. + + * tests/output.at (Output file name: [, Output file name: ]): Remove + bogus comment about these tests failing. + +2007-01-06 Joel E. Denny + + Clean up b4_check_percent_code_qualifiers a little. + * data/bison.m4 (b4_check_percent_code_qualifiers): Expect qualifiers + in b4_used_percent_code_qualifiers to be double-M4-quoted. Rewrite + documentation and add examples. + * src/parse-gram.y (grammar_declaration): Double-M4-quote those + qualifiers here. + +2007-01-05 Joel E. Denny + + Don't use m4_divert since it makes m4_divert_push and m4_divert_pop + unreliable -- especially when they're hidden inside another macro. + * data/bison.m4, data/c++-skel.m4, data/c++.m4, data/c-skel.m4, + data/c.m4: Remove m4_divert(-1). + * data/glr.c, data/glr.cc, data/lalr1.cc, data/location.cc, + data/push.c, data/yacc.c: Likewise, and replace m4_divert(0) with + m4_divert_push(0) and m4_divert_pop(0). + * src/output.c (output_skeleton): Don't add an m4_divert_push(0) and + an m4_wrap([m4_divert_pop(0)]) to the M4. Diversion -1, which is + pushed and popped by m4sugar, should be first on the stack. + + Provide warn, complain, and fatal function callbacks to the skeletons. + This provides more flexibility than m4_fatal, improves the error + message format, and captures messages for translation. Discussed + starting at + . + * data/bison.m4 (b4_error): New, invoked by... + (b4_warn, b4_complain, b4_fatal): ... these new macros to wrap the + skeleton scanner's new @warn(...@), @complain(...@), and @fatal(...@) + directives. Because these M4 macros might be called when the current + diversion is -1 or 0, m4_divert_push and m4_divert_pop is used; thus + the previous removal of uses of m4_divert, which caused trouble. + (b4_check_percent_code_qualifiers): Use b4_complain instead of + m4_fatal to report unrecognized %code qualifiers. + * data/c++-skel.m4: Use b4_complain instead of m4_fatal to report C++ + push parser requests. + * data/glr.c: Use b4_complain instead of m4_fatal to report + non-deterministic push parser requests. + Update @output usage to @output(...@) form. + * data/glr.cc, data/lalr1.cc: Use b4_fatal instead of m4_fatal to + report missing %defines. Update @output usage to @output(...@) form. + * data/location.cc, data/push.c, data/yacc.c: Update @output usage to + @output(...@) form. + * src/main.c (main): Invoke skel_scanner_free. + * src/scan-skel.h (skel_scanner_free): Prototype new function. + * src/scan-skel.l (FLEX_NO_OBSTACK): Don't define; we now need the + obstack_for_string from flex-scanner.h. + (YY_DECL): Use to declare skel_lex static. + (decode_at_digraphs): Remove; now handled in the new + SC_AT_DIRECTIVE_ARG start condition. + (fail_for_at_directive_too_many_args, fail_for_invalid_at): New static + functions. + (at_directive_name, AT_DIRECTIVE_ARGC_MAX, at_directive_argc, + at_directive_argv): New static globals. + (INITIAL): Use fail_for_invalid_at. + Don't parse `@output file_name\n' or `@basename(...@)'. Instead, + recognize the start of a generalized `@directive(...@)' form and + start... + (SC_AT_DIRECTIVE_ARG): ... this new start condition to parse the + directive args (using the new obstack_for_string), to decode the + contained @ diagraphs, and to perform the directive. It recognizes + @basename(...@), @warn(...@), @complain(...@), @fatal(...@), and + @output(...@). + (SC_AT_DIRECTIVE_SKIP_WS): New start condition started by + SC_AT_DIRECTIVE_ARG to skip whitespace after the argument delimiter, + `@,'. + (scan_skel): Initialize obstack_for_string on the first call. + (skel_scanner_free): New function to free obstack_for_string. + * tests/input.at (Reject bad %code qualifiers): Update test output. + +2007-01-04 Joel E. Denny + + Consolidate the 4 prologue alternative directives (%code, %requires, + %provides, and %code-top) into a single %code directive with an + optional qualifier field. Discussed at + . + * NEWS (2.3a+): Rewrite the existing entry for the prologue + alternatives. + * doc/bison.texinfo (Prologue Alternatives): Update. + (Decl Summary): Update to %code "requires" and %code "provides". + (Calc++ Parser): Update to %code "requires". + (Table of Symbols): Remove entries for %requires, %provides, and + %code-top. Rewrite %code entry, and add a %code "QUALIFIER" entry. + * data/bison.m4 (b4_user_provides, b4_user_requires): Remove as these + are replaced by b4_percent_code_provides and b4_percent_code_requires, + which are skeleton-specific. + (b4_check_percent_code_qualifiers): New. A skeleton can use this to + declare what %code qualifiers it supports and to complain if any other + qualifiers were used in the grammar. + * data/glr.cc: Update to use b4_user_code([b4_percent_code_requires]) + and b4_user_code([b4_percent_code_provides]) in place of + b4_user_requires and b4_user_provides. + * data/glr.c, data/lalr1.cc, data/push.c, data/yacc.c: Likewise. + Add b4_user_code([b4_percent_code_top]) and + b4_user_code([b4_percent_code]). + Invoke b4_check_percent_code_qualifiers. + * src/parse-gram.y (PERCENT_CODE_TOP, PERCENT_PROVIDES, + PERCENT_REQUIRES): Remove. + (grammar_declaration): Remove RHS's for %code-top, %provides, and + %requires. Rewrite the %code RHS as the unqualified form defining the + muscle b4_percent_code. Add another RHS for the qualified %code form, + which defines muscles of the form b4_percent_code_QUALIFIER and the + b4_used_percent_code_qualifiers muscle. + * src/scan-gram.l (PERCENT_CODE_TOP, PERCENT_PROVIDES, + PERCENT_REQUIRES): Remove. + * tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Update to use + %code "requires" and %code "provides". + * tests/input.at (Reject bad %code qualifiers): New. + +2007-01-03 Joel E. Denny + + Use the new code_props interface for destructors and printers. + * src/symtab.h (symbol, semantic_type): Remove destructor_location and + printer_location members, and change the type of the destructor and + printer members to code_props. + (symbol_destructor_set, symbol_destructor_get, symbol_printer_set, + symbol_printer_get, semantic_type_destructor_set, + semantic_type_printer_set, default_tagged_destructor_set, + default_tagless_destructor_set, default_tagged_printer_set, + default_tagless_printer_set): Use code_props in arguments and return + types in place of char const * and location. + (symbol_destructor_location_get, symbol_printer_location_get): Remove + since the locations are now contained in the return of + symbol_destructor_get and symbol_printer_get. + * src/output.c (symbol_destructors_output, symbol_printers_output): + Replace with... + (symbol_code_props_output): ... this to eliminate duplicate code. + (output_skeleton): Update to use symbol_code_props_output. + * src/reader.c (symbol_should_be_used): Update use of + symbol_destructor_get. + * src/symlist.c (symbol_list_destructor_set, symbol_list_printer_set): + Update uses of the various _destructor_set and _printer_set functions. + * src/symtab.c: (default_tagged_destructor_location, + default_tagless_destructor_location, default_tagged_printer_location, + default_tagless_printer_location): Remove since we... + (default_tagged_destructor, default_tagless_destructor, + default_tagged_printer, default_tagless_printer): ... change the type + of these to code_props. + (symbol_new, semantic_type_new, symbol_destructor_set, + semantic_type_destructor_set, symbol_destructor_get, + symbol_printer_set, semantic_type_printer_set, symbol_printer_get, + symbol_check_alias_consistency, default_tagged_destructor_set, + default_tagless_destructor_set, default_tagged_printer_set, + default_tagless_printer_set): Update. + (symbol_destructor_location_get, symbol_printer_location_get): Remove. + (SYMBOL_CODE_PRINT): New similar to SYMBOL_ATTR_PRINT but for + code_props members. + (symbol_print): Use SYMBOL_CODE_PRINT. + +2007-01-03 Joel E. Denny + + Use the new code_props interface for rule actions. + * src/symlist.h (symbol_list): Replace action, action_location, and + used members with a code_props action_props member. + * src/reader.c (symbol_should_be_used, grammar_rule_check, + grammar_midrule_action, grammar_current_rule_merge_set, + grammar_current_rule_symbol_append, packgram): Update. + * src/scan-code.h (translate_rule_action): Remove, no longer used. + * src/scan-code.l (handle_action_dollar): Update. + (translate_rule_action): Remove, no longer used. + * src/symlist.c (symbol_list_sym_new, symbol_list_syms_print): Update. + +2007-01-02 Joel E. Denny + + Use the new code_props interface in parse-gram.y. + * src/parse-gram.y (prologue_declaration, braceless, epilogue.opt): + Update all uses of translate_* functions to use the new code_props + interface and to use gram_scanner_last_string_free and + code_scanner_last_string_free where possible. + (grammar_declaration): symbol_list_destructor_set and + symbol_list_printer_set now perform the translation, so don't do it + here. Use gram_scanner_last_string_free where possible. + * src/scan-code.h, src/scan-code.l (translate_symbol_action, + translate_code): Remove, no longer used. + * src/symlist.h, src/symlist.c (symbol_list_destructor_set, + symbol_list_printer_set): Perform code translation here rather than + depending on the caller to do so. + + * src/symlist.h (struct symbol_list): Correct some documentation typos. + * src/scan-gram.h (gram_last_string): Remove declaration. + * src/scan-gram.l (last_string): Declare it static. + +2007-01-02 Joel E. Denny + + Encapsulate code properties and related functionality for the various + destructors, printers, and actions into a code_props structure and + interface. This patch merely implements code_props in scan-code.h and + scan-code.l. Future patches will rewrite other modules to use it. + Discussed starting at + . + * src/location.h (EMPTY_LOCATION_INIT): Define so that it's easier to + consistently initialize const structs that have an empty location + field. + * src/location.c (empty_location): Initialize with EMPTY_LOCATION_INIT + to ensure consistency. + * src/scan-code.h (code_props): New structure. + (code_props_none_init, CODE_PROPS_NONE_INIT, code_props_none): New + function, macro, and const global variable for initializing a + code_props with no code. + (code_props_plain_init, code_props_symbol_action_init, + code_props_rule_action_init, code_props_translate_code): The rest of + the new code_props functional interface. Among other things, the init + functions set the code_props kind field so that + code_props_translate_code will know whether to behave like + translate_symbol_action, translate_rule_action, or translate_code. + These old translate functions must remain until all other modules are + updated to use the new code_props interface. + (code_scanner_last_string_free): New function similar to + gram_scanner_last_string_free. + (code_scanner_free): Add documentation. + * src/scan-code.l: Implement the new interface. + (code_lex): Make it static, add a code_props* argument, and remove the + rule argument. + (last_string): New static global similar to the one in scan-gram.l. + (SC_RULE_ACTION): Update to use the code_props* argument to code_lex + instead of rule. + (SC_SYMBOL_ACTION): For $$, set the is_value_used member of the + code_props since Bison may one day use this information for destructors + and printers. + (<*><>): Use STRING_FINISH so that last_string is set. + (handle_action_dollar): Use symbol_list_n_get and set used flag + directly since symbol_list_n_used_set is removed. + (translate_action): Add a code_props* argument and remove the rule, + action, and location arguments. Pass the code_props* on to code_lex. + (translate_rule_action, translate_symbol_action, translate_code): + Rewrite as wrappers around the new code_props interface. + * src/symlist.h, src/symlist.c (symbol_list_n_used_set): Remove since + it would eventually need to break the encapsulation of code_props. + +2007-01-01 Joel E. Denny + + * etc/.cvsignore: New. + +2007-01-01 Joel E. Denny + + Add maintainer-push-check to run maintainer-check using push parsing in + place of pull parsing where available. + * Makefile.am (maintainer-push-check): New. + * data/bison.m4 (b4_use_push_for_pull_if): New. + * data/push.c: Redefine b4_push_if and b4_use_push_for_pull_if + appropriately based on their existing values. + (yypush_parse): Don't print push-parser-specific diagnostics if push + parsing is being used in place of pull parsing. + * data/yacc.c: If push parsing should replace pull parsing, redirect to + push.c. + * src/output.c (prepare): Check BISON_USE_PUSH_FOR_PULL environment + variable, and insert b4_use_push_for_pull_flag into muscles. + * tests/Makefile.am (maintainer-push-check): New. + +2006-12-31 Joel E. Denny + + * data/push.c (yypush_parse): Set yynew = 1 at the end of a parse + (whether successful or failed) so that yypush_parse can be invoked + again to start a new parse using the same yypstate. + * tests/torture.at (AT_DATA_STACK_TORTURE): For push mode, extend to + check multiple yypull_parse invocations on the same yypstate. For pull + mode, extend to check multiple yyparse invocations. + (Exploding the Stack Size with Alloca): Extend to try with + %push-pull-parser. + (Exploding the Stack Size with Malloc): Likewise. + + * tests/calc.at (Simple LALR Calculator): Don't specify + %skeleton "push.c" since %push-pull-parser implies that now. + * tests/headers.at (export YYLTYPE): Don't check for the push + declarations. Otherwise, this test case can't be used to see if push + mode can truly emulate pull mode. + * tests/input.at (Torturing the Scanner): Likewise. + * tests/local.at (AT_YACC_OR_PUSH_IF, AT_PUSH_IF): Remove. + (AT_YYERROR_SEES_LOC_IF): Rather than AT_YACC_OR_PUSH_IF, use + AT_YACC_IF, which now includes the case of push mode since %skeleton + need not be used for push mode. This will be more intuitive once + push.c is renamed to yacc.c. + +2006-12-31 Joel E. Denny + + For push mode, convert yyparse from a macro to a function, invoke yylex + instead of passing a yylexp argument to yypull_parse, and don't + generate yypull_parse or yyparse unless %push-pull-parser is declared. + Discussed starting at + . + * data/bison.m4 (b4_pull_if): New. + * data/c.m4 (b4_identification): Define YYPULL similar to YYPUSH. + * data/push.c: Improve M4 quoting a little. + (b4_generate_macro_args, b4_parenthesize): Remove. + (yyparse): If there's a b4_prefix, #define this to b4_prefix[parse] + any time a pull parser is requested. + Don't #define this as a wrapper around yypull_parse. Instead, when + both push and pull are requested, make it a function that does that + same thing. + (yypull_parse): If there's a b4_prefix, #define this to + b4_prefix[pull_parse] when both push and pull are requested. + Don't define this as a function unless both push and pull are + requested. + Remove the yylexp argument and hard-code yylex invocation instead. + * etc/bench.pl.in (bench_grammar): Use %push-pull-parser instead of + %push-parser. + * src/getargs.c (pull_parser): New global initialized to true. + * getargs.h (pull_parser): extern it. + * src/output.c (prepare): Insert pull_flag muscle. + * src/parse-gram.y (PERCENT_PUSH_PULL_PARSER): New token. + (prologue_declaration): Set both push_parser and pull_parser = true for + %push-pull-parser. Set push_parser = true and pull_parser = false for + %push-parser. + * src/scan-gram.l: Don't accept %push_parser as an alternative to + %push-parser since there's no backward-compatibility concern here. + Scan %push-pull-parser. + * tests/calc.at (Simple LALR(1) Calculator): Use %push-pull-parser + instead of %push-parser. + * tests/headers.at (export YYLTYPE): Make yylex static, and don't + prototype it in the module that calls yyparse. + * tests/input.at (Torturing the Scanner): Likewise. + * tests/local.at (AT_PUSH_IF): Check for %push-pull-parser as well. + +2006-12-26 Joel E. Denny + + Update etc/bench.pl. Optimize push mode a little (the yyn change + deserves most of the credit). + * Makefile.am (SUBDIRS): Add etc subdirectory. + * configure.ac (AC_CONFIG_FILES): Add etc/bench.pl and etc/Makefile. + * data/push.c (b4_declare_parser_state_variables): Move yyn, yyresult, + yytoken, yyval, and yyloc declarations to... + (yyparse or yypush_parse): ... here to improve performance. For + yypush_parse invocations after the first, be sure to assign yyn its old + value again. + (yypstate_new): Don't bother initializing the yyresult field since the + initial value isn't used. + (yyn, yyresult, yytoken, yyval, yyloc): For each NAME in this list, + remove the #define that, in push mode, set it to yyps->NAME. + * etc/Makefile.am: New. + * etc/bench.pl: Remove and build it instead from... + * etc/bench.pl.in: ... this new file. Use @abs_top_builddir@ to invoke + "tests/bison" from the build directory by default rather than just + invoking "bison" from $PATH. + (calc_grammar): Update push parser code: don't declare yylval globally, + don't define yyparse_wrapper, and don't #define yyparse. + (bench_grammar): Update to check all working combinations of yacc.c, + push.c, impure, pure, pull, and push. + +2006-12-25 Joel E. Denny + + For push mode, add pull wrappers around yypush_parse. + * data/push.c: (b4_generate_macro_args, b4_parenthesize): New macros. + (yypull_parse): New function wrapping yypush_parse. + (yyparse): New #define wrapping yypull_parse. + * tests/calc.at (_AT_DATA_CALC_Y): Call yyparse even when %push-parser + is declared. + * tests/headers.at (export YYLTYPE): Make yylex global. For push mode, + prototype yylex in the module that calls yyparse, and don't prototype + yyparse there. Otherwise, the yyparse expansion won't compile. + * tests/input.at (Torturing the Scanner): Likewise. + +2006-12-25 Joel E. Denny + + Enable push parsers to operate in impure mode. Thus, %push-parser no + longer implies %pure-parser. The point of this change is to move + towards being able to test the push parser code by running the entire + test suite as if %push-parser had been declared. + * data/push.c (yypush_parse): For impure mode, remove the + yypushed_char, yypushed_val, and yypushed_loc arguments. + Instead, declare these as local variables initialized to the global + yychar, yylval, and yylloc. + For the first yypush_parse invocation only, restore the initial values + of these global variables when it's time to read a token since they + have been overwritten. + * src/parse-gram.y (prologue_declaration): Don't set pure_parser for + %push-parser. + * tests/calc.at (Simple LALR(1) Calculator): Always declare + %pure-parser along with %push-parser since this test case was designed + for pure push parsers. + * tests/local.at (AT_PURE_OR_PUSH_IF): Remove unused. + (AT_YACC_OR_PUSH_IF): New. + (AT_YYERROR_SEES_LOC_IF): Fix enough that the test suite passes, but + add a note that it's still wrong for some cases (as it has been for a + while). + (AT_PURE_LEX_IF): Use AT_PURE_IF instead of AT_PURE_OR_PUSH_IF since + %push-parser no longer implies %pure-parser. + +2006-12-20 Joel E. Denny + + Remove some unnecessary differences between the pull parser code and + the push parser code. This patch enables yynerrs in push mode. + * data/push.c: Reformat M4 a little. + (b4_yyerror_range): Remove and convert all uses to just yyerror_range. + (b4_declare_scanner_communication_variables): Don't omit yynerrs just + because push mode is on. Instead, if pure mode is on, move yynerrs + to... + (b4_declare_parser_state_variables): ... here. + (yynerrs, yyerror_range): For push mode, #define each NAME in this list + to yyps->NAME so it can be used in yypush_parse. + (yypush_parse): Don't omit uses of yynerrs in push mode. + +2006-12-20 Joel E. Denny + + Fix bug such that the first pushed token's value and location are + sometimes overwritten (sometimes by %initial-action) before being used. + * data/push.c (yypush_parse): Rename arguments yynchar, yynlval, and + yynlloc to yypushed_char, yypushed_val, and yypushed_loc for clarity. + For the first yypush_parse invocation, initialize yychar to YYEMPTY to + more closely mimic the pull parser logic. + Don't copy the pushed token to yychar, yylval, and yylloc until it's + time to read a token, which is after any initialization of yylval and + yylloc. + (gottoken): Rename label to... + (yyread_pushed_token): ... for clarity and to avoid infringing on the + user namespace. + +2006-12-20 Joel E. Denny + + Rearrange initialization of the parser state variables so that the + skeleton doesn't have to have a copy for pull mode and another for push + mode. This patch also fixes at least a bug such that yylloc was not + initialized (with b4_location_initial_line and + b4_location_initial_column) upon calling yypush_parse. However, that + initialization now overwrites the first token's location; + %initial-action assigning @$ already did the same thing, and both bugs + will be fixed in a later patch. + * data/push.c (b4_yyssa): Remove and convert all uses to just yyssa. + (b4_declare_parser_state_variables): Remove initialization of yytoken, + yyss, yyvs, yyls, and yystacksize. + (yypstate_new): Remove initialization of some yypstate fields: yystate, + yyerrstatus, yytoken, yyss, yyvs, yyls, yystacksize, yyssp, yyvsp, and + yylsp. + (yyssa, yyvsa, yylsa): For push mode, #define each NAME in this list to + yyps->NAME so it can be used in yypush_parse. + (yyparse or yypush_parse): For yypush_parse, don't print the + "Starting parse" diagnostic for invocations after the first. + Add initialization of yytoken, yyss, yyvs, yyls, and yystacksize; for + yypush_parse, only do it for the first invocation. + Allow yystate, yyerrstatus, yyssp, yyvsp, yylsp, and yylloc + initialization to occur in yypush_parse but only on the first + invocation. + +2006-12-19 Joel E. Denny + + * data/push.c: Add CPP guards around push parser declarations in both + the header and the code file. + In the code file, move the push parser declarations to the same place + they appear in the header file. + Clean up the M4 some, especially the inconsistent underquoting in + some b4_c_function_def and b4_c_function_decl uses. + +2006-12-19 Joel E. Denny + + Encapsulate the push parser state variables into an M4 macro so the + push skeleton doesn't have to list them again for pull mode's yyparse. + For push mode, remove yypush_parse's local equivalents of these + variables to eliminate unnecessary copying between the two sets at + run-time. This patch also fixes at least a bug related to multiple + %initial-action invocations in push mode. + * data/push.c (b4_declare_parser_variables): Rename to... + (b4_declare_scanner_communication_variables): ... this for clarity and + update both uses. + (b4_declare_yyparse_variables): Remove and move its contents to the one + spot where it was invoked. + (b4_declare_parser_state_variables): New macro containing the parser + state variables required by push mode. + (struct yypstate): Replace all fields but yynew with + b4_declare_parser_state_variables. + (yystate, yyn, yyresult, yyerrstatus, yytoken, yyss, yyssp, yyvs, + yyvsp, yyls, yylsp, yystacksize, yyval, yyloc): For push mode, #define + each NAME in this list to yyps->NAME so it can be used in yypush_parse. + (yyparse or yypush_parse): For yyparse in pull mode, replace local + parser state variable declarations with + b4_declare_parser_state_variables. + Don't initialize parser state variables when calling yypush_parse since + yypstate_new already does that. + Invoke the user's initial action only upon the first yypush_parse + invocation. + Remove all code that copies between the local parser state variables + and the yypstate. + +2006-12-19 Joel E. Denny + + * data/push.c (union yyalloc): Rename yyss, yyvs, and yyls fields to + prevent a name collision in a future patch where these names will + sometimes be #define'd. + (YYSTACK_RELOCATE): Add an argument to select a union yyalloc field + since it no longer has the same name as the existing argument. + (yyparse or yypush_parse): Update all uses of YYSTACK_RELOCATE. + +2006-12-19 Paolo Bonzini + and Joel E. Denny + + * doc/bison.texinfo (Decl Summary): In the %language entry, mention + that the argument is case-insensitive, and there's no `=' here. + For the %skeleton entry, mention that %language is better. + (Bison Options): Likewise for --language and --skeleton. Move the + --skeleton entry so that the `Tuning the parser' section is sorted + alphabetically on long options. + (C++ Bison Interface): Don't use the word skeleton. Don't explain the + %language directive in detail here; cross-reference the %language + documentation instead. + (Calc++ Parser): Use `%require "@value{VERSION}"' rather than + `%require "2.3b"' so that the example is always up-to-date. + (Table of Symbols): Add entries for %language and %skeleton. + * examples/extexi (normalize): Instead of replacing every %require + argument with the current Bison version, just substitute for + `@value{VERSION}'. This guarantees that we're testing what actually + appears in the documentation. + * examples/calc++/Makefile.am ($(calc_extracted)): Use `$(VERSION)' + rather than `@VERSION@'. + +2006-12-18 Paul Eggert + + * NEWS: Reword the %language news a bit, and put it earlier. + + * src/getargs.c (skeleton_arg): Last arg is now location const *. + Rewrite to simplify the logic. + (language_argmatch): Likewise. + (program_name): We now own this var. + * src/getargs.h (struct bison_language): Use char[] rather than + const char *. + + * doc/bison.texinfo (Decl Summary, Bison Options): Don't claim + Java is supported. + * src/complain.c (program_name): Remove decl; no longer needed. + * src/main.c (program_name): Remove; now belongs to getargs. + +2006-12-18 Paolo Bonzini + + * NEWS: Document %language. + + * data/Makefile.am (dist_pkgdata_DATA): Add c-skel.m4, c++-skel.m4. + + * data/c-skel.m4, data/c++-skel.m4: New files. + * data/glr.c: Complain on push parsers. + + * doc/bison.texinfo (C++ Parser Interface): Prefer %language + over %skeleton. + (Decl Summary): Document %language and %skeleton. + (Command line): Document -L. + + * examples/extexi: Rewrite %require directive. + * examples/calc++/Makefile.am: Pass VERSION to extexi. + + * src/files.c (compute_exts_from_gc): Look in language structure + for .y extension. + (compute_file_name_parts): Check whether .tab should be added. + * src/getargs.c (valid_languages, skeleton_prio, language_prio): + (language, skeleton_arg, language_argmatch): New. + (long_options): Add --language. + (getargs): Use skeleton_arg, add -L/--language. + * src/getargs.h: Include location.h. + (struct bison_language, language, skeleton_arg, language_argmatch): New. + * src/output.c (prepare): Pick default skeleton from struct language. + Don't dispatch C skeletons here. + * src/parse-gram.y (PERCENT_LANGUAGE): New. + (prologue_declaration): Add "%language" rule, use skeleton_arg. + * src/scan-gram.l ("%language"): New rule. + + * tests/calc.at: Test %skeleton and %language. + * tests/local.at (AT_SKEL_CC_IF): Look for %language. + (AT_GLR_IF): Look for %skeleton "glr.cc". + (AT_LALR1_CC_IF, AT_GLR_CC_IF): Rewrite. + (AT_YACC_IF): Reject %language. + +2006-12-18 Paul Eggert + + * src/symtab.h (struct semantic_type): Remove the tag 'semantic_type', + since it wasn't used; only the typedef name 'semantic_type' is needed. + Also, omit trailing white space. + + * bootstrap: Sync from coreutils. + (gnulib_extra_files): Add build-aux/announce.gen. + (slurp): Adjust .gitignore files like .cvsignore files. + * build-aux/announce-gen: Remove from CVS, since bootstrap + now creates this. + +2006-12-16 Joel E. Denny + + Make %push-parser imply %pure-parser. This fixes several bugs; see + . + * src/parse-gram.y (prologue_declaration): For %push-parser, also set + pure_parser = true. + * data/push.c: Don't bother testing b4_push_if when deciding whether + to expand b4_declare_parser_variables globally. + (yypush_parse): Likewise in here. + + * data/push.c (yypush_parse): Add b4_parse_param to arguments. + (yy_reduce_print): Reformat M4 for readability. + +2006-12-15 Bob Rossi + and Joel Denny + + * data/push.c (yypstate): Add typedef, and update all uses of + struct yypstate to just yypstate. + * tests/calc.at (_AT_DATA_CALC_Y): Update here as well. + +2006-12-14 Bob Rossi + + * data/push.c (yypush_parse): Declare prototype regardless of + %locations option. + +2006-12-14 Bob Rossi + + * data/push.c (yyparse): Remove the prototype and the #define when in + push-parser mode. + +2006-12-13 Bob Rossi + + * data/push.c (yypstate_init): Rename to... + (yypstate_new): ... this and use b4_c_function_def. + (yypstate_delete): New. + (yypush_parse): Change parameters yynval and yynlloc to be const. + * tests/calc.at (_AT_DATA_CALC_Y): Use new yypstate_new and + yypstate_delete functions. + +2006-12-13 Joel E. Denny + + * configure.ac (AC_PREREQ): Require Autoconf 2.61 because of our + strange test case titles. Reported by Bob Rossi. + +2006-12-13 Paul Eggert + + * TODO: Add pointer to Sylvain Schmitz's work on static detection + of potential ambiguities in GLR grammers. + +2006-12-12 Joel E. Denny + + * tests/testsuite.at (AT_CHECK): When checking if $1 starts with + `bison ', use m4_index instead of m4_substr since chopping up a string + containing M4-special characters causes problems here. + + Fix a couple of bugs related to special characters in user-specified + file names, and make it easier for skeletons to compute output file + names with the same file name prefix as Bison-computed output file + names. + * data/glr.cc, data/push.c, data/yacc.c: In @output, use + b4_parser_file_name and b4_spec_defines_file instead of + @output_parser_name@ and @output_header_name@, which are now redundant. + * data/glr.c, data/lalr1.cc: Likewise. Also, in header #include's, use + b4_parser_file_name, b4_spec_defines_file, and the new + @basename(FILENAME@) instead of @output_parser_name@ and + @output_header_name@, which inappropriately escaped the file names as + C string literals. + * src/files.c (all_but_ext): Remove static qualifier. + (compute_output_file_names): Move `free (all_but_ext)' to... + (output_file_names_free): ... here since all_but_ext is needed later. + * src/files.h (all_but_ext): Extern. + * src/muscle_tab.h (MUSCLE_INSERT_STRING_RAW): New macro that does + exactly what MUSCLE_INSERT_STRING used to do. + (MUSCLE_INSERT_STRING): Use MUSCLE_OBSTACK_SGROW so that M4-special + characters are escaped properly. + * src/output.c (prepare): Define muscle file_name_all_but_ext as + all_but_ext. + For pkgdatadir muscle, maintain previous functionality by using + MUSCLE_INSERT_STRING_RAW instead of MUSCLE_INSERT_STRING. The problem + is that b4_pkgdatadir is used inside m4_include in the skeletons, so + digraphs would never be expanded. Hopefully no one has M4-special + characters in his Bison installation path. + * src/scan-skel.l: Don't parse @output_header_name@ and + @output_parser_name@ anymore since they're now redundant. + In @output, use decode_at_digraphs. + Parse a new @basename command that invokes last_component. + (decode_at_digraphs): New. + (BASE_QPUTS): Remove unused. + * tests/output.at (AT_CHECK_OUTPUT_FILE_NAME): New macro. + (Output file name): New tests. + +2006-12-09 Joel E. Denny + + Warn about output files that are generated by the skeletons and that + conflict with other output files. + * data/glr.c: Don't generate the header file here when glr.cc does. + * src/files.c (file_names, file_names_count): New static globals. + (compute_output_file_names): Invoke output_file_name_check for files + not generated by the skeletons and remove existing checks. + (output_file_name_check): New function that warns about conflicting + output file names. + (output_file_names_free): Free file_names. + * src/files.h (output_file_name_check): Declare. + * src/scan-skel.l: Invoke output_file_name_check for files generated by + the skeletons. + * tests/output.at (AT_CHECK_CONFLICTING_OUTPUT): New. + (Conflicting output files): New tests. + +2006-12-09 Ralf Wildenhues + + * doc/bison.texinfo: Fix a couple of typos. + +2006-12-08 Bob Rossi + + * data/push.c: (yypvarsinit, yypvars, struct yypvars, yypushparse): + Rename to... + (yypstate_init, yypstate, struct yypstate, yypush_parse): ... these and + update all uses. + (b4_yyssa, b4_yyerror_range, yypstate_init): Rename pv to yyps. + (yypush_parse): Rename yypvars argument to yyps and remove redundant + local pv. + (yypstate_init, yypush_parse): Declare in Bison-generated header file. + * tests/calc.at (_AT_DATA_CALC_Y): Use newly named functions. + +2006-12-07 Bob Rossi + and Joel Denny + + * data/push.c (yypvarsinit): Change return type from void* to struct + yypvars*. No longer cast to void* on return. + (struct yypvars): Remove yylen since it need not be remembered between + yypushparse invocations. + (yypushparse): Don't copy between yylen and pv->yylen. + +2006-12-05 Bob Rossi + + * data/push.c (yychar_set, yylval_set, yylloc_set): Delete. + (yypushparse): Add yynchar, yynlval, yynlloc parameters. + (b4_declare_parser_variables): Do not declare yynerrs for push mode. + (struct yypvars): Remove b4_declare_parser_variables. + (yypvarsinit): Remove init code for removed variables. + (global scope): Do not declare b4_declare_parser_variables if + push or pure mode. + (yypushparse): Add b4_declare_parser_variables. + Init new local variables, and remove init code for removed + yypvars variables. + (yyparse): Delete. + * tests/calc.at (_AT_DATA_CALC_Y): Call yypushparse for push mode + and yyparse for other modes. + (AT_CHECK_CALC_LALR): Added '%skeleton "push.c"' for push tests. + * tests/local.at (AT_PUSH_IF, AT_PURE_OR_PUSH_IF): Added. + (AT_YYERROR_SEES_LOC_IF): push-parser makes this false. + (AT_PURE_LEX_IF): True if pure or push parser. + +2006-12-05 Joel E. Denny + + Document Yacc prologue alternatives and default %destructor's and + %printer's as experimental. Don't mention Java yet. Discussed at + . + * NEWS (2.3a+): Say they're experimental. Remove any mention of Java. + (2.3a): Annotate this entry to say the old forms of these features were + also experimental. + * doc/bison.texinfo (Prologue Alternatives, Freeing Discarded Symbols, + Table of Symbols): Say they're experimental. Comment out any mention + of Java (we'll want this back eventually). + +2006-12-01 Joel E. Denny + + Support a file name argument to %defines. Deprecate `=' in + %file-prefix, %name-prefix, and %output. Discussed at + . + * NEWS (2.3a+): Mention. + * doc/bison.texinfo (Decl Summary, Table of Symbols): Add entry for new + form of %defines, and remove `=' from entries for %file-prefix, + %name-prefix, and %output. + * src/parse-gram.y (prologue_declaration): Implement. + * tests/calc.at (Simple LALR Calculator, Simple GLR Calculator, Simple + LALR1 C++ Calculator, Simple GLR C++ Calculator): Remove the `=' from + all but one occurrence of %name-prefix. + * tests/headers.at (export YYLTYPE): Remove the `=' from %name-prefix. + * tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Likewise. + * tests/output.at (AT_CHECK_OUTPUT): Remove the `=' from all but one + occurrence of each of %file-prefix and %output. Add check for %defines + with argument. + * tests/reduce.at (Useless Terminals, Useless Nonterminals, + Useless Rules, Reduced Automaton, Underivable Rules, Empty Language): + Remove the `=' from %output. + +2006-11-21 Joel E. Denny + + Don't escape $ in test case titles since Autoconf 2.61 now does that + correctly. + * tests/actions.at (Default %printer and %destructor are not for error + or $undefined): Here. + (Default %printer and %destructor are not for $accept): Here. + * tests/input.at (Invalid $n and @n): Here. + +2006-11-20 Joel E. Denny + + Rename to <>. Discussed starting at + . + * NEWS (2.3a+): Update. + * doc/bison.texinfo (Freeing Discarded Symbols, Table of Symbols): + Update. + * src/parse-gram.y (TYPE_TAG_NONE, generic_symlist_item): Implement. + * src/scan-gram.l (INITIAL): Implement. + * src/symlist.c (symbol_list_default_tagless_new): Update comment. + * src/symlist.h (symbol_list, symbol_list_default_tagless_new): Update + comment. + * tests/actions.at (Default tagless %printer and %destructor, + Default tagged and per-type %printer and %destructor, + Default %printer and %destructor are not for error or $undefined, + Default %printer and %destructor are not for $accept, + Default %printer and %destructor for mid-rule values): Update. + * tests/input.at (Default %printer and %destructor redeclared, + Unused values with default %destructor): Update. + +2006-11-17 Joel E. Denny + + Don't let %prec take a nonterminal. + * src/reader.c (grammar_current_rule_prec_set): Make the %prec symbol a + token. + * tests/input.at (%prec takes a token): New test checking that %prec + won't take a nonterminal. + +2006-11-10 Joel E. Denny + + * tests/testsuite.at (AT_CHECK): Don't miss an exit value of 0 because + it was double-quoted. + * src/Makefile.am (YACC): Use --warnings=all,error so that Bison's own + grammar is maintained with Bison's highest standards. + * src/getargs.c: Fix some typos in Doxygen comments. + +2006-11-10 Joel E. Denny + + Fix memory leaks in scanners generated by at least Flex 2.5.9 and + later. Reported by Paul Eggert in + . + * src/flex-scanner.h (yylex_destroy): Define for Flex before 2.5.9. + * src/scan-code.l (translate_action): Don't bother invoking + yy_delete_buffer (YY_CURRENT_BUFFER) before creating the first buffer. + (code_scanner_free): Instead of invoking + yy_delete_buffer (YY_CURRENT_BUFFER) directly, invoke yylex_destroy, + which frees more. + * src/scan-gram.l (gram_scanner_free): Likewise. + * src/scan-skel.l (scan_skel): Likewise. + +2006-11-09 Joel E. Denny + + * src/files.c (tr): Change return type to void. + * src/muscle_tab.c (muscle_insert): Free storage in case muscle_grow + has been called previously for the same key. + (muscle_find): Return storage instead of value so that + --enable-gcc-warnings doesn't produce warnings that the return discards + const. aver that the value and storage are the same since storage + could potentially be NULL when value is not. + * tests/testsuite.at (AT_CHECK): Treat an unspecified exit value the + same as 0. + +2006-11-08 Paul Eggert + + * bootstrap.conf (excluded_files): Exclude m4/codeset.m4 (undoing + the earlier change today), m4/intl.m4, m4/intldir.m4. This gives + us a slightly cleaner distribution, and also works. + * m4/.cvsignore: Add inline.m4, wint_t.m4 to accommodate recent + gnulib changes. + +2006-11-08 Joel E. Denny + and Paul Eggert + + Don't let Bison leak memory except when it complains. + * src/files.h (parser_file_name, spec_verbose_file, spec_graph_file): + (spec_defines_file, dir_prefix): Now char *, not const char *, + since they are freed. + * src/files.c: Likewise. + (all_but_ext, all_but_tab_ext, src_extension, header_extension): + Likewise. + (tr): Now operates in-place. All uses changed. + (compute_exts_from_gf, compute_exts_from_src): Don't leak temporary + values. + (compute_file_name_parts, compute_output_file_names): Don't store + read-only data in variables that will be freed. + (compute_output_file_names): Free all_but_ext, all_but_tab_ext, + src_extension, and header_extension. + (output_file_names_free): New public function to free + spec_verbose_file, spec_graph_file, spec_defines_file, + parser_file_name, and dir_prefix. + * src/getargs.c (getargs): Don't store read-only data in variables that + will be freed. + * src/main.c (main): Invoke output_file_names_free, code_scanner_free + (which previously existed but was unused), and quotearg_free. + * src/muscle_tab.h (muscle_insert): value arg is now a `char const *'. + * src/muscle_tab.c: Likewise. + (muscle_entry): Make the value char const *, + and add a new storage member that is char * and can be freed. + (muscle_entry_free): New private function. + (muscle_init): Use it instead of free. + (muscle_insert, muscle_grow): Update and use new storage member. + (muscle_code_grow): Free the string passed to muscle_grow + since it's not needed anymore. + * src/parse-gram.y (%union): Make `chars' member a `char const *', and + add a new `char *code' member. + ("{...}"): Declare semantic type as code. + * src/scan-code.h (translate_rule_action): + (translate_symbol_action, translate_code, translate_action): Return + `char const *' rather than `char *' since external code should not free + these strings. + * src/scan-code.l: Likewise. + * src/scan-gram.l (): Use val->code for BRACED_CODE, + which is "{...}" in the parser. + * tests/Makefile.am (maintainer-check-valgrind): Set + VALGRIND_OPTS='--leak-check=full --show-reacheable=yes' before invoking + Valgrind. + * tests/calc.at (_AT_DATA_CALC_Y): fclose the FILE* so Valgrind doesn't + complain. + * tests/testsuite.at (AT_CHECK): Redefine so that running Bison and + expecting a non-zero exit status sets --leak-check=summary and + --show-reachable=no for Valgrind. Bison unabashedly leaks memory in + this case, and we don't want to hear about it. + +2006-11-08 Paul Eggert + + * bootstrap (runtime-po/Makevars): Derive from po/Makevars + instead of from the template, to simplify configuration a bit. + * bootstrap.conf (excluded_files): Don't exclude m4/codeset.m4 + and m4/wint_t.m4, as they are needed with the latest gnulib. + +2006-10-31 Joel E. Denny + + Disable unset/unused mid-rule value warnings by default, and recognize + --warnings=midrule-values to enable them. Discussed starting at + . + * NEWS (2.3a+): Mention. + * src/getargs.c, src/getargs.h (warnings_args, warnings_types, enum + warnings): Add entry for midrule-values subargument. + * src/reader.c (symbol_should_be_used): Don't return true just because + the value is a set/used mid-rule value unless + --warnings=midrule-values was specified. + * tests/input.at (Unused values, Unused values before symbol + declarations): Run tests with and without --warnings=midrule-values. + + * src/reader.c (check_and_convert_grammar): Use symbol_list_free rather + than LIST_FREE directly. + +2006-10-31 Joel E. Denny + + Finish implementing --warnings=error, which should not be implied by + --warnings=all (or by its synonyms -W and --warnings without + subarguments). + * src/complain.c (set_warning_issued): New function to report that + warnings are being treated as errors and to record an error if so. + Invoke... + (warn_at, warn): ... here. + * src/getargs.c (warnings_args, warnings_types): Reorder so that + "error - warnings are errors" does not appear above "all - all of the + above". + (getargs): For -W and --warnings without subarguments, don't let + FLAGS_ARGMATCH set warnings_error in warnings_flag. + * src/getargs.h (enum warnings): Unset warnings_error in warnings_all. + +2006-10-31 Joel E. Denny + + * src/getargs.c (flags_argmatch): Don't cause segmentation fault for + empty subargument list. For example: `bison --warnings= parser.y'. + +2006-10-21 Joel E. Denny + + * data/push.c, data/yacc.c: Make sure there's a newline at the end of + the parser header file so that gcc doesn't warn. + +2006-10-21 Joel E. Denny + + Split the default %destructor/%printer into two kinds: <*> and . + Discussed starting at + . + * NEWS (2.3a+): Mention. + * doc/bison.texinfo (Freeing Discarded Symbols): Document this and the + previous change today related to mid-rules. + (Table of Symbols): Remove %symbol-default and add <*> and . + * src/parse-gram.y (PERCENT_SYMBOL_DEFAULT): Remove. + (TYPE_TAG_ANY): Add as <*>. + (TYPE_TAG_NONE): Add as . + (generic_symlist_item): Remove RHS for %symbol-default and add RHS's + for <*> and . + * src/scan-gram.l (PERCENT_SYMBOL_DEFAULT): Remove. + (TYPE_TAG_ANY, TYPE_TAG_NONE): Add. + * src/symlist.c (symbol_list_default_new): Split into tagged and + tagless versions. + (symbol_list_destructor_set, symbol_list_printer_set): Split + SYMLIST_DEFAULT case into SYMLIST_DEFAULT_TAGGED and + SYMLIST_DEFAULT_TAGLESS. + * src/symlist.h: Update symbol_list_default*_new prototypes. + (symbol_list.content_type): Split enum value SYMLIST_DEFAULT into + SYMLIST_DEFAULT_TAGGED and SYMLIST_DEFAULT_TAGLESS. + * src/symtab.c (default_destructor, default_destructor_location, + default_printer, default_printer_location): Split each into tagged and + tagless versions. + (symbol_destructor_get, symbol_destructor_location_get, + symbol_printer_get, symbol_printer_location_get): Implement tagged + default and tagless default cases. + (default_destructor_set, default_printer_set): Split each into tagged + and tagless versions. + * src/symtab.h: Update prototypes. + * tests/actions.at (Default %printer and %destructor): Rename to... + (Default tagless %printer and %destructor): ... this, and extend. + (Per-type %printer and %destructor): Rename to... + (Default tagged and per-type %printer and %destructor): ... this, and + extend. + (Default %printer and %destructor for user-defined end token): Extend. + (Default %printer and %destructor are not for error or $undefined): + Update. + (Default %printer and %destructor are not for $accept): Update. + (Default %printer and %destructor for mid-rule values): Extend. + * tests/input.at (Default %printer and %destructor redeclared): Extend. + (Unused values with default %destructor): Extend. + +2006-10-21 Joel E. Denny + + Don't apply the default %destructor/%printer to an unreferenced midrule + value. Mentioned at + . + * src/symtab.c (dummy_symbol_get): Name all dummy symbols initially + like $@n instead of just @n so that the default %destructor/%printer + logic doesn't see them as user-defined symbols. + (symbol_is_dummy): Check for both forms of the name. + * src/reader.c (packgram): Remove the `$' from each midrule symbol + name for which the midrule value is referenced in any action. + * tests/actions.at (Default %printer and %destructor for mid-rule + values): New test. + * tests/regression.at (Rule Line Numbers, Web2c Report): Update output + for change to dummy symbol names. + +2006-10-20 Joel E. Denny + + Warn about unset midrule $$ if the corresponding $n is used. + * src/reader.c (symbol_should_be_used): Check midrule parent rule for + $n usage. + (packgram): Before invoking grammar_rule_check on any rule, make sure + all actions have already been scanned in order to set `used' flags. + Otherwise, checking that a midrule's $$ is set will not always work + properly because the midrule check must forward-reference the midrule's + parent rule. + * tests/input.at (AT_CHECK_UNUSED_VALUES): Extend to check the new + warning. + +2006-10-20 Joel E. Denny + + More improvements to the documentation of the prologue alternatives: + * NEWS (2.3a+): Mention the new `Prologue Alternatives' section in the + Bison manual. + * doc/bison.texinfo (Prologue Alternatives): Correct some errors. Add + some text to clarify the relative importance of the new directives and + to show how these directives may be viewed as code labels. + +2006-10-16 Joel E. Denny + + Similar to the recently removed %before-header, add %code-top as the + alternative to the pre-prologue. Mentioned at + . + Also, let the prologue alternatives appear in the grammar section. + * src/parse-gram.y (PERCENT_CODE_TOP): New token. + (prologue_declaration): Move the existing prologue alternatives to... + (grammar_declaration): ... here and add %code-top. + * src/scan-gram.l (PERCENT_CODE_TOP): New token. + + Clean up and extend documentation for the prologue alternatives. + * NEWS (2.3a+): Describe prologue alternatives. + * doc/bison.texinfo (Prologue): Move discussion of prologue + alternatives to... + (Prologue Alternatives): ... this new section, and extend it to discuss + all 4 directives in detail. + (Table of Symbols): Clean up discussion of prologue alternatives and + add %code-top. + +2006-10-16 Juan Manuel Guerrero + + DJGPP specific issues. + + * djgpp/config.bat: config.hin has been moved to lib. Adjust + config.bat accordingly. + * djgpp/config.sed: Adjust config.sed for the use of autoconf 2.60. + * djgpp/config.site: Likewise. + +2006-10-16 Paolo Bonzini + + Replace %*-header with %provides, %requires, %code. See discussion at + http://lists.gnu.org/archive/html/bison-patches/2006-10/msg00002.html + + * data/bison.m4 (b4_user_requires, b4_user_provides): New. + (b4_user_start_header): Remove. + * data/glr.c: Use new macros instead of b4_*start_header + and b4_*end_header. + * data/glr.cc: Likewise. + * data/lalr1.cc: Likewise. + * data/push.c: Likewise. + * data/yacc.c: Likewise. + + * doc/bison.texinfo: Remove %before-header, rename + %{start,end,after}-header to %requires, %provides, %code. + + * src/parse-gram.y: Likewise (also rename token names accordingly). + * src/scan-gram.l: Likewise. + * tests/actions.at: Likewise. + +2006-10-14 Paul Eggert + + * lib/Makefile.am (AM_CFLAGS): Remove $(WERROR_CFLAGS). + Problem reported by Joel E. Denny. + +2006-10-14 Jim Meyering + + (Sync from coreutils.) + Work also when the working directory (with e.g. coreutils sources) + is version controlled with git, rather than CVS. + * bootstrap (CVS_only_file): Test for the existence of README-cvs, + rather than CVS. + In messages and comments, say e.g., "checked-out sources", + rather than "CVS sources". + (version_controlled_file): New function. Work for git as well as + for CVS. Don't use grep's -q option. + (slurp): Call it here, in place of CVS-specific code. + +2006-10-14 Joel E. Denny + + Fix testsuite for ./configure --enable-gcc-warnings: + * configure.ac (gcc-warnings): Move -Wall before -Wno-sign-compare. + Otherwise, gcc 4.1.0 (at least) warns about sign comparisons in + __AT_CHECK_PRINTER_AND_DESTRUCTOR in tests/actions.at. + * test/input.at (Torturing the Scanner): #include for abort. + * test/regression.at (Diagnostic that expects two alternatives): + Likewise. + +2006-10-12 Paul Eggert + + * bootstrap.conf (gnulib_modules): Add config-h. + * djgpp/subpipe.c: Include unconditionally; don't + worry about HAVE_CONFIG_H. + * lib/abitset.c: Likewise. + * lib/bitset.c: Likewise. + * lib/bitset_stats.c: Likewise. + * lib/bitsetv-print.c: Likewise. + * lib/bitsetv.c: Likewise. + * lib/ebitset.c: Likewise. + * lib/get-errno.c: Likewise. + * lib/lbitset.c: Likewise. + * lib/subpipe.c: Likewise. + * lib/timevar.c: Likewise. + * lib/vbitset.c: Likewise. + * lib/bitset.c: Include "bitset.h" first, to test interface. + * lib/bitset_stats.c: Include "bitset_stats.h" first. + * lib/bitsetv-print.c: Include "bitsetv-print.h" first. + * lib/bitsetv.c: Include "bitsetv.h" first. + * lib/get-errno.c: Include "get-errno.h" first. + * m4/.cvsignore: Add config-h.m4. + * tests/actions.at (Default %printer and %destructor for ...): + Adjust expected line numbers in output to reflect removal of #if + HAVE_CONFIG_H lines. + * tests/glr-regression.at (Missed %merge type warnings when ...): + Likewise. + * tests/regression.at (Braced code in declaration in rules section): + Likewise. + * tests/atlocal.in (CPPFLAGS): Don't define HAVE_CONFIG_H. + * tests/local.at (AT_DATA_GRAMMAR_PROLOGUE): + Include unconditionally. + + * bootstrap: Sync from coreutils, as follows: + + 2006-10-11 Paul Eggert + + * bootstrap (symlink_to_gnulib): Fix bug: the dot_dots shell + variable was sometimes used without being initialized. This + messed up the installation of the INSTALL file in some cases. + + 2006-10-09 Paul Eggert + + * bootstrap (usage, main program, symlink_to_gnulib): Add option + --copy. Inspired by a suggestion from Bruno Haible. + + 2006-10-03 Jim Meyering + + * bootstrap: Undo last change to this file, since now gnulib-tool + sticks with the automake default in generating dependencies. + +2006-10-12 Paul Eggert + + * configure.ac: Use AC_PROG_CC_STDC; this is more modern than + the old AC_PROG_CC / AM_PROG_CC_STDC combination. + + * doc/bison.1: Add copyright notice. + + * data/glr.c: Don't include ; not used. + + * NEWS: The -g and --graph options now output graphs in Graphviz + DOT format, not VCG format. + * doc/bison.1: Likewise. + * doc/bison.texinfo (Understanding, Bison Options): Likewise. + * THANKS: Add Satya Kiran Popuri, who proposed the initial version + of this change in + . + * TODO: Remove Graphviz entry. + * src/Makefile.am (bison_SOURCES): Add graphviz.c and graphviz.h; + remove vcg.c, vcg.h, vcg_defaults.h. + * src/vcg.c, src/vcg.h, src/vcg_defaults.h: Remove. + * src/graphviz.c, src/graphviz.h: New files. + * src/files.c (compute_output_file_names): Output .dot, not .vcg. + * src/files.h: Make comment more generic. + * src/main.c (main): Likewise. + * src/print_graph.h: Likewise. + * src/getargs.c (usage): Make usage description more generic. + * src/print_graph.c: Include graphviz.h rather than vcg.h. + (static_graph, fgraph): Remove. All uses changed to pass + arguments instead of sharing a static var. + (print_core, print_actions, print_state, print_graph): + Output graphviz format rather than VCG format. + * tests/.cvsignore: Remove *.vcg; add *.dot. + * tests/output.at: Expect *.dot files, not *.vcg files. + + * data/Makefile.am (dist_pkgdata_DATA): Add bison.m4; this + accommodates the 2006-10-08 change. + +2006-10-11 Bob Rossi + + * data/push.c (yypushparse, yypvarsinit, yypvars): Wrap in b4_push_if. + (b4_yyssa, b4_yyerror_range): New macros. + (struct yypvars): Remove yyssa_ptr and yyerror_range_ptr fields. + (yypvarsinit): Remove init of removed fields. + (yypushparse): Remove use of removed fields; use new macros instead. + +2006-10-11 Paul Eggert + + * data/push.c (yypushparse): Fix memory leak if yymsg is malloced + in a push parser. Reindent slightly to match yacc.c better. + +2006-10-11 Bob Rossi + + * data/push.c (struct yypvars): Remove yymsgbuf, yymsgbuf_ptr, yymsg, + yymsg_alloc fields. + (yypvarsinit, yypushparse): Remove init of removed fields. + (yypushparse): Use yymsgbuf instead of yymsgbuf_ptr. + +2006-10-09 Paul Eggert + + * THANKS: Add Paolo Bonzini and Bob Rossi. + +2006-10-08 Paolo Bonzini + + * data/c.m4 (b4_copyright, b4_epilogue, b4_location_initial_column, + b4_location_initial_line, p4_parse_param, b4_ints_in, b4_flag_if, + b4_define_flag_if and uses, b4_basename, b4_syncline, b4_user_code, + b4_define_user_cde and uses): Remove. + (b4_comment, b4_prefix, b4_sync_start): New. + * data/bison.m4: New file, with most of the content removed from c.m4. + * src/muscle_tab.h: Use "do {...} while(0)" throughout. + * src/output.c (output_skeleton): Pass bison.m4. + (prepare): Pass glr_flag and nondeterministic_flag. Pass prefix + only if specified. + +2006-10-05 Paul Eggert + + Fix test failure reported by Tom Lane in + + and try to make such failures easier to catch in the future. + * data/glr.c (YYTRANSLATE): Don't check for nonpositive arg; + that's now the caller's responsibility. + (yyprocessOneStack, yyrecoverSyntaxError, yyparse): + Set yychar = YYEOF if it's negative. + * tests/actions.at (yylex): Abort if asked to read past EOF. + * tests/conflicts.at (yylex): Likewise. + * tests/cxx-type.at (yylex): Likewise. + * tests/glr-regression.at (yylex): Likewise. + * tests/input.at (yylex): Likewise. + * tests/regression.at (yylex): Likewise. + * tests/torture.at (yylex): Likewise. + +2006-10-01 Paul Eggert + + Fix problems with translating English-language diagnostics. + * bootstrap: Fix bug introduced in recent bootstrap changes, with + respect to bison-runtime pot generation. The YY_ stuff + wasn't being captured. + * bootstrap.conf (XGETTEXT_OPTIONS_RUNTIME): New var. + * po/POTFILES.in: Add src/location.c, src/scan-code.l. + * runtime-po/POTFILES.in: Add data/push.c. + +2006-09-29 Paul Eggert + + Merge bootstrap changes from coreutils. + + 2006-09-28 Jim Meyering + + Automatically generated dependencies are important even + when all of the sources in a directory come from gnulib. + * bootstrap (gnulib_tool): Remove the "no-dependencies" automake + option that gnulib-tool adds to what becomes our lib/gnulib.mk. + + 2006-09-23 Jim Meyering + + * bootstrap (gnulib_tool_options): Add "--local-dir gl". + + 2006-09-20 Paul Eggert + + * bootstrap: Add support for --force. + (usage): New function. Describe usage less tersely. + (CVS_only_file): New var. + +2006-09-21 Paul Eggert + + * data/push.c (YYPUSH_MORE): Make it an enum instead. + (yypushparse): Use YYPUSH_MORE instead of the mystery constant. + Adjust white space and comments to match GNU style better. + +2006-09-20 Bob Rossi + + * data/push.c (yyresult_get): Remove function. + (YYPUSH_MORE): Add #define. + (yypushparse): Modify return value. + +2006-09-20 Paul Eggert + + * stamp-h.in: Remove; no longer needed. + * .cvsignore: Replace autom4te.cache and config.cache with *.cache. + Remove config.h, config.hin, intl (no longer created). + * lib/.cvsignore: Add config.h, config.hin, configmake.h, inttypes.h, + stamp-h1. + + Sync bootstrap from coreutils, as follows: + + 2006-09-18 Paul Eggert + + * bootstrap (symlink_to_gnulib): New function. + (cp_mark_as_generated): Use it, to prefer symlinks-to-gnulib + to copies-of-gnulib. + (cp_mark_as_generated, slurp, gnulib_files): + Avoid making a copy if it's the same as the old version. + (gnulib_files): Add support for this variable (used by Bison). + +2006-09-20 Paul Eggert + + * src/getargs.c (usage): Rework to use conventions similar to + coreutils, to make translation a bit easier and the code a bit + smaller. Problem reported by Tim Van Holder. + +2006-09-15 Paul Eggert + + Use some of gnulib's new modules, taken from coreutils. + + * bootstrap: Sync from coreutils, except add support for gnulib_files. + * bootstrap.conf: New file. + (gnulib_modules): Add configmake, inttypes, unistd. + (XGETTEXT_OPTIONS): Add complain, complain_at, + fatal, fatal_at, warn, warn_at, unexpected_end. + * configure.ac (AC_CONFIG_HEADERS): config.h is now in lib, not here. + (gl_USE_SYSTEM_EXTENSIONS): Remove; gl_EARLY now does this. + (gl_EARLY): Add. + (AM_STDBOOL_H): Remove; gl_INIT now dows this. + (gl_INIT): Add + (GNULIB_AUTOCONF_SNIPPET): Remove. + (AM_GNU_GETTEXT): Add; require formatstring macros since that's + the pickiest. + * lib/.cvsignore: Add inttypes_.h. + * lib/Makefile.am: Include gnulib.mk first so we can append to it. + (AM_CFLAGS): Add WERROR_CFLAGS, to be more like coreutils. + (BUILT_SOURCES, EXTRA_DIST, MOSTLYCLEANFILES): Remove + no-longer-necessary initializations. + (lib_SOURCES): Remove, replacing by libbison_a_SOURCES. + * lib/subpipe.c: Include unconditionally, now that we + use the unistd module. + * src/system.h: Likewise. + * m4/.cvsignore: Remove *_gl.m4, gnulib.m4, inttypes_h.m4, uintmax_t.m4, + ulonglong.m4. Add gettext.m4, gnulib-cache.m4, gnulib-comp.m4, + gnulib-tool.m4, inttypes-h.m4, inttypes-pri.m4, inttypes.m4. + * src/Makefile.am (DEFS): Remove, since configmake does this for us. + (AM_CPPFLAGS): Remove -I../lib, since Automake does that for us. + * src/system.h: Include inttypes.h unconditionally, now that we + use the inttypes module. Don't bother to include stdint.h, since + inttypes.h now does that for us. + (LOCALEDIR): Remove, now that we use the configmake module. + * src/getargs.c: Include configmake.h. + * src/main.c: Likewise. + * src/output.c: Likewise. + * tests/atlocal.in (CPPFLAGS): Include from $abs_top_builddir/lib, + not from $abs_top_builddir, since config.h moved. + + + Port to GCC 2.95. First two problems reported by Michael Deutschmann in + . + + * src/parse-gram.y (symbol_declaration): Don't put statements + before declarations; it's not portable to C89. + * src/scan-code.l (handle_action_at): Likewise. + + * src/scan-code.l: Always initialize braces_level; the old code + left it uninitialized and therefore had undefined behavior. + + Don't attempt to redefine 'assert', since it runs afoul of + systems where standard headers (mistakenly) include . + Instead, define and use our own alternative, called 'aver'. + * src/reader.c: Don't include assert.h, since we no longer + use assert. + * src/scan-code.l: Likewise. + * src/system.h (assert): Remove, replacing with.... + (aver): New function, taking a bool arg. All uses changed. + * src/tables.c (pack_vector): Ensure that aver arg is bool, + not merely an integer. + +2006-09-15 Bob Rossi + + * data/Makefile.am (dist_pkgdata_DATA): Add push.c. + * data/c.m4 (YYPUSH): New. + (b4_push_if): New macro. Use it instead of #ifdef YYPUSH. + * src/getargs.c (push_parser): New var. + * src/getargs.h (push_parser): New declaration. + * src/output.c (prepare): Add macro insertion of `push_flag'. + * src/parse-gram.y (PERCENT_PUSH_PARSER): New token. + (prologue_declaration): Parse %push-parser. + * src/scan-gram.l: Scan new PERCENT_PUSH_PARSER token. + * tests/calc.at (_AT_CHECK_CALC_ERROR): Add "Return" and "Now" to + list of removed lines from the traces observed. + (AT_CHECK_CALC_LALR): Added push parser tests. + +2006-09-13 Paul Eggert + + * NEWS: Version 2.3a. + * configure.ac (AC_INIT): Likewise. + + * tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Remove + "#define YYSTYPE int" that caused "make maintainer-check" to fail + due to header ordering dependencies. I don't know why the #define + was there. + + Fix glr.cc and lalr1.cc's use of YYDEBUG so that there's zero + runtime cost when YYDEBUG is not defined, and so that some tests + that used to fail now work. Problem and initial suggestion by + Paolo Bonzini. + * data/c++.m4 (b4_parse_param_cons): Omit leading ','. + * data/glr.cc (b4_parser_class_name): + Initialize yycdebug_ only if YYDEBUG. Also, initialize yydebug_. + (debug_level, set_debug_level): Affect yydebug_, not ::yydebug. + (yydebug_) [YYDEBUG]: New member. + (yycdebug_): Now defined only if YYDEBUG. + * data/lalr1.cc (yydebug_, yycdebug_): Now defined only if YYDEBUG. + (YYCDEBUG) [!YYDEBUG]: Don't use yydebug_ and yycdebug_. + (b4_parser_class_name): Initialize yydebug_ and yycdebug_ only + if YYYDEBUG. + (debug_stream, set_debug_stream, debug_level, set_debug_level): + Define only if YYDEBUG. + * tests/calc.at (_AT_DATA_CALC_Y) [!YYDEBUG]: Omit call to + set_debug_level. + * tests/regression.at (_AT_DATA_DANCER_Y) [!YYDEBUG]: Likewise. + * tests/calc.at (AT_CHECK_CALC_GLR_CC): Uncomment calls to + AT_CHECK_CALC_GLR_CC that are working now. + +2006-09-12 Paul Eggert + + * data/glr.cc (YYERROR_VERBOSE, YYTOKEN_TABLE): Remove. + We don't need them in glr.cc, and glr.c defines them. + Defining YYERROR_VERBOSE to 0 here breaks glr.c, since glr.c + assumes that defining it to anything is the same as defining + it to 1. Problem reported by Paolo Bonzini. + +2006-09-12 Paolo Bonzini (tiny change) + + * data/c.m4 (b4_null, b4_case): Define. + * src/output.c (prepare_symbols): Use b4_null. + (user_actions_output): Use b4_case. + +2006-09-11 Paul Eggert + + * data/glr.c (b4_shared_declarations): Put start-header first, + before any #includes that we generate, so that feature-test + macros work. Problem reported by Michael Deutschmann in + . + * data/lalr1.cc: Likewise. + * doc/bison.texinfo (Prologue): Document that feature-test macros + should be defined before any Bison declarations. + * tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Put defns + that depend on location.hh after, not before, Bison decls, since + we now include location.hh after the first user prologue. + + * doc/bison.texinfo (Calc++ Parser): Fix memory leak reported by + Sander Brandenburg in + . + Also, fix minor white space and comment issues. + (Prologue): Mention that it's better to define feature-test macros + before Bison declarations. Problem reported by Michael Deutschmann. + + * README-cvs: Fix typo: "&" should be "&&". Problem reported + by Jim Meyering. + * m4/.cvsignore: Add argmatch.m4. Remove obstack.m4, strerror_r.m4. + This adjusts to recent gnulib changes. + +2006-09-04 Joel E. Denny + + Finish implementation of per-type %destructor/%printer. Discussed + starting at + + and + . + * NEWS (2.3+): Add a description of this feature to the default + %destructor/%printer description. + * doc/bison.texinfo (Freeing Discarded Symbols): Likewise. + * src/symlist.c (symbol_list_destructor_set, symbol_list_printer_set): + Invoke semantic_type_destructor_set or semantic_type_printer_set when a + list node contains a semantic type. + * src/symtab.c, src/symtab.h: Extend with a table that associates + semantic types with their %destructor's and %printer's. + (semantic_type_from_uniqstr, semantic_type_get, + semantic_type_destructor_set, semantic_type_printer_set): New functions + composing the public interface of that table. + (symbol_destructor_get, symbol_destructor_location_get, + symbol_printer_get, symbol_printer_location_get): If there's no + per-symbol %destructor/%printer, look up the per-type before trying + the default. + * tests/actions.at (Per-type %printer and %destructor): New test case. + * tests/input.at (Default %printer and %destructor redeclared): + Extend to check that multiple occurrences of %symbol-default in a + single %destructor/%printer declaration is an error. + (Per-type %printer and %destructor redeclared, Unused values with + per-type %destructor): New test cases. + +2006-09-04 Joel E. Denny + + Require default %destructor/%printer to be declared using + %symbol-default instead of an empty symbol list, and start working on + new per-type %destructor/%printer. Discussed at + . + * NEWS (2.3+): Add %symbol-default to example. + * bison.texinfo (Freeing Discarded Symbols): Likewise. + (Table of Symbols): Add entry for %symbol-default. + * src/parse-gram.y (PERCENT_SYMBOL_DEFAULT): New token. + (generic_symlist, generic_symlist_item): New nonterminals for creating + a list in which each item is a symbol, semantic type, or + %symbol-default. + (grammar_declaration): Use generic_symlist in %destructor and %printer + declarations instead of symbols.1 or an empty list. + (symbol_declaration, precedence_declaration, symbols.1): Update actions + for changes to symbol_list. + * src/reader.c: Update for changes to symbol_list. + * src/scan-code.l: Likewise. + * src/scan-gram.l: Scan new PERCENT_SYMBOL_DEFAULT token. + * src/symlist.c, src/symlist.h: Extend such that a list node may + represent a semantic type or a %symbol-default in addition to just an + ordinary symbol. Add switched functions for setting %destructor's and + %printer's. + * tests/actions.at, tests/input.at: Add %symbol-default to all default + %destructor/%printer declarations. + +2006-08-23 Joel E. Denny + + Whether the default %destructor/%printer applies to a particular symbol + isn't a question of whether the user *declares* that symbol (in %token, + for example). It's a question of whether the user by any means + *defines* the symbol at all (by simply using a char token, for + example). $end is defined by Bison whereas any other token with token + number 0 is defined by the user. The error token is always defined by + Bison regardless of whether the user declares it with %token, but we + may one day let the user define error as a nonterminal instead. + * NEWS (2.3+): Say "user-defined" instead of "user-declared". + * doc/bison.texinfo (Freeing Discarded Symbols): Likewise, and document + the meaning of "user-defined". + * tests/actions.at (Default %printer and %destructor for user-declared + end token): Rename to... + (Default %printer and %destructor for user-defined end token): ... + this. + + * src/symtab.c (symbol_destructor_get, symbol_printer_get): In the + computation of whether to apply the default, don't maintain a list of + every Bison-defined symbol. Instead, just check for a first character + of '$', which a user symbol cannot have, and check for the error token. + +2006-08-21 Joel E. Denny + + Don't apply the default %destructor or %printer to the error token, + $undefined, or $accept. This change fits the general rule that the + default %destructor and %printer are only for user-declared symbols, + and it solves several difficulties that are described in the new test + cases listed below. + * src/symtab.c (symbol_destructor_get, symbol_printer_get): Implement. + * tests/actions.at (Default %printer and %destructor are not for error + or $undefined, Default %printer and %destructor are not for $accept): + New test cases. + +2006-08-19 Joel E. Denny + + Allow %start after the first rule. + * src/reader.c (grammar_current_rule_begin): Don't set the start symbol + when parsing the first rule. + (check_and_convert_grammar): Search for it here after all grammar + declarations have been parsed. Skip midrules, which have dummy LHS + nonterminals. + * src/symtab.c (symbol_is_dummy): New function. + * src/symtab.h (symbol_is_dummy): Declare it. + * tests/input.at (%start after first rule): New test. + +2006-08-18 Joel E. Denny + + Redo some of the previous commit: add back the ability to use + non-aliased/undeclared string literals since it might be useful to + those declaring %token-table. + * src/reader.c (check_and_convert_grammar): Undo changes in previous + commit: don't worry about complaints from symbols_pack. + * src/symtab.c (symbol_new, symbol_class_set, + symbol_check_alias_consistency): Undo changes in previous commit: count + each string literal as a new symbol and token, assign it a symbol + number, and don't complain about non-aliased string literals. + (symbols_pack): Since symbol_make_alias still does not decrement symbol + and token counts but does still set aliased tokens to the same number, + symbol_pack_processor now leaves empty slots in the symbols array. + Remove those slots. + * tests/regression.at (Undeclared string literal): Remove test case + added in previous commit since non-aliased string literals are allowed + again. + (Characters Escapes, Web2c Actions): Undo changes in previous commit: + remove unnecessary string literal declarations. + * tests/sets.at (Firsts): Likewise. + +2006-08-18 Joel E. Denny + + Don't allow an undeclared string literal, but allow a string literal to + be used before its declaration. + * src/reader.c (check_and_convert_grammar): Don't invoke packgram if + symbols_pack complained. + * src/symtab.c (symbol_new): Don't count a string literal as a new + symbol. + (symbol_class_set): Don't count a string literal as a new token, and + don't assign it a symbol number since symbol_make_alias does that. + (symbol_make_alias): It's not necessary to decrement the symbol and + token counts anymore. Don't assume that an alias declaration occurs + before any uses of the identifier or string, and thus don't assert that + one of them has the highest symbol number so far. + (symbol_check_alias_consistency): Complain if there's a string literal + that wasn't declared as an alias. + (symbols_pack): Bail if symbol_check_alias_consistency failed since + symbol_pack asserts that every token has been assigned a symbol number + although undeclared string literals have not. + * tests/regression.at (String alias declared after use, Undeclared + string literal): New test cases. + (Characters Escapes, Web2c Actions): Declare string literals as + aliases. + * tests/sets.at (Firsts): Likewise. + +2006-08-14 Joel E. Denny + + In the grammar scanner, STRING_FINISH unclosed constructs and return + them to the parser in order to improve error messages. + * src/scan-gram.l (SC_ESCAPED_STRING, SC_ESCAPED_CHARACTER, + SC_BRACED_CODE, SC_PROLOGUE): Implement. + * tests/input.at (Unclosed constructs): New test case. + * tests/regression.at (Invalid inputs): Update now that unclosed %{ is + seen. + + * src/scan-gram.h, src/scan-gram.l (gram_last_braced_code_loc): Remove + unused global. + +2006-08-13 Joel E. Denny + + Handle string aliases for character tokens correctly. + * src/symtab.c (symbol_user_token_number_set): If the token has an + alias, check and set its alias's user token number instead of its own, + which is set to indicate the alias. Previously, every occurrence of + the character token in the grammar overwrote that alias indicator with + the character code. + * tests/input.at (String aliases for character tokens): New test. + +2006-08-12 Joel E. Denny + + * src/parse-gram.y: Add `%expect 0' so we don't overlook conflicts. + +2006-08-11 Paul Eggert + + * bootstrap: Put in need-ngettext argument to AM_GNU_GETTEXT, + to prevent failures when building on older platforms. + Check for autopoint failure. + Set XGETTEXT_OPTIONS to values that check for C format strings, + so that translators are warned about them (this also helps + prevent core dumps). + + * lib/subpipe.c (create_subpipe): Use new gnulib pipe_safer + function, since it simplifies our code a bit. + + * configure.ac (AC_ARG_ENABLE): Use -Wextra -Wno-sign-compare + rather than -W, so we don't get bogus warnings about sign comparisons. + Add -Wpointer-arith, since that warning is useful (it reports code + that does not conform to C89 and that some compilers reject). + * data/c.m4, data/glr.c, data/lalr1.cc, data/yacc.c: Undo latest change, + since it's no longer needed. + +2006-08-10 Joel E. Denny + + Clean up scanners a bit. + * src/flex-scanner.h (FLEX_NO_OBSTACK): New macro that blocks obstack + definitions so gcc won't warn when obstack_for_string is unused. + * src/scan-code.l: config.h and system.h are already #include'd by + scan-code-c.c, so get rid of them here. + * src/scan-gram.l: Likewise. + * src/scan-skel.l: Likewise, and use flex-scanner.h without obstack + definitions rather than duplicating the rest of it. + * src/scan-gram-c.c, scan-skel-c.c: #include "system.h". + +2006-08-09 Joel E. Denny + + Suppress signed/unsigned comparison warnings for yycheck. + * data/c.m4 (b4_safest_int_type): New macro. + * data/glr.c, data/lalr1.cc: Wherever you compare yycheck[i] against + a signed int type, cast it to b4_safest_int_type first. + * data/yacc.c: Likewise. + (b4_safest_int_type): Overwrite the one from c.m4 since b4_int_type is + also overwritten. + +2006-08-09 Ralf Wildenhues (tiny change) + + * doc/bison.texinfo: Fix some typos. + +2006-08-02 Paul Eggert + + * m4/.cvsignore: Add inttypes_h.m4,lib-ld.m4, lib-prefix.m4, + po.m4, stdint_h.m4, uintmax_t.m4, ulonglong.m4, warning.m4. + + * bootstrap (gnulib_tool): Stop using --assume-autoconf; + the latest gnulib does this a different way. + (get_translations): Sharuzzaman Ahmat Raslan reported that the ms + translation was patched, so stop omitting it. + +2006-07-29 Joel E. Denny + + Enable declaration of default %printer/%destructor. Make the parser + use these for all user-declared grammar symbols for which the user does + not declare a specific %printer/%destructor. Thus, the parser uses it + for token 0 if the user declares it but not if Bison generates it as + $end. Discussed starting at + , + , + and + . + * NEWS (2.3+): Mention. + * doc/bison.texinfo (Actions in Mid-Rule): It's no longer impossible to + declare a %destructor for a mid-rule's semantic value. It's just + impossible to declare one specific to it. + (Freeing Discarded Symbols): Mention that @$ can be used in %destructor + code. Describe default %destructor form. + * src/parse-gram.y (grammar_declaration): Parse default + %printer/%destructor declarations. + * src/output.c (symbol_destructors_output): Use symbol_destructor_get + and symbol_destructor_location_get rather than accessing the destructor + and destructor_location members of struct symbol. + (symbol_printers_output): Likewise but for %printer's. + * src/reader.c (symbol_should_be_used): Likewise but for %destructor's + again. + * src/symtab.c (default_destructor, default_destructor_location, + default_printer, default_printer_location): New static global + variables to record the default %destructor and %printer. + (symbol_destructor_get, symbol_destructor_location_get, + symbol_printer_get, symbol_printer_location_get): New functions to + compute the appropriate %destructor and %printer for a symbol. + (default_destructor_set, default_printer_set): New functions to set the + default %destructor and %printer. + * src/symtab.h: Prototype all those new functions. + * tests/actions.at (Default %printer and %destructor): New test to + check that the right %printer and %destructor are called, that they're + not called for $end, and that $$ and @$ work correctly. + (Default %printer and %destructor for user-declared end token): New + test to check that the default %printer and %destructor are called for + a user-declared end token. + * tests/input.at (Default %printer and %destructor redeclared, Unused + values with default %destructor): New tests to check related grammar + warnings and errors. + +2006-07-29 Joel E. Denny + + Clean up handling of %destructor for the end token (token 0). + Discussed starting at + + and + . + + Make the skeletons consistent in how they pop the end token and invoke + its %destructor. + * data/glr.c (yyrecoverSyntaxError, yyparse): Don't pop the start + state, which has token number 0, since this would invoke the + %destructor for the end token. + * data/lalr1.cc (yy::parser::parse): Don't check for the final state + until after shifting the end token, or else it won't be popped. + * data/yacc.c (yyparse): Likewise. + + * data/glr.c (yyparse): Clear the lookahead after shifting it even when + it's the end token. Upon termination, destroy an unshifted lookahead + even when it's the end token. + * data/lalr1.cc (yy::parser::parse): Likewise. + * data/yacc.c (yyparse): Likewise. + + * src/reader.c (packgram): Don't check rule 0. This suppresses unused + value warnings for the end token when the user gives the end token a + %destructor. + + * tests/actions.at (Printers and Destructors): Test all the above. + +2006-07-24 Paul Eggert + + Update to latest gnulib and gettext versions. + * bootstrap (gnulib-modules): Remove hard-locale, stdio-safer. + Add fopen-safer. + (gnulib_files): Add m4/warning.m4. Don't worry about files + overwritten by autopoint. + Replace gt_INTL_SUBDIR_CORE with an empty body in m4/gettext_gl.m4. + Suppress "id", "ms", "tr" translations for now, since gettext 0.15 + rejects them. + Don't use autoreconf; instead, invoke autopoint etc. by hand, + so that we can remove the intl files at a better time. + (intl_files_to_remove): Remove aclocal.m4, since it gets + rebuilt anyway. Remove m4/inttypes_h.m4, m4/inttypes.m4, + m4/isc-posix.m4, m4/lib-ld.m4, m4/lib-prefix.m4, m4/po.m4, + m4/stdint_h.m4, m4/uintmax_t.m4, m4/ulonglong.m4. + Add m4/inttypes-h.m4, m4/lock.m4, m4/visibility.m4. + Remove datarootdir hack; no longer needed. + * configure.ac: Use gl_WARNING_CFLAGS rather than BISON_WARNING. + (AM_GNU_GETTEXT_VERSION): Bump from 0.12 to 0.15. + * lib/.cvsignore: Remove hard-locale.c, hard-locale.h, strdup.c, + strdup.h. + * m4/.cvsignore: Remove hard-locale.m4, strdup.m4. + * m4/warning.m4: Remove from CVS, since we now use gnulib's version. + +2006-07-20 Paul Eggert + + * bootstrap: Adjust to today's change to gnulib-tool by invoking + it with --assume-autoconf='latest-stable'. + +2006-07-13 Joel E. Denny + + * src/parse-gram.y (grammar_declaration): Don't confuse Doxygen (at + least 1.4.7 and 1.4.4) by putting a #line between `typedef union + YYSTYPE' and `{'. + * src/muscle_tab.h (muscle_grow): Replace the header comments with + those from muscle_tab.c since the old ones are misleading. + +2006-07-13 Akim Demaille + + Support %define "KEY" {VALUE}. + * src/scan-code.h, src/scan-code.l (translate_action) + (translate_rule_action, translate_symbol_action, translate_code): + Return char *, not const char *. + * src/parse-gram.y (declaration): Rename as... + (prologue_declaration): this. + (string_content): Remove this nonterminal, use STRING. + (braceless, content, content.opt): New nonterminal. + Use them. + (%define): Now accept content.opt, i.e., accept also BRACED_CODE + as value. + * src/scan-gram.l (getargs.h): Don't include it. + +2006-07-12 Paul Eggert + + * data/lalr1.cc (YYCDEBUG): Use 'if (yydebug_) (*yycdebug_)' + rather than a for-loop that declares a local bool variable. This + should work around a compatibility problem with a Cray x1e C++ + compiler reported by Hung Nguyen in + . + The for-loop was introduced in the 2004-11-17 change but I don't + know why it was needed. + +2006-07-12 Akim Demaille + + * data/c.m4: Comment changes. + +2006-07-10 Akim Demaille + + * src/complain.c (error_message, ERROR_MESSAGE): New. + To factor... + (fatal_at, fatal, warn_at, warn, complain_at, complain): these. + * src/complain.h, src/complain.c (warning_issued): Remove, unused. + +2006-07-09 Paul Eggert + + * NEWS: Instead of %union, you can define and use your own union type + YYSTYPE if your grammar contains at least one tag. + Your YYSTYPE need not be a macro; it can be a typedef. + * doc/bison.texinfo (Value Type, Multiple Types, Location Type): + (Union Decl, Decl Summary): Document this. + * data/glr.c (YYSTYPE): Implement this. + * data/glr.cc (YYSTYPE): Likewise. + * data/lalr1.cc (YYSTYPE): Likewise. + * data/yacc.c (YYSTYPE): Likewise. + * src/output.c (prepare): Output tag_seen_flag. + * src/parse-gram.y (declaration, grammar_declaration): + Use 'union_seen' rather than 'typed' to determine whether + %union has been seen, since grammars can now be typed without + %union. + (symbol_declaration, type.opt, symbol_def): + Keep track of whether a tag has been seen. + * src/reader.c (union_seen, tag_seen): New vars. + (typed): remove. + * src/reader.h (union_seen, tag_seen, typed): Likewise. + * src/scan-code.l (untyped_var_seen): New variable. + (handle_action_dollar): Adjust to above changes. + (handle_action_dollar, handle_action_at): + Improve overflow checking for outlandish numbers. + * tests/input.at (AT_CHECK_UNUSED_VALUES): Redo test to + avoid new diagnostics generated by above changes. + * tests/regression.at (YYSTYPE typedef): Add test to check + for type tags without %union. + + * src/symlist.c (symbol_list_length): Return int, not unsigned + int, since callers expect int. This may need to get revisited + once we have proper integer overflow checking. + + * src/scan-gram.h (gram_scanner_cursor): Remove decl, since this + object is now static. + + * src/getargs.c (flags_argmatch): Return void, not int, + to pacify ./configure --enable-gcc-warnings. + + * src/flex-scanner.h (STRING_FREE): Don't use FLEX_PREFIX (last_string) + since last_string is already defined to FLEX_PREFIX (last_string). + +2006-07-09 Akim Demaille + + Implement --warnings/-W. + * src/getargs.c (report_argmatch, trace_argmatch): Remove, + replaced by... + (flags_argmatch, FLAGS_ARGMATCH): this new function and macro. + Adjust callers. + * src/getargs.h, src/getargs.c (warnings, warnings_flags) + (warnings_args, warnings_types): New. + (getargs, short_options, long_options): Accept -W/--warnings. + Sort the options by alphabetical order, upper case letter right + before its lower case. + +2006-07-09 Joel E. Denny + + Change %merge result type clash warnings to errors. Discussed at + . + * src/reader.c (record_merge_function_type): Use complain_at. + * tests/glr-regression.at (Missed %merge type warnings when LHS type is + declared later): Update test case results. + +2006-07-09 Akim Demaille + + * src/getargs.h, src/getargs.c: Swap --report and --trace handling + to be in alphabetical order. + (trace_args): Spelling fixes. + +2006-07-09 Paul Eggert + + * data/yacc.c (YYID, yy_stack_print): Prefix local vars with "yy" + so they don't collide with user-defined macros. + (yy_stack_print): Don't assume that yytype_int16 promotes to int; + this was never guaranteed, and now that we're using gnulib stdint, + which defines int_fast16_t to long int, the problem is exposed. + +2006-07-08 Paul Eggert + + * data/c.m4 (b4_basename): Simplify a bit, since we don't + need the full POSIX semantics (and weren't implementing them + anyway). + + Adjust to Autoconf 2.60 and today's gnulib. + * bootstrap (gnulib_modules): Add stdint. + Remove special case for m4/onceonly_2_57.m4, since gnulib-tool + no longer copies it. + (intl_files_to_remove): Remove m4/longlong.m4 and m4/wchar_t.m4, + since stdint needs the former and wcwidth (which is now required + by mbswidth) needs the latter. + Append 'datarootdir = @datarootdir@' to po/Makefile.in.in, to + work around a compatibility glitch between gettext 0.14.6 and + Autoconf 2.60. + * configure.ac (AC_PREREQ): Require Autoconf 2.60. + Do not check for uintptr_t, since new stdint module does the right + thing. + * lib/.cvsignore: Remove alloca.c, alloca.h, alloca_.h. + Add stdint.h, stdint_.h, wcwidth.h. + * m4/.cvsignore: Remove alloca.m4, onceonly.m4. + Add absolute-header.m4, double-slash-root.m4, longlong.m4, + stdint.m4, wchar_t.m4, wcwidth.m4. + * src/files.c: Include and in the + usual order for ../lib/*.h files. + (file_name_split): Use last_component, not base_name, to adjust + to gnulib changes. + * src/parse-gram.h: Include in the usual order + for ../lib/*.h files. + (YYTYPE_INT16, YYTYPE_INT8, YYTYPE_UINT16, YYTYPE_UINT8): + Define unconditionally, since we now assume the stdint module. + * src/scan-skel.l: Include . + (BASE_QPUTS): Use last_component, not base_name. + * src/system.h: Include in the usual order + for ../lib/*.h files. Include unconditionally, + since we now use the stdint module. + (uintptr_t): Declare if UINTPTR_MAX is not defined, not + HAVE_UINTPTR_T, since we now use the stdint module. + (base_name): Remove decl, since files now include + to get the decl. + +2006-07-08 Akim Demaille + + * data/c.m4 (b4_location_initial_column, b4_location_initial_line): + New, default to 1. + * data/yacc.c, data/glr.c, data/location.cc: Use them. + * NEWS, doc/bison.texinfo: The initial column and line are 1 by + default. + * tests/calc.at: Adjust. + +2006-07-08 Akim Demaille + + * data/c.m4 (b4_basename): New. + (b4_syncline): Also output the location of its invocation (from + the skeleton). + (b4_user_action, b4_define_user_action, b4_user_actions) + (b4_user_initial_action, b4_user_post_prologue, b4_user_start_header) + (b4_user_stype): New. + * data/yacc.c, data/glr.c, data/lalr1.cc, data/glr.cc: Use them. + +2006-07-07 Joel E. Denny + + In the grammar file, the first column is 1 not 0 on the first line as + on every other line. + * src/parse-gram.y (%initial-action): Initialize @$ correctly. + * tests/input.at (Torturing the Scanner): Update output. + + * src/scan-gram.l (scanner_cursor): Declare it static. + +2006-07-07 Joel E. Denny + + In warnings, say "previous declaration" rather than "first + declaration". + * src/symtab.c (redeclaration): Do that here. + * src/reader.c (record_merge_function_type): In the case of a result + type clash, report the previous declaration rather than the very first + one in the grammar file. + * tests/glr-regression.at (Missed %merge type warnings when LHS type is + declared later): Add a third declaration to check this behavior. + * tests/input.at (Incompatible Aliases): Update output. + +2006-06-27 Akim Demaille + + * doc/Doxyfile.in: New. + * doc/Makefile.am: Use it. + * src/lalr.h, src/symtab.h: Initial doxygenation. + +2006-06-26 Joel E. Denny + + Don't miss %merge result type warnings just because the LHS types are + declared after the %merge. This continues the effort of the previous + patch. + * src/reader.c (get_merge_function): Don't set the merger type yet. + (record_merge_function_type): New function for setting the merger type + and checking for clashes. + (grammar_current_rule_merge_set): Set the location of the %merge for + the current rule. + (packgram): Invoke record_merge_function_type for each rule now that + all symbol type declarations have been parsed. + * src/reader.h (merger_list.type_declaration_location): New member + storing the location of the first %merge from which the type for this + merging function was derived. + * src/symlist.h (symbol_list.merger_declaration_location): New member + storing the location of a rule's %merge, if any. + * tests/glr-regression.at (Missed %merge type warnings when LHS type is + declared later): New test to catch the error fixed by the above patch. + +2006-06-26 Joel E. Denny + + Get action warnings (grammar_rule_check) right even when symbol + declarations appear after the rules. Discussed at + + and + . + Don't mistake the type of $$ in a midrule to be that of its parent + rule's $$. + * src/reader.c (grammar_current_rule_end): Don't invoke + grammar_rule_check yet since not all symbol declarations may have been + parsed yet. + (grammar_midrule_action): Likewise. + Don't record whether the midrule's $$ has been used yet since actions + haven't been translated yet. + Record the midrule's parent rule and its RHS index within the parent + rule. + (grammar_current_rule_action_append): Don't translate the action yet + since not all symbol declarations may have been parsed yet and, thus, + warnings about types for $$, $n, @$, and @n can't be reported yet. + (packgram): Translate the action and invoke grammar_rule_check now that + all symbol declarations have been parsed. + * src/scan-code.l (handle_action_dollar): Now that this is invoked + after parsing the entire grammar file, the symbol list here in the case + of a midrule is actually the midrule's empty RHS, so reference its + parent rule's RHS where necessary. + On the other hand, now that you can already know it's a midrule, you + aren't forced to think $$ has the same type as its parent rule's $$. + (handle_action_at): In the case of a midrule, reference the parent rule + where necessary. + * src/symlist.c (symbol_list_new): Initialize new midrule-related + members. + (symbol_list_length): Now that this is invoked after all rules have + been parsed, a NULL symbol (rather than a NULL symbol list node) + terminates a rule. symbol_list_print already does this correctly. + * src/symlist.h (symbol_list.midrule_parent_rule, + symbol_list.midrule_parent_rhs_index): New members so that midrules can + remember their relationships with their parents. + * tests/input.at (Type Clashes): Extend to catch the midrule $$ error + fixed by the above patch. + (_AT_UNUSED_VALUES_DECLARATIONS, AT_CHECK_UNUSED_VALUES): New m4 macros + implementing... + (Unused values): ... this old test case and... + (Unused values before symbol declarations): ... this new test case. + This one is the same as `Unused values' except that all symbol + declarations appear after the rules in order to catch the rest of the + errors fixed by the above patch. + +2006-06-26 Joel E. Denny + + More cleanup. + * src/reader.c (current_rule): Declare it static since it's no longer + used outside this file. + (grammar_current_rule_action_append): Remove redundant arguments from + translate_rule_action invocation. + * src/reader.h (current_rule): Remove this unused extern. + * src/scan-code.h (translate_rule_action): Remove redundant arguments. + * src/scan-code.l (translate_rule_action): Likewise. + +2006-06-25 Joel E. Denny + + Clean up yesterday's patch. + * parse-gram.y (rhs): Move grammar_midrule_action invocation from here + to... + * src/reader.c (grammar_current_rule_action_append): ... here for + consistency with grammar_current_rule_symbol_append. + * tests/regression.at (Braced code in declaration in rules section): + Make yyerror and yylex static as usual. + +2006-06-24 Joel E. Denny + + Fix bug that mistakes braced code in a declaration in the rules section + to be a rule action. Mentioned at + . + * src/scan-gram.l: Move midrule action detection from the start of the + scanning of any braced code to... + * src/parse-gram.y (rhs): ... the parsing of braced code as a rule + action. For readability, use $2 and @2 rather than the equivalent + global variables. + * tests/regression.at (Braced code in declaration in rules section): + New test to catch the error fixed by the above patch. + + Work on code readability some. + * src/scan-code.l (current_rule): Get rid of this misleading and + redundant declaration: it's actually extern'ed in reader.h. + (YY_DECL, code_lex, handle_action_dollar, handle_action_at, + translate_action): Add a rule argument and use it instead of the global + current_rule. + (translate_rule_action): This already receives current_rule through an + argument, so pass it on to translate_action instead of assigning + current_rule to current_rule. + (translate_symbol_action, translate_code): Pass rule = NULL to + translate_action. + +2006-06-23 Joel E. Denny + + Rename %before-definitions to %start-header and %after-definitions to + %end-header. Don't use these declarations to separate pre-prologue + blocks from post-prologue blocks. Add new order-independent + declarations %before-header and %after-header as alternatives to the + traditional Yacc pre-prologue and post-prologue blocks. Discussed at + . + * NEWS (2.3+): Update for these changes. + * data/glr.c (b4_before_definitions): Update to... + (b4_start_header): ... this. + (b4_after_definitions): Update to... + (b4_end_header): ... this. + * data/glr.cc: Likewise. + * data/lalr1.cc: Likewise. + * data/yacc.c: Likewise. + * doc/bison.texinfo (The prologue): Update names, and replace remaining + prologue blocks with %*-header declarations. + (Calc++ Parser): Likewise. + (Decl Summary): Update names. + (Table of Symbols): Update description. + * src/parse-gram.y (PERCENT_AFTER_DEFINITIONS): Update to... + (PERCENT_END_HEADER): ... this. + (PERCENT_BEFORE_DEFINITIONS): Update to... + (PERCENT_START_HEADER): ... this. + (PERCENT_AFTER_HEADER, PERCENT_BEFORE_HEADER): New tokens. + (declaration): Update token names and m4 macro names. + When parsing %end-header and %start-header, invoke translate_code + before muscle_code_grow, and no longer set global booleans to remember + whether these declarations have been seen. + Parse new %after-header and %before-header. + * src/reader.c (before_definitions, after_definitions): Remove. + (prologue_augment): Accept a new bool argument to specify whether to + augment the pre-prologue or post-prologue. + * src/reader.h (before_definitions, after_definitions): Remove these + extern's. + (prologue_augment): Add new bool argument. + * src/scan-gram.l (PERCENT_AFTER_DEFINITIONS): Update to... + (PERCENT_END_HEADER): ... this. + (PERCENT_BEFORE_DEFINITIONS): Update to... + (PERCENT_START_HEADER): ... this. + (PERCENT_AFTER_HEADER, PERCENT_BEFORE_HEADER): New tokens. + * tests/actions.at (Printers and Destructors): Update names. + +2006-06-22 Joel E. Denny + + Add comparison operators for C++ location classes. Discussed at + . + * data/c++.m4 (b4_define_location_comparison): New boolean %define + declaration indicating whether filename_type has an operator==. If + filename_type is `std::string', it defaults to `1', `0' otherwise. + * data/location.cc: Iff b4_define_location_comparison is `1', add + operator== and operator!= for class position and for class location. + + Some minor fixes. + * src/scan-action.l: Remove unused file. + * src/symtab.c (symbol_printer_set): Use printer_location not + destructor_location. + * src/symtab.h (struct symbol): Replace incorrect source comment for + printer members. + * tests/input.at (Incompatible Aliases): Update output with correct + printer location. + +2006-06-20 Joel E. Denny + + Don't put the pre-prologue in the header file. For the yacc.c code + file and the glr.c header and code files, move the pre-prologue before + the token definitions. Add new %before-definitions and + %after-definitions to declare code that will go in both the header file + and code file. Discussed at + , + , + and + . + * NEWS (2.3+): Describe these changes. + * data/glr.c (b4_pre_prologue): Move from within to before... + (b4_shared_declarations): ... this. + Add new b4_before_definitions before b4_token_enums. + Add new b4_after_definitions at the end. + * data/glr.cc (b4_pre_prologue): Replace with... + (b4_before_definitions): ... this in the header file. + (b4_after_definitions): New near the end of the header file. + * data/lalr1.cc (b4_pre_prologue): Move from the header file to the + code file right before including the header file. + (b4_before_definitions): New in the previous position of + b4_pre_prologue in the header file. + (b4_after_definitions): New near the end of the header file. + * data/yacc.c: Clean up some m4 quoting especially in the header file. + (b4_token_enums_defines): In the code file, move to right before + YYSTYPE for consistency with the header file. + (b4_before_definitions): New right before b4_token_enums_defines in + both the header and code file. + (b4_after_definitions): New right after YYLTYPE and yylloc in both the + header and code file. + * doc/bison.texinfo (Prologue): Show use of %before-definitions instead + of prologues for %union dependencies. + (Decl Summary): In %defines description, mention the effect of + %before-definitions and %after-definitions on the header file. + (Calc++ Parser): Forward declare driver in a %before-definitions rather + than in the pre-prologue so that make check succeeds. + (Table of Symbols): Add entries for %before-definitions and + %after-definitions. + * src/parse-gram.y (PERCENT_BEFORE_DEFINITIONS): New token for + %before-definitions. + (PERCENT_AFTER_DEFINITIONS): New token for %after-definitions. + (declaration): Parse those declarations and append to + b4_before_definitions and b4_after_definitions, respectively. + * src/reader.c (before_definitions, after_definitions): New bools to + track whether those declarations have been seen. + (prologue_augment): Add to the post-prologue if %union, + %before-definitions, or %after-definitions has been seen. + * src/reader.h (before_definitions, after_definitions): New extern's. + * src/scan-gram.l: Scan the new declarations. + * tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Place the second + prologue block in a %before-definitions or a %after-definitions based + on whether the %union is declared. + * tests/regression.at (Early token definitions with --yacc, Early token + definitions without --yacc): Move tests for token definitions into the + post-prologue since token names are no longer defined in the + pre-prologue. + +2006-06-20 Akim Demaille + + * src/symtab.h, src/symtab.c (symbol_from_uniqstr): New. + (symbol_get): Use it. + * src/parse-gram.y: Use it. + +2006-06-19 Joel E. Denny + + * src/scan-gram.l: Remove unused declaration of last_string_1 so the + build succeeds when configured with --enable-gcc-warnings. + +2006-06-19 Paul Eggert + + * src/parse-gram.y (char_name): New function. + (CHAR, STRING, string_content): For %printer, properly escape. + (ID): Prefer fputs to fprintf. + (id): Reindent to be consistent with other rules. + Properly quote char. + + The Translation Project changed its way of publishing translations + to maintainers. I haven't received any responses to my request + for supporting the old way, or for documenting the new way. I + have modified 'bootstrap' to use screen scraping + (in this case, HTML scraping). This is unreliable and inelegant, + but I don't see any better way. Yuck. + * bootstrap (TP_URL, WGET_COMMAND): New vars. + (get_translations): New function, which uses HTML scraping to + deduce locations of latest translations. + Use this function to grab both bison and bison-runtime .po files. + Don't bother priming the pump for the runtime-po domain any more, + as it's now translated better than bison is. + +2006-06-19 Akim Demaille + + * src/scan-gram.l: No longer "parse" things after `%union' until + `{'. Rather, return a single "%union" token. + No longer make symbols: return strings, and leave the conversion + to symbols to the parser. + (SC_PRE_CODE, token_type): Remove. + * src/parse-gram.y (%union): New field `character'. + Sort tokens. + (CHAR): New token. + (ID, ID_COLON): Now that the scanner no longer makes them + identifiers, adjust all uses to invoke symbol_get. + (id_colon): New, wraps the conversion from string to symbol. + (%union): Accept a possible union_name. + (symbol): Now can be a char. + * data/c.m4 (b4_union_name): Leave a default value. + * data/glr.c, data/yacc.c: Use it. + +2006-06-11 Joel E. Denny + + For associating token numbers with token names for "yacc.c", don't use + #define statements unless `--yacc' is specified; always use enum + yytokentype. Most important discussions start at: + , + , + and + . + * NEWS (2.3+): Mention. + * data/c.m4 (b4_yacc_if): New. + (b4_token_enums_defines): Use b4_yacc_if to decide whether to add the + token #define's. + * doc/bison.texinfo (Bison Options): Describe the effect of `--yacc' + on token name definitions. + * src/getargs.c (usage): Capitalize `Yacc' in English. + * src/output.c (prepare): Define b4_yacc_flag. + * tests/regression.at (Early token definitions): Test that tokens names + are defined before the pre-prologue not just before the post-prologue. + Remove this test case and copy to... + (Early token definitions with --yacc): ... this to test #define's. + (Early token definitions without --yacc): ... and this to test enums. + +2006-06-11 Paul Eggert + + * NEWS: Reword the post-2.3 change to not be so optimistic about + removing the old "look-ahead" spelling. + Update previous look-ahead/lookahead change reports. + * REFERENCES: look-ahead -> lookahead (since that's + what he actually wrote). + * doc/refcard.tex: look ahead -> lookahead, + look-ahead -> lookahead + +2006-06-09 Joel E. Denny + + For consistency, use `lookahead' instead of `look-ahead' or + `look_ahead'. Discussed starting at + + and then at + . + * NEWS: For the next release, note the change to `--report'. + * TODO, doc/bison.1: Update English. + * doc/bison.texinfo: Update English. + (Understanding Your Parser, Bison Options): Document as + `--report=lookahead' rather than `--report=look-ahead'. + * src/conflicts.c: Update English in comments. + (lookahead_set): Rename from look_ahead_set. + (flush_reduce): Rename argument look_ahead_tokens to lookahead_tokens. + (resolve_sr_conflict): Rename local look_ahead_tokens to + lookahead_tokens, and update other uses. + (flush_shift, set_conflicts, conflicts_solve, count_sr_conflicts, + count_rr_conflicts, conflicts_free): Update uses. + * src/getargs.c (report_args): Move "lookahead" before alternate + spellings. + (report_types): Update uses. + (usage): For `--report' usage description, state `lookahead' spelling + rather than `look-ahead'. + * src/getargs.h (report.report_lookahead_tokens): Rename from + report_look_ahead_tokens. + * src/lalr.c: Update English in comments. + (compute_lookahead_tokens): Rename from compute_look_ahead_tokens. + (state_lookahead_tokens_count): Rename from + state_look_ahead_tokens_count. + Rename local n_look_ahead_tokens to n_lookahead_tokens. + (lookahead_tokens_print): Rename from look_ahead_tokens_print. + Rename local n_look_ahead_tokens to n_lookahead_tokens. + Update other uses. + Update English in output. + (add_lookback_edge, initialize_LA, lalr, lalr_free): Update uses. + * src/print.c: Update English in comments. + (lookahead_set): Rename from look_ahead_set. + (print_reduction): Rename argument lookahead_token from + look_ahead_token. + (print_core, state_default_rule, print_reductions, print_results): + Update uses. + * src/print_graph.c: Update English in comments. + (print_core): Update uses. + * src/state.c: Update English in comments. + (reductions_new): Update uses. + (state_rule_lookahead_tokens_print): Rename from + state_rule_look_ahead_tokens_print, and update other uses. + * src/state.h: Update English in comments. + (reductions.lookahead_tokens): Rename from look_ahead_tokens. + (state_rule_lookahead_tokens_print): Rename from + state_rule_look_ahead_tokens_print. + * src/tables.c: Update English in comments. + (conflict_row, action_row): Update uses. + * tests/glr-regression.at + (Incorrect lookahead during deterministic GLR, + Incorrect lookahead during nondeterministic GLR): Rename + print_look_ahead to print_lookahead. + * tests/torture.at: Update English in comments. + (AT_DATA_LOOKAHEAD_TOKENS_GRAMMAR): Rename from + AT_DATA_LOOK_AHEAD_TOKENS_GRAMMAR. + (Many lookahead tokens): Update uses. + * data/glr.c: Update English in comments. + * lalr1.cc: Likewise. + * yacc.c: Likewise. + * src/conflicts.h: Likewise. + * src/lalr.h: Likewise. + * src/main.c: Likewise. + * src/output.c: Likewise. + * src/parse-gram.c: Likewise. + * src/tables.h: Likewise. + * tests/calc.at: Likewise. + +2006-06-08 Joel E. Denny + + * src/flex-scanner.h (yytext): Remove stray `*/' in #define. + +2006-06-07 Paul Eggert + + * TODO: Add request from Nelson H. F. Beebe to be able to install + Bison without installing the yacc script. + +2006-06-07 Joel E. Denny + + * src/flex-scanner.h: For the sake of Flex 2.5.4, don't #define yyleng + and yytext if they're already #define'd. + * src/flex-scanner.h, src/location.h: Move #include "system.h" to... + * src/scan-code-c.c: ... here. + * src/scan-code.l, src/scan-gram.l: ... and here. Also #include + . + +2006-06-07 Joel E. Denny + + Get Bison to build again when configured with --enable-gcc-warnings. + * src/location.c, src/location.h, src/main.c, src/scan-code.l: Add some + missing #include's. + * src/scan-code.l (handle_action_dollar, handle_action_at): Rename + loc argument as it shadows a global. + * src/scan-gram.l: Remove stray comma that prevents boundary_set + invocation. + + * src/.cvsignore: Add scan-code.c. + +2006-06-07 Akim Demaille + + * src/scan-gram.l: Move the "add a trailing ; to actions" code + to... + * src/scan-code.l: here. + * tests/input.at (Torturing the Scanner): Fix another location + error. + +2006-06-07 Akim Demaille + + * src/Makefile.am (BUILT_SOURCES): Fix the trailing backslash. + +2006-06-06 Akim Demaille + + Extract the parsing of user actions from the grammar scanner. + As a consequence, the relation between the grammar scanner and + parser is much simpler. We can also split "composite tokens" back + into simple tokens. + * src/gram.h (ITEM_NUMBER_MAX, RULE_NUMBER_MAX): New. + * src/scan-gram.l (add_column_width, adjust_location): Move to and + rename as... + * src/location.h, src/location.c (add_column_width) + (location_compute): these. + Fix the column count: the initial column is 0. + (location_print): Be robust to ending column being 0. + * src/location.h (boundary_set): New. + * src/main.c: Adjust to scanner_free being renamed as + gram_scanner_free. + * src/output.c: Include scan-code.h. + * src/parse-gram.y: Include scan-gram.h and scan-code.h. + Use boundary_set. + (PERCENT_DESTRUCTOR, PERCENT_PRINTER, PERCENT_INITIAL_ACTION) + (PERCENT_LEX_PARAM, PERCENT_PARSE_PARAM): Remove the {...} part, + which is now, again, a separate token. + Adjust all dependencies. + Whereever actions with $ and @ are used, use translate_code. + (action): Remove this nonterminal which is now useless. + * src/reader.c: Include assert.h, scan-gram.h and scan-code.h. + (grammar_current_rule_action_append): Use translate_code. + (packgram): Bound check ruleno, itemno, and rule_length. + * src/reader.h (gram_in, gram__flex_debug, scanner_cursor) + (last_string, last_braced_code_loc, max_left_semantic_context) + (scanner_initialize, scanner_free, scanner_last_string_free) + (gram_out, gram_lineno, YY_DECL_): Move to... + * src/scan-gram.h: this new file. + (YY_DECL): Rename as... + (GRAM_DECL): this. + * src/scan-code.h, src/scan-code.l, src/scan-code-c.c: New. + * src/scan-gram.l (gram_get_lineno, gram_get_in, gram_get_out): + (gram_get_leng, gram_get_text, gram_set_lineno, gram_set_in): + (gram_set_out, gram_get_debug, gram_set_debug, gram_lex_destroy): + Move these declarations, and... + (obstack_for_string, STRING_GROW, STRING_FINISH, STRING_FREE): + these to... + * src/flex-scanner.h: this new file. + * src/scan-gram.l (rule_length, rule_length_overflow) + (increment_rule_length): Remove. + (last_braced_code_loc): Rename as... + (gram_last_braced_code_loc): this. + Adjust to the changes of the parser. + Move all the handling of $ and @ into... + * src/scan-code.l: here. + * src/scan-gram.l (handle_dollar, handle_at): Remove. + (handle_action_dollar, handle_action_at): Move to... + * src/scan-code.l: here. + * src/Makefile.am (bison_SOURCES): Add flex-scanner.h, + scan-code.h, scan-code-c.c, scan-gram.h. + (EXTRA_bison_SOURCES): Add scan-code.l. + (BUILT_SOURCES): Add scan-code.c. + (yacc): Be robust to white spaces. + + * tests/conflicts.at, tests/input.at, tests/reduce.at, + * tests/regression.at: Adjust the column numbers. + * tests/regression.at: Adjust the error message. + +2006-06-06 Joel E. Denny + + * src/getargs.c (usage): Mention GLR not just LALR(1) in --help output. + Use Akim's wording from + . + +2006-06-06 Joel E. Denny + + Between Bison releases, manually append `+' to the previous Bison + release number, and use that as a signal to automatically print the + ChangeLog's CVS Id keyword from --version. Discussed starting at + . + * ChangeLog: Add Id header. + * configure.ac (AC_INIT): Append `+' to `2.3'. + * src/.cvsignore: Add revision.c. + * src/Makefile.am (bison_SOURCES): Add revision.c and revision.h. + (BUILT_SOURCES): Add revision.c. + (revision.c): New target rule. This file defines a new global variable + named revision. It initializes it with either the Id from ChangeLog + or, if VERSION doesn't contain `+', with the empty string. + * src/getargs.c (version): Print the value of revision. + * src/revision.h: Extern revision. + +2006-06-05 Paul Eggert + + * NEWS: Version 2.3. + * configure.ac (AC_INIT): Likewise. + +2006-05-30 Paul Eggert + + * data/glr.c (YYRECOVERING): Define to be a function-like macro + with no arguments, not as an object-like macro. This is for + compatibility with data/yacc.c. Problem reported by John P. Hartmann in + . + * doc/bison.texinfo (Action Features, Error Recovery, Table of Symbols): + Document this. + +2006-05-30 Joel E. Denny + + * src/getargs.c (usage): Back out yesterday's modification of the + --help output so that we don't have to wait for translation before + releasing 2.3. + +2006-05-29 Paul Eggert + + * doc/bison.texinfo (Introduction): Don't say "GLR grammar". + Problem reported by Akim Demaille. + +2006-05-29 Joel E. Denny + + * src/getargs.c (usage): Mention GLR not just LALR(1) in --help output. + +2006-05-26 Paul Eggert + + * data/yacc.c (yy_reduce_print): Omit trailing white space in + generated source code. Problem reported by Frans Englich in + . + 2006-05-22 Paul Eggert * Makefile.maint (gzip_rsyncable, GZIP_ENV): Compute within the @@ -748,7 +6528,7 @@ in the yychar entry. In the yychar entry, remove mention of the local yychar case (pure parser) since this is irrelevant information when writing semantic - actions and since it's already discussed in `Bison Symbols' where + actions and since it's already discussed in `Table of Symbols' where yychar is otherwise described as an external variable. In the yychar entry, don't call it the `current' look-ahead since it isn't when semantic actions are deferred. @@ -759,7 +6539,7 @@ `current' look-ahead, and do mention yylval and yylloc. (Error Recovery): Cross-reference `Action Features' when mentioning yyclearin. - (Bison Symbols): In the yychar entry, don't call it the `current' + (Table of Symbols): In the yychar entry, don't call it the `current' look-ahead. In the yylloc and yylval entries, mention look-ahead usage. @@ -3341,7 +9121,7 @@ * data/lalr1.cc (symprint_): Use cdebug_ to avoid warnings. -2004-10-28 Akim Demaille , +2004-11-17 Akim Demaille , Alexandre Duret-Lutz * data/lalr1.cc (Parser::yycdebug_): New, a pointer, to allow @@ -15991,8 +21771,8 @@ ----- Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, - 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free - Software Foundation, Inc. + 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted provided the copyright notice and this