]> git.saurik.com Git - bison.git/blobdiff - tests/calc.at
lalr1.cc: location_type: make sure we don't depend on loc.(begin|end).
[bison.git] / tests / calc.at
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;
   }
 ]])