Index: sdk/lib/_internal/compiler/implementation/scanner/token.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/token.dart b/sdk/lib/_internal/compiler/implementation/scanner/token.dart |
index 901202139bcdf4c3205b7c3b2e56229eef259021..9f726ec8dd49e98ca77100fc04e1e287bd2fc0cc 100644 |
--- a/sdk/lib/_internal/compiler/implementation/scanner/token.dart |
+++ b/sdk/lib/_internal/compiler/implementation/scanner/token.dart |
@@ -231,6 +231,9 @@ class StringWrapper implements SourceString { |
bool isPrivate() => !isEmpty && identical(stringValue.charCodeAt(0), $_); |
} |
+ |
+// TODO(erikcorry): Use the new code point iterator on String when it is |
+// available. |
class StringCodeIterator implements Iterator<int> { |
final String string; |
int index; |
@@ -246,7 +249,12 @@ class StringCodeIterator implements Iterator<int> { |
} |
bool get hasNext => index < end; |
- int next() => string.charCodeAt(index++); |
+ int next() { |
+ int charCode = string.charCodeAt(index++); |
+ // Skip trail surrogate. |
+ if (charCode >= String.SMP_CODE_POINT_BASE) index++; |
+ return charCode; |
+ } |
} |
class BeginGroupToken extends StringToken { |