+2010-12-11 Joel E. Denny <jdenny@clemson.edu>
+
+ parse.lac: implement exploratory stack reallocations.
+ * data/yacc.c: Rename %define variable parse.lac.es-capacity to
+ parse.lac.es-capacity-initial. Accept parse.lac.memory-trace
+ with values of "failures" (default) or "full".
+ (b4_declare_parser_state_variables): Add yyesa, yyes, and
+ yyes_capacity variables.
+ (YYSTACK_USE_ALLOCA): Ignore it if LAC requested.
+ (YYSTACK_ALLOC, YYSTACK_FREE, YYSTACK_ALLOC_MAXIMUM): Define if
+ LAC requested.
+ (YYCOPY_NEEDED): New cpp macro.
+ (YYCOPY): Define if LAC requested.
+ (yy_lac_stack_realloc): New function implementing stack
+ reallocations. Use YYMAXDEPTH for maximum stack size given that
+ the stack should never need to grow larger than the main state
+ stack needs to grow without LAC.
+ (YY_LAC_ESTABLISH): Update yy_lac invocation.
+ (yy_lac): Add arguments for exploratory stack memory data
+ recorded in the main parser. Invoke yy_lac_stack_realloc when
+ reallocation is necessary.
+ (yysyntax_error): Add the same new arguments and pass them to
+ yy_lac.
+ (yypstate_delete): Free yyes if necessary.
+ (yyesa, yyes, yyes_capacity): #define these to yypstate members
+ in the case of push parsing.
+ (yyparse, yypush_parse): Initialize yyes and yyes_capacity.
+ Update yysyntax_error invocations. At yyreturn, free yyes if
+ necessary.
+ * src/parse-gram.y: %define parse.lac full.
+ * tests/input.at (LAC: errors for %define): Extend for
+ parse.lac-memory-trace.
+ * tests/regression.at (LAC: Exploratory stack): Extend to check
+ that stack reallocs happen when expected.
+ (LAC: Memory exhaustion): Update to use YYMAXDEPTH and
+ parse.lac.es-capacity-initial.
+
+2010-12-11 Joel E. Denny <jdenny@clemson.edu>
+
+ parse.lac: implement as %define variable.
+ LAC = lookahead correction. See discussion at
+ <http://lists.gnu.org/archive/html/bison-patches/2009-09/msg00034.html>.
+ However, one point there must be corrected: because of %nonassoc,
+ LAC is *not* always redundant for lr.type=canonical-lr.
+ * data/yacc.c: Accept values of "none" (default) or "full" for
+ parse.lac. Accept %define parse.lac.es-capacity to specify
+ capacity of LAC's temporary exploratory stack. It defaults to 20
+ and, for now, will not grow dynamically.
+ (b4_lac_flag, b4_lac_if): New m4 macros. Evaluate as true for
+ parse.lac!=none.
+ (YYBACKUP): Invoke YY_LAC_DISCARD.
+ (YY_LAC_ESTABLISH, YY_LAC_DISCARD): New cpp macros that invoke
+ yy_lac and track when it needs to be invoked
+ (yy_lac): New function that, given the current stack, determines
+ whether a token can eventually be shifted. Return status mimics
+ yyparse return status.
+ (yysyntax_error): Change yystate argument to yyssp so stack top
+ can be passed to yy_lac. If LAC is requested, build expected
+ token list by invoking yy_lac for every token instead of just
+ checking the current state for lookaheads. Return 2 if yy_lac
+ exhausts memory.
+ (yyparse, yypush_parse): Use local variable yy_lac_established and
+ cpp macros YY_LAC_ESTABLISH and YY_LAC_DISCARD to implement LAC.
+ Update yysyntax_error invocation. Add yyexhaustedlab code if LAC
+ is requested.
+ * tests/conflicts.at (%nonassoc and eof): Extend to check the
+ effect of each of -Dlr.type=canonical-lr and -Dparse.lac=full.
+ (%error-verbose and consistent errors): Likewise.
+ (LAC: %nonassoc requires splitting canonical LR states): New test
+ group demonstrating how LAC can fix canonical LR.
+ * tests/input.at (LAC: Errors for %define): New test group.
+ * tests/regression.at (LAC: Exploratory stack): New test group.
+ (LAC: Memory exhaustion): New test group.
+
+2010-11-21 Joel E. Denny <jdenny@clemson.edu>
+
+ build: use gnulib's new bootstrap_sync option.
+ Now, whenever we update bison's copy of gnulib, bootstrap will
+ update itself the next time it's run.
+ * bootstrap: Copy from latest gnulib for bootstrap_sync support.
+ * bootstrap.conf (bootstrap_sync): Set to true.
+ * gnulib: Update to latest so bootstrap is in sync now.
+
+2010-11-07 Joel E. Denny <jdenny@clemson.edu>
+
+ yysyntax_error: adjust prior fixes for branch-2.5's lalr1.cc.
+ On master, there is no yychar in lalr1.cc, but there is on
+ branch-2.5, and the prior cherry-pick of "Fix handling of yychar
+ manipulation in user semantic actions" wasn't adjusted for that
+ difference.
+ * data/lalr1.cc (yy::parser::parse): Translate yychar before
+ every use of yytoken, and add comments explaining this approach.
+ * tests/conflicts.at (%error-verbose and consistent errors):
+ Extend to test yychar manipulation with lalr1.cc.
+
+2010-11-07 Joel E. Denny <jdenny@clemson.edu>
+
+ yysyntax_error: fix for consistent error with lookahead.
+ * NEWS (2.5): Document.
+ * data/yacc.c (yysyntax_error): In a verbose syntax error
+ message while in a consistent state with a default action (which
+ must be an error action given that yysyntax_error is being
+ invoked), continue to drop the expected token list, but don't
+ drop the unexpected token unless there actually is no lookahead.
+ Moreover, handle that internally instead of returning 1 to tell
+ the caller to do it. With that meaning of 1 gone, renumber
+ return codes more usefully.
+ (yyparse, yypush_parse): Update yysyntax_error usage. Most
+ importantly, set yytoken to YYEMPTY when there's no lookahead.
+ * data/glr.c (yyreportSyntaxError): As in yacc.c, don't drop the
+ unexpected token unless there actually is no lookahead.
+ * data/lalr1.cc (yy::parser::parse): If there's no lookahead,
+ set yytoken to yyempty_ before invoking yysyntax_error_.
+ (yy::parser::yysyntax_error_): Again, don't drop the unexpected
+ token unless there actually is no lookahead.
+ * data/lalr1.java (YYParser::parse): If there's no lookahead,
+ set yytoken to yyempty_ before invoking yysyntax_error.
+ (YYParser::yysyntax_error): Again, don't drop the unexpected
+ token unless there actually is no lookahead.
+ * tests/conflicts.at (%error-verbose and consistent
+ errors): Extend test group to further reveal how the previous
+ use of the simple "syntax error" message was too general. Test
+ yacc.c, glr.c, lalr1.cc, and lalr1.java. No longer an expected
+ failure.
+ * tests/java.at (AT_JAVA_COMPILE, AT_JAVA_PARSER_CHECK): Move
+ to...
+ * tests/local.at: ... here.
+ (_AT_BISON_OPTION_PUSHDEFS): Push AT_SKEL_JAVA_IF definition.
+ (AT_BISON_OPTION_POPDEFS): Pop it.
+ (AT_FULL_COMPILE): Extend to handle Java.
+
+2010-11-07 Joel E. Denny <jdenny@clemson.edu>
+
+ yysyntax_error: more preparation for readability of next patch.
+ There are no behavioral changes here.
+ * data/glr.c (yyreportSyntaxError): Reorganize.
+ * data/lalr1.cc (yy::parser::yysyntax_error_): Reorganize.
+ * tests/conflicts.at (%error-verbose and consistent errors):
+ Reorganize.
+
+2010-11-07 Joel E. Denny <jdenny@clemson.edu>
+
+ yysyntax_error: prepare for readability of next patches.
+ These are purely whitespace changes that result in ugly code
+ but that make the next couple of patches much easier to read.
+ * data/glr.c (yyreportSyntaxError): Reindent.
+ * data/lalr1.cc (yy::parser::yysyntax_error_): Reindent.
+ * data/lalr1.java (YYParser::yysyntax_error): Reindent.
+ * data/yacc.c (yysyntax_error): Reindent.
+
2010-10-31 Joel E. Denny <joeldenny@joeldenny.org>
yysyntax_error: improve invocation readability.