From cea1469d47457150f9643ef3e5c21154b0eba1db Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 22 May 2005 05:20:01 +0000 Subject: [PATCH] Fix a destructor bug reported by Wolfgang Spraul in . * data/yacc.c (yyabortlab): Don't call destructor, and don't set yychar to EMPTY. (yyoverflowlab): Don't call destructor. (yyreturn): Call destructor, if yychar is neither YYEOF nor YYEMPTY. * tests/calc.at (AT_CHECK_CALC): Expect one fewer output lines, since we no longer output the message "discarding lookahead token end of input ()". --- ChangeLog | 14 +++++++++++++- data/yacc.c | 12 +++++------- tests/calc.at | 2 +- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index d82bb04f..678bb6cd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2005-05-21 Paul Eggert + + Fix a destructor bug reported by Wolfgang Spraul in + . + * data/yacc.c (yyabortlab): Don't call destructor, and + don't set yychar to EMPTY. + (yyoverflowlab): Don't call destructor. + (yyreturn): Call destructor, if yychar is neither YYEOF nor YYEMPTY. + * tests/calc.at (AT_CHECK_CALC): Expect one fewer output lines, + since we no longer output the message "discarding lookahead token + end of input ()". + 2005-05-20 Paul Hilfinger * data/glr.c (YY_SYMBOL_PRINT): Don't print newline at end to @@ -15,7 +27,7 @@ * tests/glr-regression.at: Add test for GLR merging error reported by M. Rosien. - + 2005-05-13 Paul Eggert * COPYING, ChangeLog, GNUmakefile, HACKING, Makefile.am, diff --git a/data/yacc.c b/data/yacc.c index e7a7537c..07568b95 100644 --- a/data/yacc.c +++ b/data/yacc.c @@ -135,7 +135,7 @@ m4_changecom() m4_divert(0)dnl @output @output_parser_name@ b4_copyright([Skeleton parser for Yacc-like parsing with Bison], - [1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004])[ + [1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005])[ /* As a special exception, when this file is copied by Bison into a Bison output file, you may use that output file without restriction. @@ -1296,9 +1296,6 @@ yyacceptlab: | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: - yydestruct (_("Error: discarding lookahead"), - yytoken, &yylval]b4_location_if([, &yylloc])[); - yychar = YYEMPTY; yyresult = 1; goto yyreturn; @@ -1308,13 +1305,14 @@ yyabortlab: `----------------------------------------------*/ yyoverflowlab: yyerror (]b4_yyerror_args[_("parser stack overflow")); - yydestruct (_("Error: discarding lookahead"), - yytoken, &yylval]b4_location_if([, &yylloc])[); yyresult = 2; /* Fall through. */ #endif yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct (_("Error: discarding lookahead"), + yytoken, &yylval]b4_location_if([, &yylloc])[); if (yyssp != yyss) for (;;) { @@ -1337,7 +1335,7 @@ b4_epilogue m4_if(b4_defines_flag, 0, [], [@output @output_header_name@ b4_copyright([Skeleton parser for Yacc-like parsing with Bison], - [1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004]) + [1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005]) /* As a special exception, when this file is copied by Bison into a Bison output file, you may use that output file without restriction. diff --git a/tests/calc.at b/tests/calc.at index 97d1d918..db92f700 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -480,7 +480,7 @@ _AT_CHECK_CALC_ERROR([$1], [1], [16], [2.0: syntax error, unexpected '+']) # Exercise error messages with EOF: work on an empty file. -_AT_CHECK_CALC_ERROR([$1], [1], [/dev/null], [5], +_AT_CHECK_CALC_ERROR([$1], [1], [/dev/null], [4], [1.0: syntax error, unexpected end of input]) # Exercise the error token: without it, we die at the first error, -- 2.45.2