]> git.saurik.com Git - bison.git/commitdiff
lalr1.cc: location_type: make sure we don't depend on loc.(begin|end).
authorAkim Demaille <demaille@gostai.com>
Wed, 14 Apr 2010 14:37:54 +0000 (16:37 +0200)
committerAkim Demaille <demaille@gostai.com>
Fri, 7 May 2010 20:40:12 +0000 (22:40 +0200)
* tests/calc.at (Span): Instead of begin/end, as in the built-in
location class, use first and last.
Define YYLLOC_DEFAULT to adjust to these changes.
* tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Adjust to the
location_type changes.

(cherry picked from commit c826013fb38c98861ef0fc5d4dc3fb3fb4f555be)

Conflicts:

tests/calc.at

ChangeLog
tests/calc.at
tests/local.at

index 514dd5d652e19abc8007f4ef7ec5d3501f76b391..c59e809b9e871c78298098f6b4c572a525a6709b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2010-05-04  Akim Demaille  <demaille@gostai.com>
+
+       lalr1.cc: location_type: make sure we don't depend on loc.(begin|end).
+       * tests/calc.at (Span): Instead of begin/end, as in the built-in
+       location class, use first and last.
+       Define YYLLOC_DEFAULT to adjust to these changes.
+       * tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Adjust to the
+       location_type changes.
+
 2010-05-04  Akim Demaille  <demaille@gostai.com>
 
        tests: enhance AT_SYNCLINES_COMPILE.
index 5bb746f788ceda9c2c92445463b5302ef99f4e64..b3955ca5cbacc62bdcc4025e2296c0c4b693d3a1 100644 (file)
@@ -156,7 +156,7 @@ AT_SKEL_CC_IF(
 [%define global_tokens_and_yystype])[
 %code requires
 {
-]AT_LOCATION_TYPE_IF([
+]AT_LOCATION_TYPE_IF([[
 # include <iostream>
   struct Point
   {
@@ -166,10 +166,24 @@ AT_SKEL_CC_IF(
 
   struct Span
   {
-    Point begin;
-    Point end;
+    Point first;
+    Point last;
   };
-])[
+
+# define YYLLOC_DEFAULT(Current, Rhs, N)                \
+do {                                                    \
+  if (N)                                                \
+    {                                                   \
+      (Current).first = (Rhs)[1].first;                        \
+      (Current).last  = (Rhs)[N].last;                  \
+    }                                                   \
+  else                                                  \
+    {                                                   \
+      (Current).first = (Current).last = (Rhs)[0].last;        \
+    }                                                   \
+} while (false)
+
+]])[
   /* Exercise pre-prologue dependency to %union.  */
   typedef int semantic_value;
 }
@@ -207,6 +221,7 @@ FILE *input;
 static semantic_value global_result = 0;
 static int global_count = 0;
 static int power (int base, int exponent);
+
 ]AT_SKEL_CC_IF(,
 [/* yyerror receives the location if:
    - %location & %pure & %glr
@@ -278,11 +293,11 @@ exp:
   std::ostream&
   operator<< (std::ostream& o, const Span& s)
   {
-    o << s.begin.l << '.' << s.begin.c;
-    if (s.begin.l != s.end.l)
-      o << '-' << s.end.l << '.' << s.end.c - 1;
-    else if (s.begin.c != s.end.c - 1)
-      o << '-' << s.end.c - 1;
+    o << s.first.l << '.' << s.first.c;
+    if (s.first.l != s.last.l)
+      o << '-' << s.last.l << '.' << s.last.c - 1;
+    else if (s.first.c != s.last.c - 1)
+      o << '-' << s.last.c - 1;
     return o;
   }
 ]])
index f691ab236de7c98deab94e9f107bfba78bfccec4..dcf382d09a225b03f0db0662bbdff60ef93b4c47 100644 (file)
@@ -152,7 +152,7 @@ AT_PURE_LEX_IF(
 
 AT_SKEL_CC_IF(
   [AT_LOCATION_TYPE_IF(
-    [AT_LOC_PUSHDEF([begin.l], [begin.c], [end.l], [end.c])],
+    [AT_LOC_PUSHDEF([first.l], [first.c], [last.l], [last.c])],
     [AT_LOC_PUSHDEF([begin.line], [begin.column], [end.line], [end.column])])],
   [AT_LOC_PUSHDEF([first_line], [first_column], [last_line], [last_column])])