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) { |