From 401aace63cef73a1f9ab6d217d5ece53bb816147 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 23 Jan 2006 08:39:52 +0000 Subject: [PATCH 1/1] Work around a bug in bro 0.8, which underparenthesizes its definition of YYLLOC_DEFAULT. * data/glr.c: Change all uses of YYLLOC_DEFAULT to parenthesize their arguments. * data/lalr1.cc: Likewise. * data/yacc.cc: Likewise. --- ChangeLog | 26 ++++++++++++++++++++++++++ data/glr.c | 6 +++--- data/lalr1.cc | 2 +- data/yacc.c | 4 ++-- 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index dec37cec..5fb507e9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,31 @@ +2006-01-23 Paul Eggert + + Work around a bug in bro 0.8, which underparenthesizes its + definition of YYLLOC_DEFAULT. + * data/glr.c: Change all uses of YYLLOC_DEFAULT to parenthesize + their arguments. + * data/lalr1.cc: Likewise. + * data/yacc.cc: Likewise. + 2006-01-22 Paul Eggert + Work around a bug in Pike 7.0, and give the Pike folks a + better way to override the usual int widths. + * data/yacc.c (b4_int_type): Use yytype_uint8, etc., so that the + user can override the types. + (short): #undef, to work around a bug in Pike 7.0. + (yytype_uint8, yytype_int8, yytype_uint16, yytype_int16): New types. + (union yyalloc.yyss): Use yytype_int16 rather than short. + All uses changed. + (yysigned_char): Remove. + * src/parse-gram.y (YYTYPE_UINT8, YYTYPE_INT8, YYTYPE_UINT16): + (YYTYPE_INT16): New macros, to test the new facility in yacc.c. + * tests/regression.at (Web2c Actions): Adjust to above changes. + + * src/reader.c (check_and_convert_grammar): New function. + (reader): Close the input file even if something went wrong during + parsing. Minor file descriptor leak reported by twlevo. + * src/assoc.c (assoc_to_string): Use a default: abort (); case to pacify gcc -Wswitch-default. * src/scan-gram.l (adjust_location): Use a default: break; case diff --git a/data/glr.c b/data/glr.c index 0c1faedd..e35cf78b 100644 --- a/data/glr.c +++ b/data/glr.c @@ -923,7 +923,7 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, *yyvalp = yyval_default; else *yyvalp = yyvsp[YYFILL (1-yyrhslen)].yystate.yysemantics.yysval; - YYLLOC_DEFAULT (*yylocp, yyvsp - yyrhslen, yyrhslen); + YYLLOC_DEFAULT ((*yylocp), (yyvsp - yyrhslen), yyrhslen); ]b4_location_if([[ yystackp->yyerror_range[1].yystate.yyloc = *yylocp; ]])[ switch (yyn) @@ -2119,7 +2119,7 @@ yyrecoverSyntaxError (yyGLRStack* yystackp]b4_user_formals[) yyGLRStackItem yyerror_range[3]; yyerror_range[1].yystate.yyloc = yys->yyloc; yyerror_range[2].yystate.yyloc = yylloc; - YYLLOC_DEFAULT (yys->yyloc, yyerror_range, 2);]])[ + YYLLOC_DEFAULT ((yys->yyloc), yyerror_range, 2);]])[ yydestruct ("Error: discarding", *yytokenp, &yylval]b4_location_if([, &yylloc])[]b4_user_args[); } @@ -2166,7 +2166,7 @@ yyrecoverSyntaxError (yyGLRStack* yystackp]b4_user_formals[) /* Shift the error token having adjusted its location. */ YYLTYPE yyerrloc;]b4_location_if([[ yystackp->yyerror_range[2].yystate.yyloc = yylloc; - YYLLOC_DEFAULT (yyerrloc, yystackp->yyerror_range, 2);]])[ + YYLLOC_DEFAULT (yyerrloc, (yystackp->yyerror_range), 2);]])[ YY_SYMBOL_PRINT ("Shifting", yystos[yytable[yyj]], &yylval, &yyerrloc); yyglrShift (yystackp, 0, yytable[yyj], diff --git a/data/lalr1.cc b/data/lalr1.cc index af67b220..594465c0 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -783,7 +783,7 @@ b4_error_verbose_if([, yytoken])[)); yyerror_range[1] = yylloc; // Using YYLLOC is tempting, but would change the location of // the look-ahead. YYLOC is available though. - YYLLOC_DEFAULT (yyloc, yyerror_range - 1, 2); + YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2); yysemantic_stack_.push (yylval); yylocation_stack_.push (yyloc); diff --git a/data/yacc.c b/data/yacc.c index f076c744..a6aaef58 100644 --- a/data/yacc.c +++ b/data/yacc.c @@ -1262,7 +1262,7 @@ yyreduce: ]b4_location_if( [[ /* Default location. */ - YYLLOC_DEFAULT (yyloc, yylsp - yylen, yylen);]])[ + YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);]])[ YY_REDUCE_PRINT (yyn); switch (yyn) { @@ -1427,7 +1427,7 @@ yyerrlab1: yyerror_range[1] = yylloc; /* Using YYLLOC is tempting, but would change the location of the look-ahead. YYLOC is available though. */ - YYLLOC_DEFAULT (yyloc, yyerror_range - 1, 2); + YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2); *++yylsp = yyloc;]])[ /* Shift the error token. */ -- 2.45.2