+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.
+ * data/lalr1.cc: Use escaped [] instead of literals to prepare
+ future changes.
+
2008-11-02 Joel E. Denny <jdenny@ces.clemson.edu>
Initiate further development.