# include <iostream>
# include <string>
+# include <algorithm>
namespace ]b4_namespace[
{
]m4_ifdef([b4_location_constructors], [
/// Construct a position.
position ()
- : filename (0), line (1), column (0)
+ : filename (0), line (]b4_location_initial_line[), column (]b4_location_initial_column[)
{
}
inline void initialize (]b4_filename_type[* fn)
{
filename = fn;
- line = 1;
- column = 0;
+ line = ]b4_location_initial_line[;
+ column = ]b4_location_initial_column[;
}
/** \name Line and Column related manipulators
/// (line related) Advance to the COUNT next lines.
inline void lines (int count = 1)
{
- column = 0;
+ column = ]b4_location_initial_column[;
line += count;
}
/// (column related) Advance to the COUNT next columns.
inline void columns (int count = 1)
{
- int leftmost = 0;
- int current = column;
- if (leftmost <= current + count)
- column += count;
- else
- column = 0;
+ column = std::max (]b4_location_initial_column[u, column + count);
}
/** \} */
if (res == '\n')
{
AT_LOC.last_line++;
- AT_LOC.last_column = 0;
+ AT_LOC.last_column = 1;
}
else
AT_LOC.last_column++;
{
init = 0;
]AT_LOCATION_IF([
- AT_LOC.last_column = 0;
+ AT_LOC.last_column = 1;
AT_LOC.last_line = 1;
])[
}
# Some syntax errors.
_AT_CHECK_CALC_ERROR([$1], [1], [0 0], [15],
- [1.2: syntax error, unexpected number])
+ [1.3: syntax error, unexpected number])
_AT_CHECK_CALC_ERROR([$1], [1], [1//2], [20],
- [1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'])
+ [1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'])
_AT_CHECK_CALC_ERROR([$1], [1], [error], [5],
- [1.0: syntax error, unexpected $undefined])
+ [1.1: syntax error, unexpected $undefined])
_AT_CHECK_CALC_ERROR([$1], [1], [1 = 2 = 3], [30],
- [1.6: syntax error, unexpected '='])
+ [1.7: syntax error, unexpected '='])
_AT_CHECK_CALC_ERROR([$1], [1],
[
+1],
[20],
- [2.0: syntax error, unexpected '+'])
+ [2.1: syntax error, unexpected '+'])
# Exercise error messages with EOF: work on an empty file.
_AT_CHECK_CALC_ERROR([$1], [1], [/dev/null], [4],
- [1.0: syntax error, unexpected end of input])
+ [1.1: syntax error, unexpected end of input])
# Exercise the error token: without it, we die at the first error,
# hence be sure to
_AT_CHECK_CALC_ERROR([$1], [0],
[() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1],
[250],
-[1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+[1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
calc: error: 4444 != 1])
# The same, but this time exercising explicitly triggered syntax errors.
# POSIX says the lookahead causing the error should not be discarded.
_AT_CHECK_CALC_ERROR([$1], [0], [(!) + (0 0) = 1], [102],
-[1.9: syntax error, unexpected number
+[1.10: syntax error, unexpected number
calc: error: 2222 != 1])
_AT_CHECK_CALC_ERROR([$1], [0], [(- *) + (0 0) = 1], [113],
-[1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+[1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
calc: error: 2222 != 1])
AT_BISON_OPTION_POPDEFS