bench: compatibility for Bison <= 2.7

There used to be a bug in some skeletons, which caused the expansion of
'yylval' and 'yylloc', generating these errors:

input.cc:547:16: error: expected ',' or '...' before '(' token
 #define yylval (yystackp->yyval)
                ^
input.yy:29:39: note: in expansion of macro 'yylval'
 int yylex (yy::parser::semantic_type *yylval)
                                       ^

This bug is fixed by 'skel: better aliasing of identifiers', but a workaround
is useful when benchmarking against older versions of Bison, which are still
affected by the bug.

* etc/bench.pl.in: Rename yylval to yylvalp and yylloc to yyllocp in base
grammar 'list'.
This commit is contained in:
Theophile Ranquet
2013-01-15 17:54:44 +01:00
parent 733fb7c593
commit 492dacbc34

View File

@@ -610,8 +610,8 @@ $directives
#if USE_TOKEN_CTOR #if USE_TOKEN_CTOR
yy::parser::symbol_type yylex(); yy::parser::symbol_type yylex();
#else #else
yy::parser::token_type yylex(yy::parser::semantic_type* yylval, yy::parser::token_type yylex(yy::parser::semantic_type* yylvalp,
yy::parser::location_type* yylloc); yy::parser::location_type* yyllocp);
#endif #endif
// Conversion to string. // Conversion to string.
@@ -682,8 +682,8 @@ static
#if USE_TOKEN_CTOR #if USE_TOKEN_CTOR
yy::parser::symbol_type yylex() yy::parser::symbol_type yylex()
#else #else
yy::parser::token_type yylex(yy::parser::semantic_type* yylval, yy::parser::token_type yylex(yy::parser::semantic_type* yylvalp,
yy::parser::location_type* yylloc) yy::parser::location_type* yyllocp)
#endif #endif
{ {
typedef yy::parser::location_type location_type; typedef yy::parser::location_type location_type;
@@ -695,7 +695,7 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval,
#if USE_TOKEN_CTOR #if USE_TOKEN_CTOR
return yy::parser::make_END_OF_FILE (location_type ()); return yy::parser::make_END_OF_FILE (location_type ());
#else #else
*yylloc = location_type (); *yyllocp = location_type ();
return token::END_OF_FILE; return token::END_OF_FILE;
#endif #endif
} }
@@ -705,13 +705,13 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval,
return yy::parser::make_NUMBER (stage, location_type ()); return yy::parser::make_NUMBER (stage, location_type ());
#else #else
# if defined ONE_STAGE_BUILD # if defined ONE_STAGE_BUILD
yylval->build(stage); yylvalp->build(stage);
# elif USE_VARIANTS # elif USE_VARIANTS
yylval->build<int>() = stage; yylvalp->build<int>() = stage;
# else # else
yylval->ival = stage; yylvalp->ival = stage;
# endif # endif
*yylloc = location_type (); *yyllocp = location_type ();
return token::NUMBER; return token::NUMBER;
#endif #endif
} }
@@ -721,13 +721,13 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval,
return yy::parser::make_TEXT ("A string.", location_type ()); return yy::parser::make_TEXT ("A string.", location_type ());
#else #else
# if defined ONE_STAGE_BUILD # if defined ONE_STAGE_BUILD
yylval->build(std::string("A string.")); yylvalp->build(std::string("A string."));
# elif USE_VARIANTS # elif USE_VARIANTS
yylval->build<std::string>() = std::string("A string."); yylvalp->build<std::string>() = std::string("A string.");
# else # else
yylval->sval = new std::string("A string."); yylvalp->sval = new std::string("A string.");
# endif # endif
*yylloc = location_type (); *yyllocp = location_type ();
return token::TEXT; return token::TEXT;
#endif #endif
} }