Skip to content

Commit

Permalink
Fix line numbers for invariant test failures
Browse files Browse the repository at this point in the history
  • Loading branch information
eggrobin committed Sep 22, 2024
1 parent c409cfe commit f1c47cb
Showing 1 changed file with 21 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ public static int testInvariants(String inputFile, String suffix, boolean doRang
}
final var noComments = new StringBuilder();
final List<String> lines = new ArrayList<>();
final List<Integer> lineBeginnings = new ArrayList();
final List<Integer> lineBeginnings = new ArrayList<>();
try (final BufferedReader in = getInputReader(inputFile)) {
in.lines()
.forEach(
Expand Down Expand Up @@ -234,7 +234,26 @@ public static int testInvariants(String inputFile, String suffix, boolean doRang
position -> {
for (int i = 0; i < lineBeginnings.size(); ++i) {
if (lineBeginnings.get(i) > position.getIndex()) {
return i; // 1-based line number.
// The error is before the beginning of line i (0-based), thus
// on line i
// (1-based).
return i;
} else if (lineBeginnings.get(i) == position.getIndex()) {
// The position in a beginning of line; this happens when an
// statement has been
// successfully parsed, but then fails for nonsyntactic reasons.
// The parse position is then the beginning of the next
// statement.
// Backtrack to the last nonempty line (ignoring comments),
// which is the last
// line of the failing statement.
int indexInTrimmedSource = position.getIndex();
while (lineBeginnings.get(i) == indexInTrimmedSource
&& indexInTrimmedSource > 0) {
--indexInTrimmedSource;
--i;
}
return i + 1;
}
}
return lineBeginnings.size();
Expand Down

0 comments on commit f1c47cb

Please sign in to comment.