| Index: pkg/dart_parser/lib/src/listener.dart
|
| diff --git a/pkg/dart_parser/lib/src/listener.dart b/pkg/dart_parser/lib/src/listener.dart
|
| index 3cb9b44afb001f5642e5247d3ae5fc56ab9ed832..4c322161cc716018c793c69a3f36293c6f45d197 100644
|
| --- a/pkg/dart_parser/lib/src/listener.dart
|
| +++ b/pkg/dart_parser/lib/src/listener.dart
|
| @@ -868,7 +868,8 @@ class Listener {
|
|
|
| // TODO(ahe): Merge with `handleError` (nee `reportError`).
|
| void error(String message, Token token) {
|
| - throw new ParserError(token, ErrorKind.UNSPECIFIED, {'text': message});
|
| + throw new ParserError.fromTokens(
|
| + token, token, ErrorKind.Unspecified, {'text': message});
|
| }
|
|
|
| // TODO(ahe): Rename to `handleError`.
|
| @@ -882,7 +883,8 @@ class Listener {
|
|
|
| // TODO(ahe): Move away from this class.
|
| void reportErrorHelper(Token token, ErrorKind kind, Map arguments) {
|
| - recoverableErrors.add(new ParserError(token, kind, arguments));
|
| + recoverableErrors.add(
|
| + new ParserError.fromTokens(token, token, kind, arguments));
|
| }
|
|
|
| // TODO(ahe): Move away from this class.
|
| @@ -894,13 +896,13 @@ class Listener {
|
| hex = "$padding$hex";
|
| }
|
| reportErrorHelper(
|
| - token, ErrorKind.INVALID_INPUT_CHARACTER, {'characterHex': hex});
|
| + token, ErrorKind.InvalidInputCharacter, {'characterHex': hex});
|
| } else if (token is UnterminatedToken) {
|
| ErrorKind kind;
|
| var arguments = const {};
|
| switch (token.start) {
|
| case '1e':
|
| - kind = ErrorKind.MISSING_EXPONENT;
|
| + kind = ErrorKind.MissingExponent;
|
| break;
|
| case '"':
|
| case "'":
|
| @@ -910,20 +912,20 @@ class Listener {
|
| case "r'":
|
| case 'r"""':
|
| case "r'''":
|
| - kind = ErrorKind.UNTERMINATED_STRING;
|
| + kind = ErrorKind.UnterminatedString;
|
| arguments = {'quote': token.start};
|
| break;
|
| case '0x':
|
| - kind = ErrorKind.EXPECTED_HEX_DIGIT;
|
| + kind = ErrorKind.ExpectedHexDigit;
|
| break;
|
| case r'$':
|
| - kind = ErrorKind.MALFORMED_STRING_LITERAL;
|
| + kind = ErrorKind.MalformedStringLiteral;
|
| break;
|
| case '/*':
|
| - kind = ErrorKind.UNTERMINATED_COMMENT;
|
| + kind = ErrorKind.UnterminatedComment;
|
| break;
|
| default:
|
| - kind = ErrorKind.UNTERMINATED_TOKEN;
|
| + kind = ErrorKind.UnterminatedToken;
|
| break;
|
| }
|
| reportErrorHelper(token, kind, arguments);
|
| @@ -931,7 +933,7 @@ class Listener {
|
| String begin = token.begin.value;
|
| String end = closeBraceFor(begin);
|
| reportErrorHelper(
|
| - token, ErrorKind.UNMATCHED_TOKEN, {'begin': begin, 'end': end});
|
| + token, ErrorKind.UnmatchedToken, {'begin': begin, 'end': end});
|
| } else {
|
| error(token.assertionMessage, token);
|
| }
|
| @@ -949,13 +951,21 @@ String closeBraceFor(String openBrace) {
|
| }
|
|
|
| class ParserError {
|
| - final Token token;
|
| + /// Character offset from the beginning of file where this error starts.
|
| + final int beginOffset;
|
| +
|
| + /// Character offset from the beginning of file where this error ends.
|
| + final int endOffset;
|
|
|
| final ErrorKind kind;
|
|
|
| final Map arguments;
|
|
|
| - ParserError(this.token, this.kind, this.arguments);
|
| + ParserError(this.beginOffset, this.endOffset, this.kind, this.arguments);
|
| +
|
| + ParserError.fromTokens(Token begin, Token end, ErrorKind kind, Map arguments)
|
| + : this(begin.charOffset, end.charOffset + end.charCount, kind,
|
| + arguments);
|
|
|
| - String toString() => "@${token.charOffset}: $kind $arguments";
|
| + String toString() => "@${beginOffset}: $kind $arguments";
|
| }
|
|
|