+2008-11-15  Akim Demaille  <akim@betelgeuse.gostai.ensta.fr>
+
+       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  <demaille@gostai.com>
 
        Better error message.
 
                              yy::parser::location_type* yylloc)
 #endif
 {
+  typedef yy::parser::location_type location_type;
   typedef yy::parser::token token;
   static int stage = -1;
   ++stage;
 #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
     }
     {
 #if USE_LEX_SYMBOL
       return yy::parser::make_NUMBER (stage, yy::location());
-#elif defined ONE_STAGE_BUILD
+#else
+# if defined ONE_STAGE_BUILD
       yylval->build(stage);
-      *yylloc = yy::location ();
-      return token::NUMBER;
-#elif USE_VARIANTS
+# elif USE_VARIANTS
       yylval->build<int>() = stage;
-      *yylloc = yy::location ();
-      return token::NUMBER;
-#else
+# else
       yylval->ival = stage;
-      *yylloc = yy::location ();
+# endif
+      *yylloc = location_type ();
       return token::NUMBER;
 #endif
     }
     {
 #if USE_LEX_SYMBOL
       return yy::parser::make_TEXT ("A string.", yy::location());
-#elif defined ONE_STAGE_BUILD
+#else
+# if defined ONE_STAGE_BUILD
       yylval->build(std::string("A string."));
-      *yylloc = yy::location ();
-      return token::TEXT;
-#elif USE_VARIANTS
+# elif USE_VARIANTS
       yylval->build<std::string>() = std::string("A string.");
-      *yylloc = yy::location ();
-      return token::TEXT;
-#else
+# else
       yylval->sval = new std::string("A string.");
-      *yylloc = yy::location ();
+# endif
+      *yylloc = location_type ();
       return token::TEXT;
 #endif
     }