Optimizations to ParseFinalize() to make up for the extra cleanup associated
with the allocated parser stack. This branch now runs faster than trunk and is less than 300 bytes larger. FossilOrigin-Name: f7290db63cc2568090c14dffc4ea4eadfacb5b94b50a1852ef6eefd9e2e32533
This commit is contained in:
+20
-1
@@ -83,6 +83,8 @@
|
||||
** YY_NO_ACTION The yy_action[] code for no-op
|
||||
** YY_MIN_REDUCE Minimum value for reduce actions
|
||||
** YY_MAX_REDUCE Maximum value for reduce actions
|
||||
** YY_MIN_DSTRCTR Minimum symbol value that has a destructor
|
||||
** YY_MAX_DSTRCTR Maximum symbol value that has a destructor
|
||||
*/
|
||||
#ifndef INTERFACE
|
||||
# define INTERFACE 1
|
||||
@@ -438,7 +440,24 @@ static void yy_pop_parser_stack(yyParser *pParser){
|
||||
*/
|
||||
void ParseFinalize(void *p){
|
||||
yyParser *pParser = (yyParser*)p;
|
||||
while( pParser->yytos>pParser->yystack ) yy_pop_parser_stack(pParser);
|
||||
|
||||
/* In-lined version of calling yy_pop_parser_stack() for each
|
||||
** element left in the stack */
|
||||
yyStackEntry *yytos = pParser->yytos;
|
||||
while( yytos>pParser->yystack ){
|
||||
#ifndef NDEBUG
|
||||
if( yyTraceFILE ){
|
||||
fprintf(yyTraceFILE,"%sPopping %s\n",
|
||||
yyTracePrompt,
|
||||
yyTokenName[yytos->major]);
|
||||
}
|
||||
#endif
|
||||
if( yytos->major>=YY_MIN_DSTRCTR && yytos->major<=YY_MAX_DSTRCTR ){
|
||||
yy_destructor(pParser, yytos->major, &yytos->minor);
|
||||
}
|
||||
yytos--;
|
||||
}
|
||||
|
||||
#if YYGROWABLESTACK
|
||||
if( pParser->yystack!=pParser->yystk0 ) YYFREE(pParser->yystack);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user