bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Using "%define location_type" c++ skeleton should exclude default lo


From: Akim Demaille
Subject: Re: Using "%define location_type" c++ skeleton should exclude default location
Date: Tue, 4 May 2010 15:24:14 +0200

Le 14 avr. 2010 à 13:19, Akim Demaille a écrit :

> I have installed a first batch of changes in 2.5 and 2.6 to this end.  I 
> think I failed to keep you in CC, please have a look at the archive (it 
> should appear in 
> http://lists.gnu.org/archive/html/bison-patches/2010-04/threads.html I guess).

Installed in master, will be installed in 2.5 too.

From 49976d5c45048312c97c4eec4b607660444642a9 Mon Sep 17 00:00:00 2001
From: Akim Demaille <address@hidden>
Date: Wed, 14 Apr 2010 16:37:54 +0200
Subject: [PATCH 14/18] 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.
---
 ChangeLog      |    9 +++++++++
 tests/calc.at  |   33 ++++++++++++++++++++++++---------
 tests/local.at |    2 +-
 3 files changed, 34 insertions(+), 10 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index fcc5975..3b3cd4e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2010-05-04  Akim Demaille  <address@hidden>
+
+       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-01  Joel E. Denny  <address@hidden>
 
        tests: fix maintainer-xml-check.
diff --git a/tests/calc.at b/tests/calc.at
index 1a3096e..08ccbe4 100644
--- a/tests/calc.at
+++ b/tests/calc.at
@@ -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].location.first;                       \
+      (Current).last  = (Rhs)[N].location.last;                         \
+    }                                                                   \
+  else                                                                  \
+    {                                                                   \
+      (Current).first = (Current).last = (Rhs)[0].location.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;
   }
 ]])
diff --git a/tests/local.at b/tests/local.at
index 8ebf26a..6b9dad7 100644
--- a/tests/local.at
+++ b/tests/local.at
@@ -155,7 +155,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])])
 
-- 
1.7.0.5






reply via email to

[Prev in Thread] Current Thread [Next in Thread]