]> git.saurik.com Git - bison.git/commit - data/yacc.c
parse.lac: implement exploratory stack reallocations.
authorJoel E. Denny <joeldenny@joeldenny.org>
Sat, 11 Dec 2010 18:17:13 +0000 (13:17 -0500)
committerJoel E. Denny <joeldenny@joeldenny.org>
Fri, 24 Dec 2010 02:27:42 +0000 (21:27 -0500)
commit723fe7d18a058e8764beb0c50fbcfa554ee5f6c4
tree8d2a65114fb5a5c2961b5d0f9cd4f9c2f18a3f3c
parentea13bea8ab1c8da513e065f8ba21216616203a4a
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.
(cherry picked from commit 107844a3eea478e1d61551e47a88ed73374724c9)

Conflicts:

src/parse-gram.c
src/parse-gram.h
src/parse-gram.y
ChangeLog
data/yacc.c
src/parse-gram.c
src/parse-gram.h
src/parse-gram.y
tests/input.at
tests/regression.at