X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/cce7a5f4230618ddc7e256e8b83b7f0d84ff5909..1d64f0bab600b607fd82ae8f2352a8a505853d57:/data/yacc.c diff --git a/data/yacc.c b/data/yacc.c index 51acf5e9..7a04a7d7 100644 --- a/data/yacc.c +++ b/data/yacc.c @@ -1,7 +1,7 @@ m4_divert(-1) -*- C -*- # Yacc compatible skeleton for Bison -# Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 +# Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify @@ -54,7 +54,7 @@ m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])]) # b4_lex_param # ------------ -# Accumule in b4_lex_param all the yylex arguments. +# Accumulate in b4_lex_param all the yylex arguments. # b4_lex_param arrives quoted twice, but we want to keep only one level. m4_define([b4_lex_param], m4_dquote(b4_pure_if([[[[YYSTYPE *]], [[&yylval]]][]dnl @@ -134,7 +134,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])[ + [1984, 1989, 1990, 2000, 2001, 2002, 2003])[ /* As a special exception, when this file is copied by Bison into a Bison output file, you may use that output file without restriction. @@ -465,7 +465,15 @@ static const ]b4_int_type_for([b4_stos])[ yystos[] = #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab -#define YYERROR goto yyerrlab1 +#define YYERROR ]b4_location_if([do \ + { \ + yylerrsp = yylsp; \ + *++yylerrsp = yyloc; \ + goto yyerrlab1; \ + } \ + while (0)], + [goto yyerrlab1])[ + /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. @@ -767,7 +775,8 @@ b4_c_function_def([yyparse], [int], b4_parse_param) [[ /* The location stack. */ YYLTYPE yylsa[YYINITDEPTH]; YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp;]])[ + YYLTYPE *yylsp; + YYLTYPE *yylerrsp;]])[ #define YYPOPSTACK (yyvsp--, yyssp--]b4_location_if([, yylsp--])[) @@ -1072,6 +1081,8 @@ yyerrlab: yyerror (]b4_yyerror_args["syntax error"); } +]b4_location_if([ yylerrsp = yylsp;])[ + if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an @@ -1095,6 +1106,7 @@ yyerrlab: YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); yydestruct (yytoken, &yylval]b4_location_if([, &yylloc])[); yychar = YYEMPTY; +]b4_location_if([ *++yylerrsp = yylloc;])[ } /* Else will try to reuse lookahead token after shifting the error @@ -1140,7 +1152,8 @@ yyerrlab1: YYDPRINTF ((stderr, "Shifting error token, ")); *++yyvsp = yylval; -]b4_location_if([ *++yylsp = yylloc;])[ +]b4_location_if([ YYLLOC_DEFAULT (yyloc, yylsp, (yylerrsp - yylsp)); + *++yylsp = yyloc;])[ yystate = yyn; goto yynewstate; @@ -1183,7 +1196,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]) + [1984, 1989, 1990, 2000, 2001, 2002, 2003]) /* As a special exception, when this file is copied by Bison into a Bison output file, you may use that output file without restriction.