+2008-11-10 Akim Demaille <demaille@gostai.com>
+
+ Make parser::yytranslate static.
+ Small speedup (1%) on the list grammar. And makes yytranslate_ available
+ in non member functions.
+
+ * data/lalr1.cc (yytranslate_): Does not need to be a instance
+ function.
+
+2008-11-10 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ Comment changes.
+
+2008-11-10 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ Formatting changes.
+ * data/lalr1.cc: here.
+
+2008-11-10 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ --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 <demaille@gostai.com>
+
+ muscles_output.
+ * src/output.c (muscles_output): New, extracted from...
+ (output_skeleton): here.
+ Adjust.
+
+2008-11-10 Akim Demaille <demaille@gostai.com>
+
+ Formatting changes.
+
+2008-11-10 Akim Demaille <demaille@gostai.com>
+
+ Update the variant example.
+ * examples/variant.yy: Formatting changes.
+ One stage build.
+
+2008-11-10 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ Test variants.
+ * tests/c++.at (AT_CHECK_VARIANTS): New.
+ Use it with and without %define assert.
+
+2008-11-10 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ fix eof condition
+
+2008-11-09 Akim Demaille <demaille@gostai.com>
+
+ Fix --help.
+
+2008-11-09 Akim Demaille <demaille@gostai.com>
+
+ Require the generation of parse-gram.output.
+ * src/Makefile.am (YACC): Pass --report=all.
+
+2008-11-09 Akim Demaille <demaille@gostai.com>
+
+ Formatting changes.
+
+2008-11-09 Akim Demaille <demaille@gostai.com>
+
+ Update TODO.
+ * TODO: Remove obsolete items.
+ Update others.
+
+2008-11-09 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ Rename data_type and stack_symbol_type.
+ * data/lalr1.cc (data_type): Rename as...
+ (stack_symbol_type): this.
+
+2008-11-09 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ Agregate yylval and yylloc.
+ * data/lalr1.cc (parser::yylval, parser::yylloc): Replace by...
+ (parser::yyla): this.
+
+2008-11-09 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <dianj@freeshell.org>
+
+ Remove unused variable.
+ * src/output.c (type_names_output): Remove unused variable sep.
+
+2008-11-09 Paolo Bonzini <bonzini@gnu.org>
+
+ Change tests/output.at quoting.
+ * tests/output.at (AT_CHECK_OUTPUT): Use conventional m4 quoting when
+ expanding arguments.
+
+2008-11-07 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ 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 <jdenny@ces.clemson.edu>
+
+ 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 <demaille@gostai.com>
+
+ Moving push traces into yypush_.
+ * data/lalr1.cc (yypush_): Now takes a optional trace message.
+ Adjust all uses.
+
+2008-11-07 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ -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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ Fix --help.
+ * src/getargs.c (usage): Fix help string for -W.
+
+2008-11-07 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ Regen.
+ * src/parse-gram.h, src/parse-gram.c: Regen.
+
+2008-11-04 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Fix user actions without a trailing semicolon.
+ Reported by Sergei Steshenko at
+ <http://lists.gnu.org/archive/html/bug-bison/2008-11/msg00001.html>.
+ * 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ Formatting changes.
+ * data/lalr1-fusion.cc, src/parse-gram.y: here.
+
+2008-11-04 Akim Demaille <demaille@gostai.com>
+
+ Formatting changes.
+ * data/lalr1-fusion.cc: here.
+
+2008-11-04 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ Improve the display of sizes.
+ * etc/bench.p.in: Higher precision.
+ Sort by decreasing size.
+
+2008-11-04 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ bench.pl --bench.
+ * etc/bench.pl.in (--bench, $bench): New.
+
+2008-11-04 Akim Demaille <demaille@gostai.com>
+
+ Sort methods.
+ * data/lalr1-fusion.cc (destroy): Use as() in its definition.
+ Define it after as().
+
+2008-11-04 Akim Demaille <demaille@gostai.com>
+
+ Useless parens.
+ * data/lalr1-fusion.cc (b4_rhs_location): Remove useless parens.
+
+2008-11-04 Akim Demaille <demaille@gostai.com>
+
+ Issue missing synclines after user actions.
+ * data/c.m4 (b4_case): Issue synclines on the output file.
+
+2008-11-04 Akim Demaille <demaille@gostai.com>
+
+ Remove trailing empty line.
+ * data/lalr1-fusion.cc: Don't add an empty line after the user's
+ epilogue.
+
+2008-11-04 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ Fix iteration type.
+ * data/lalr1-fusion.cc: Use an int to iterate up to an int.
+
+2008-11-04 Akim Demaille <demaille@gostai.com>
+
+ Factor the declaration of the integer tables.
+ * data/lalr1-fusion.cc (b4_table_define): New.
+ Use it.
+
+2008-11-03 Akim Demaille <demaille@gostai.com>
+
+ Fix indentation of tables in lalr1.cc
+ * data/lalr1-fusion.cc: Fix the indentation.
+
+2008-11-03 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ Let yy::variant::build return an lvalue.
+ * data/lalr1-fusion.cc (variant::build): Return a reference to the
+ object.
+
+2008-11-03 Akim Demaille <demaille@gostai.com>
+
+ Define yy::variant only when needed.
+ * data/lalr1-fusion.cc (yy::variant): Define only if variants are
+ used.
+
+2008-11-03 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ bench: Improve output.
+ * etc/bench.pl.in (bench_grammar): Tune the printf format.
+
+2008-11-03 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ bench: More use of the verbosity level.
+ * etc/bench.pl.in ($verbose, &verbose): New.
+ Use them.
+ More POD documentation.
+
+2008-11-03 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ Add documentation to bench.pl.
+ * etc/bench.pl.in: Comment changes.
+
+2008-11-03 Akim Demaille <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
+
+ 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 <demaille@gostai.com>
Prepare easier M4 changes.