From 4fc55348e59ab81573d188c8fd529ed9faf81444 Mon Sep 17 00:00:00 2001
From: Akim Demaille <akim@betelgeuse.gostai.ensta.fr>
Date: Fri, 10 Oct 2008 16:56:00 +0200
Subject: [PATCH] Simplify code for variants bench marks.

	* etc/bench.pl.in (&generate_grammar_list): Define and use
	location_type.
	Factor the common code in yylex.
---
 ChangeLog       |  7 +++++++
 etc/bench.pl.in | 31 ++++++++++++++-----------------
 2 files changed, 21 insertions(+), 17 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 6364361c..3b8e4c4b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+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.
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
+#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
     }
@@ -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
+#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
     }
-- 
2.47.2