+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
/** \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;
}
/** \} */
/** \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;
}