influence the parse by changing yychar. To make this easier to fix and
to make glr.c easier to evolve in general, don't maintain yytoken in
parallel with yychar; just compute yytoken when needed.
* tests/glr-regression.at (Incorrect lookahead during deterministic
GLR): Check that setting yychar in a user action has the intended
effect.
* data/glr.c (yyGLRStack): Remove yytokenp member.
(yyclearin): Don't set *yytokenp.
(yyprocessOneStack, yyreportSyntaxError, yyrecoverSyntaxError): Examine
yychar rather than *yytokenp to determine the current lookahead.
Compute yytoken locally when needed.
(yyparse): Likewise. Remove the local yytoken that yytokenp used to
point to.
* doc/bison.texinfo (Bison Options): Remove stray sentence fragment
after `--report' documentation.
* configure.ac: Don't use -Wnested-externs, as it's incompatible
with the new verify.h implementation.
* data/c.m4 (b4_yy_symbol_print_generate): YYUSE (yyoutput).
* data/glr.c (YYUSE): Depend on __GNUC__ as well.
* data/yacc.c (YYUSE): Likewise.
* data/lalr1.cc (yysyntax_error_): YYUSE (yystate).
* lib/subpipe.c (end_of_output_subpipe): The args are unused.
* src/parse-gram.y (declaration): Don't pass a string constant
to a function that expects char *, since GCC might complain
about the constant value.
* src/reader.c (symbol_typed_p): Add parens to pacify GCC.
* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): #undef yylloc and yylval
before #defining them.
* tests/glr-regression.at
(Incorrectly initialized location for empty right-hand side in GLR):
In yyerror, use the msg arg.
(Corrupted semantic options if user action cuts parse):
(Incorrect lookahead during deterministic GLR):
(Incorrect lookahead during nondeterministic GLR):
Don't name a local var 'index'; it shadows string.h's 'index'.
yylookaheadNeeds. All uses updated.
(yysplitStack): Rename local yynewLookaheadStatuses to
yynewLookaheadNeeds.
* data/glr-regression.at (Incorrect lookahead during nondeterministic
GLR): In comments, change `lookahead status' to `lookahead need'.
use during nondeterministic operation to track which stacks have
actually needed the current lookahead.
(yyinitStateSet, yyfreeStateSet, yyremoveDeletes, yysplitStack):
Allocate, deallocate, resize, and otherwise shuffle space for
yylookaheadStatuses in parallel with yystates member of yyGLRStateSet.
(yysplitStack, yyprocessOneStack, yyparse): Set lookahead status
appropriately during nondeterministic operation.
(yySemanticOption): Add int yyrawchar, YYSTYPE yyval, and YYLTYPE yyloc
members to store the current lookahead to be used by the deferred
user action.
(yyaddDeferredAction): Add size_t yyk parameter specifying the stack
from which the RHS is taken. Set the lookahead members of the new
yySemanticOption according to the lookahead status for stack yyk.
(yyglrShiftDefer, yyglrReduce): Pass yyk parameter on to
yyaddDeferredAction.
(yyresolveAction): Set yychar, yylval, and yylloc to the lookahead
members of yySemanticOption before invoking yyuserAction, and then set
them back to their current values afterward.
(yyparse): Set yychar = YYEMPTY where yytoken = YYEMPTY.
(yyreportAmbiguity): Add /*ARGSUSED*/ to pacify lint.
* tests/glr-regression.at: Remove `.' from the ends of recent test case
titles for consistency.
(Leaked merged semantic value if user action cuts parse): In order to
suppress lint warnings, use arguments in merge function, and assign
char value < 128 in main.
(Incorrect lookahead during deterministic GLR): New test case.
(Incorrect lookahead during nondeterministic GLR): New test case.
least one user action succeeds but a later one cuts the parse, then
destroy the semantic value before returning rather than leaking it.
(yyresolveStates): If a user action cuts the parse and thus
yyresolveValue fails, ignore the (unset) semantic value rather than
corrupting the yyGLRState, and empty the semantic options list since
the user actions should have called all necessary destructors.
Simplify code with YYCHK.
* tests/glr-regression.at (Corrupted semantic options if user action
cuts parse): New test case.
(Undesirable destructors if user action cuts parse): New test case.
Before applying any of this patch, this test case never actually failed
for me... but only because the corrupted semantic options usually
masked this bug.
(Leaked merged semantic value if user action cuts parse): New test
case.
stacks, and iterate another stack in order to call user
destructors.
* tests/glr-regression.at (No users destructors if stack 0 deleted):
New test case.
(Duplicated user destructor for lookahead): This test now is expected
to succeed.
(yyresolveAction): Initialize default location properly for empty right-hand
sides.
(yydoAction): Ditto. Add comment explaining apparently dead code.
* tests/glr-regression.at
(Incorrectly initialized location for empty right-hand side in GLR): New test.
Mark it as expected to fail.
Cast result of malloc; problem reported by twlevo@xs4all.nl.
* tests/actions.at, tests/calc.at, tests/glr-regression.at:
Don't start user-code symbols with "yy", to avoid name space problems.
* NEWS: Remove notice of yytname change, since it was never in an
official release.
* data/glr.c (yydestroyGLRState): Rename local var to avoid shadowing
diagnostic.
* src/output.c (prepare): Likewise.
* data/lalr1.cc (YYERROR_VERBOSE_IF): New macro.
(yysyntax_error_): Use it to avoid GCC warning when YYERROR_VERBOSE
is not defined. This is an awful hack, but it's enough for now.
All callers changed.
* tests/glr-regression-at (make_value): Args are const pointers now,
to avoid GCC warning.
(Duplicated user destructor for lookahead): New test. Currently
skipped. It fails on my host but I'm not sure it'll always fail.
All uses changed. Invoke user destructor after an error during a
split parse (trivial change from Joel E. Denny).
* tests/glr-regression.at
(User destructor after an error during a split parse): New test case.
Problem reported by Joel E. Denny in:
http://lists.gnu.org/archive/html/bison-patches/2005-08/msg00029.html
* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Have yyerror return
void, not int.
* tests/glr-regression.at (Badly Collapsed GLR States):
Likewise.
(Improper handling of embedded actions and dollar(-N) in GLR parsers):
yylex should return 0 at EOF rather than aborting.
Problem reported by twlevo@xs4all.nl.
* data/glr.c (struct yyGLRStack): Remove yyerrflag member.
All uses removed.
(yyStackOverflow): Just longjmp, but with value 2 so that caller
can handle the problem.
(YYCHK1): Use goto (a la yacc.c) rather than setting a flag.
(yyparse): New local variable yyresult to record the result.
Use result of setjmp to set it, rather than storing itinto
struct.
(yyDone): Remove label.
(yyacceptlab, yyabortlab, yyoverflowlab, yyreturn): New labels,
to mimic yacc.c. Do not discard lookahead if it's EOF (possible
if YYABORT is used).
* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Exit with
yyparse status; put status > 1 into diagnostic.
Check that status==2 works.
* tests/calc.at, tests/cxx-type.at, tests/glr-regression.at:
Use exit status 3 for failure to open (which shouldn't happen).
1 on syntax error; just let yyparse do its thing.
* tests/glr-regression.at (Badly Collapsed GLR States): Likewise.
* tests/torture.at (AT_DATA_STACK_TORTURE): Likewise.
(Exploding the Stack Size with Alloca):
(Exploding the Stack Size with Malloc):
Expect exit status 2, not 1, since the parser is supposed to blow
its stack. Problem reported by twlevo@xs4all.nl.
(yyuserMerge): Provide a default case if b4_mergers is empty.
* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Define YYSTACKEXPANDABLE.
* tests/glr-regression.at
(Improper handling of embedded actions and dollar(-N) in GLR parsers):
YYSTYPE is char *, not char const *, so that strcpy ($$, ...) works.
fix a small glitch in debugging output.
(yyprocessOneStack, yyrecoverSyntaxError, yyparse): Print newline
after YY_SYMBOL_PRINT where needed.
(struct yyGLRState): Add some comments.
(struct yySemanticOption): Add some comments.
(union yyGLRStackItem): Add comment.
(yymergeOptionSets): Correct this to properly perform the union,
avoiding infinite reported by Michael Rosien.
Update comment.
* tests/glr-regression.at: Add test for GLR merging error reported
by M. Rosien.
tests/glr-regression.at: Add new regression test for the problems
reported by S. Eken with semantic values for embedded rules.
Update copyright notice.
tests/testsuite.at, tests/Makefile.am: Rename glr-regr1.at to
glr-regression.at.