| Index: pkg/compiler/lib/src/compiler.dart
|
| diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
|
| index 4b37788a616c93a2e1671d05a55dca05c3f41390..e6b4f4c92b8bef96248f21eff940140ba9ab560c 100644
|
| --- a/pkg/compiler/lib/src/compiler.dart
|
| +++ b/pkg/compiler/lib/src/compiler.dart
|
| @@ -1795,6 +1795,18 @@ class _CompilerDiagnosticReporter extends DiagnosticReporter {
|
| uri = currentElement.compilationUnit.script.resourceUri;
|
| assert(invariant(currentElement, () {
|
|
|
| + bool sameToken(Token token, Token sought) {
|
| + if (token == sought) return true;
|
| + if (token.stringValue == '>>' ||
|
| + token.stringValue == '>>>') {
|
| + // `>>` and `>>>` are converted to `>` in the parser when needed.
|
| + return sought.stringValue == '>' &&
|
| + token.charOffset <= sought.charOffset &&
|
| + sought.charOffset < token.charEnd;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| /// Check that [begin] and [end] can be found between [from] and [to].
|
| validateToken(Token from, Token to) {
|
| if (from == null || to == null) return true;
|
| @@ -1802,10 +1814,10 @@ class _CompilerDiagnosticReporter extends DiagnosticReporter {
|
| bool foundEnd = false;
|
| Token token = from;
|
| while (true) {
|
| - if (token == begin) {
|
| + if (sameToken(token, begin)) {
|
| foundBegin = true;
|
| }
|
| - if (token == end) {
|
| + if (sameToken(token, end)) {
|
| foundEnd = true;
|
| }
|
| if (foundBegin && foundEnd) {
|
| @@ -1859,7 +1871,7 @@ class _CompilerDiagnosticReporter extends DiagnosticReporter {
|
| }
|
|
|
| SourceSpan spanFromNode(Node node) {
|
| - return spanFromTokens(node.getBeginToken(), node.getEndToken());
|
| + return spanFromTokens(node.getBeginToken(), node.getPrefixEndToken());
|
| }
|
|
|
| SourceSpan spanFromElement(Element element) {
|
|
|