* 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.
This commit is contained in:
Joel E. Denny
2007-01-01 00:42:21 +00:00
parent 7172e23e8f
commit 7d59638490
7 changed files with 88 additions and 25 deletions

View File

@@ -1624,16 +1624,19 @@ yyreturn:
if (yyss != yyssa)
YYSTACK_FREE (yyss);
#endif
]b4_push_if([yypushreturn:])[
#if YYERROR_VERBOSE
]b4_push_if([[ yyps->yynew = 1;
yypushreturn:
]])[#if YYERROR_VERBOSE
if (yymsg != yymsgbuf)
YYSTACK_FREE (yymsg);
#endif
/* Make sure YYID is used. */
return YYID (yyresult);
]}
}
b4_epilogue
]b4_epilogue
b4_defines_if(
[@output b4_spec_defines_file
b4_copyright([Skeleton interface for Bison's Yacc-like parsers in C],dnl '