diff --git a/ChangeLog b/ChangeLog index 6364361c..3b8e4c4b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-11-15 Akim Demaille + + Simplify code for variants bench marks. + * etc/bench.pl.in (&generate_grammar_list): Define and use + location_type. + Factor the common code in yylex. + 2008-11-15 Akim Demaille Better error message. diff --git a/etc/bench.pl.in b/etc/bench.pl.in index 7cab2ebe..a95e646b 100755 --- a/etc/bench.pl.in +++ b/etc/bench.pl.in @@ -686,6 +686,7 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval, yy::parser::location_type* yylloc) #endif { + typedef yy::parser::location_type location_type; typedef yy::parser::token token; static int stage = -1; ++stage; @@ -694,7 +695,7 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval, #if USE_LEX_SYMBOL return yy::parser::make_END_OF_FILE (yy::location()); #else - *yylloc = yy::location (); + *yylloc = location_type (); return token::END_OF_FILE; #endif } @@ -702,17 +703,15 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval, { #if USE_LEX_SYMBOL return yy::parser::make_NUMBER (stage, yy::location()); -#elif defined ONE_STAGE_BUILD - yylval->build(stage); - *yylloc = yy::location (); - return token::NUMBER; -#elif USE_VARIANTS - yylval->build() = stage; - *yylloc = yy::location (); - return token::NUMBER; #else +# if defined ONE_STAGE_BUILD + yylval->build(stage); +# elif USE_VARIANTS + yylval->build() = stage; +# else yylval->ival = stage; - *yylloc = yy::location (); +# endif + *yylloc = location_type (); return token::NUMBER; #endif } @@ -720,17 +719,15 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval, { #if USE_LEX_SYMBOL return yy::parser::make_TEXT ("A string.", yy::location()); -#elif defined ONE_STAGE_BUILD - yylval->build(std::string("A string.")); - *yylloc = yy::location (); - return token::TEXT; -#elif USE_VARIANTS - yylval->build() = std::string("A string."); - *yylloc = yy::location (); - return token::TEXT; #else +# if defined ONE_STAGE_BUILD + yylval->build(std::string("A string.")); +# elif USE_VARIANTS + yylval->build() = std::string("A string."); +# else yylval->sval = new std::string("A string."); - *yylloc = yy::location (); +# endif + *yylloc = location_type (); return token::TEXT; #endif }