From: Akim Demaille <demaille@gostai.com>
Date: Wed, 12 May 2010 09:12:24 +0000 (+0200)
Subject: lalrl1.cc: give a chance to user defined YYLLOC_DEFAULT.
X-Git-Tag: v2.5_rc1~74
X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/3d4a0cad569527d854a97ed1c54f5de7eaa22458?ds=sidebyside

lalrl1.cc: give a chance to user defined YYLLOC_DEFAULT.

	* data/lalr1.cc (YYLLOC_DEFAULT): Move its definition from the
	header file to the implementation file, after the user %code
	sections.
	* NEWS: Document it.

Conflicts:

	ChangeLog
	data/lalr1.cc
---

diff --git a/ChangeLog b/ChangeLog
index 7d8b96be..2b80e95b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2010-05-11  Akim Demaille  <demaille@gostai.com>
+
+	lalrl1.cc: give a chance to user defined YYLLOC_DEFAULT.
+	* data/lalr1.cc (YYLLOC_DEFAULT): Move its definition from the
+	header file to the implementation file, after the user %code
+	sections.
+	* NEWS (2.5): Document this.
+
 2010-05-07  Akim Demaille  <demaille@gostai.com>
 
 	c++: use YYRHSLOC.
diff --git a/NEWS b/NEWS
index ee269105..d890edbb 100644
--- a/NEWS
+++ b/NEWS
@@ -215,6 +215,13 @@ Bison News
             }                                                              \
         while (false)
 
+** YYLLOC_DEFAULT in C++
+
+  The default implementation of YYLLOC_DEFAULT used to be issued in
+  the header file.  It is now output in the implementation file, after
+  the user %code sections so that its #ifndef guard does not try to
+  override the user's YYLLOC_DEFAULT if provided.
+
 * Changes in version 2.4.3 (????-??-??):
 
 ** Problems with spawning M4 on at least FreeBSD 8 and FreeBSD 9 have
diff --git a/data/lalr1.cc b/data/lalr1.cc
index b400b310..641a45ce 100644
--- a/data/lalr1.cc
+++ b/data/lalr1.cc
@@ -69,26 +69,6 @@ dnl FIXME: This is wrong, we want computed header guards.
 # define YYTOKEN_TABLE ]b4_token_table[
 #endif
 
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
- do                                                                    \
-   if (N)                                                              \
-     {                                                                 \
-       (Current).begin = YYRHSLOC (Rhs, 1).begin;                      \
-       (Current).end   = YYRHSLOC (Rhs, N).end;                        \
-     }                                                                 \
-   else                                                                \
-     {                                                                 \
-       (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end;        \
-     }                                                                 \
- while (false)
-#endif
-
 ]b4_namespace_open[
 
   /// A Bison parser.
@@ -331,6 +311,26 @@ b4_percent_code_get[]dnl
 # endif
 #endif
 
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
+ do                                                                    \
+   if (N)                                                              \
+     {                                                                 \
+       (Current).begin = YYRHSLOC (Rhs, 1).begin;                      \
+       (Current).end   = YYRHSLOC (Rhs, N).end;                        \
+     }                                                                 \
+   else                                                                \
+     {                                                                 \
+       (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end;        \
+     }                                                                 \
+ while (false)
+#endif
+
 /* Suppress unused-variable warnings by "using" E.  */
 #define YYUSE(e) ((void) (e))