From: Akim Demaille Date: Thu, 20 Feb 2003 14:42:43 +0000 (+0000) Subject: * data/lalr1.cc (position.hh): Make sure "columns" never pushes X-Git-Tag: BISON-2_0~388 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/2cdc240eebae256564cc02d122fab6179b2da152 * 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. --- diff --git a/ChangeLog b/ChangeLog index 34de6a3c..9866c18c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2003-02-20 Akim Demaille + + * 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 * data/lalr1.cc (position.hh): New subfile, including the extended diff --git a/data/lalr1.cc b/data/lalr1.cc index 7a08a73d..e1ad791a 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -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; }