]> git.saurik.com Git - bison.git/commitdiff
* data/bison.c++: Unmerge value as yylval and value as yyval. Unmerge
authorRobert Anisko <robert@lrde.epita.fr>
Mon, 4 Mar 2002 16:37:52 +0000 (16:37 +0000)
committerRobert Anisko <robert@lrde.epita.fr>
Mon, 4 Mar 2002 16:37:52 +0000 (16:37 +0000)
location as yylloc and location as yyloc.  Use YYLLOC_DEFAULT, and
provide a default implementation.

ChangeLog
data/bison.c++

index e05aaa51492a6c627a213eeeb0b2e779560a3096..4a6ec15a9d3e78312be0123b4bcf33ba9d388651 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2002-03-04  Robert Anisko  <robert@lrde.epita.fr>
+
+       * data/bison.c++: Unmerge value as yylval and value as yyval.  Unmerge
+       location as yylloc and location as yyloc.  Use YYLLOC_DEFAULT, and
+       provide a default implementation.
+
 2002-03-04  Akim Demaille  <akim@epita.fr>
 
        * tests/input.at (Invalid $n, Invalid @n): Add the ending `;'.
index 38b1cd1d90c78c3201902bdcca87efae9bd54dc0..a07d27c6e233e768ab7ab77c04a9a7750a395a74 100644 (file)
@@ -88,6 +88,12 @@ yystype;
 # define YYSTYPE yystype
 #endif
 
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+   Current.last_line = Rhs[[N]].last_line; \
+   Current.last_column = Rhs[[N]].last_column;
+#endif
+
 m4_if(b4_locations_flag, [0], [],
 [#ifndef YYLTYPE
 typedef struct yyltype
@@ -210,10 +216,14 @@ namespace yy
     /* Message.  */
     std::string message;
 
-    /* @$ and $$.  */
+    /* Semantic value and location of lookahead token.  */
     SemanticType value;
     LocationType location;
 
+    /* @$ and $$.  */
+    SemanticType yyval;
+    LocationType yyloc;
+
     /* Initial location.  */
     LocationType initlocation_;
   };
@@ -358,13 +368,13 @@ yy::b4_name::parse ()
   len_ = r2_[[n_]];
   if (len_)
     {
-      value = semantic_stack_[[1 - len_]];
-      location = location_stack_[[1 - len_]];
+      yyval = semantic_stack_[[1 - len_]];
+      yyloc = location_stack_[[1 - len_]];
     }
   else
     {
-      value = semantic_stack_[[0]];
-      location = location_stack_[[0]];
+      yyval = semantic_stack_[[0]];
+      yyloc = location_stack_[[0]];
     }
 
 #if YYDEBUG
@@ -378,9 +388,15 @@ yy::b4_name::parse ()
     }
 #endif
 
+  if (len_)
+    {
+      Slice< LocationType, LocationStack > slice (location_stack_, len_);
+      YYLLOC_DEFAULT (yyloc, slice, len_);
+    }
+
+  std::cout << "Reduced location is :" << yyloc << std::endl;
+
   {
-    SemanticType& yyval (value);
-    LocationType& yyloc (location);
     SemanticStack& yyvsp (semantic_stack_);
     LocationStack& yylsp (location_stack_);
 
@@ -405,8 +421,8 @@ yy::b4_name::parse ()
     }
 #endif
 
-  semantic_stack_.push (value);
-  location_stack_.push (location);
+  semantic_stack_.push (yyval);
+  location_stack_.push (yyloc);
 
   /* Shift the result of the reduction.  */
   n_ = r1_[[n_]];
@@ -698,14 +714,14 @@ namespace yy
     T&
     operator [[]] (int index)
     {
-      return seq_[[seq_.size () - 1 + index]];
+      return seq_[[height () - 1 + index]];
     }
 
     inline
     const T&
     operator [[]] (int index) const
     {
-      return seq_[[seq_.size () - 1 + index]];
+      return seq_[[height () - 1 + index]];
     }
 
     inline
@@ -744,6 +760,30 @@ namespace yy
 
     S seq_;
   };
+
+  template < class T, class S = Stack< T > >
+  class Slice
+  {
+  public:
+
+    Slice (const S& stack,
+          unsigned range) : stack_ (stack),
+                            range_ (range)
+    {
+    }
+
+    inline
+    const T&
+    operator [[]] (unsigned index) const
+    {
+      return stack_[[index - range_]];
+    }
+
+  private:
+
+    const S& stack_;
+    unsigned range_;
+  };
 }
 
 #endif // not BISON_STACK_HH