* data/lalr1.cc (position.hh): Make sure "columns" never pushes
authorAkim Demaille <akim@epita.fr>
Thu, 20 Feb 2003 14:42:43 +0000 (14:42 +0000)
committerAkim Demaille <akim@epita.fr>
Thu, 20 Feb 2003 14:42:43 +0000 (14:42 +0000)
before initial_columns.
(location.hh): Use consistent variable names when defining the
operator<<.
Use "last" so that we subtract from Positions, not from unsigned.

ChangeLog
data/lalr1.cc

index 34de6a3..9866c18 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2003-02-20  Akim Demaille  <akim@epita.fr>
 
+       * data/lalr1.cc (position.hh): Make sure "columns" never pushes
+       before initial_columns.
+       (location.hh): Use consistent variable names when defining the
+       operator<<.
+       Use "last" so that we subtract from Positions, not from unsigned.
+
+2003-02-20  Akim Demaille  <akim@epita.fr>
+
        * data/lalr1.cc (position.hh): New subfile, including the extended
        and Doxygen'ed documentation of class Position.
        (location.hh): Use it.
index 7a08a73..e1ad791 100644 (file)
@@ -923,7 +923,10 @@ namespace yy
     /** \brief (column related) Advance to the COLUMNS next columns. */
     inline void columns (int columns = 1)
     {
-      column += columns;
+      if (int (initial_column) < columns + int (column))
+       column += columns;
+      else
+       column = initial_column;
     }
     /** \} */
 
@@ -1068,19 +1071,20 @@ namespace yy
 
   /** \brief Intercept output stream redirection.
    ** \param ostr the destination output stream
-   ** \param pos a reference to the Position to redirect
+   ** \param loc a reference to the Location to redirect
    **
-   ** Don't issue twice the line number when the location is on a single line.
+   ** Avoid duplicate information.
    */
-  inline std::ostream& operator<< (std::ostream& ostr, const Location& pos)
+  inline std::ostream& operator<< (std::ostream& ostr, const Location& loc)
   {
-    ostr << pos.begin;
-    if (pos.begin.filename != pos.end.filename)
-      ostr << '-' << pos.end - 1;
-    else if (pos.begin.line != pos.end.line)
-      ostr << '-' << pos.end.line  << '.' << pos.end.column - 1;
-    else if (pos.begin.column != pos.end.column - 1)
-      ostr << '-' << pos.end.column - 1;
+    Position last = loc.end - 1;
+    ostr << loc.begin;
+    if (loc.begin.filename != last.filename)
+      ostr << '-' << last;
+    else if (loc.begin.line != last.line)
+      ostr << '-' << last.line  << '.' << last.column;
+    else if (loc.begin.column != last.column)
+      ostr << '-' << last.column;
     return ostr;
   }