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 a768b5038458be91960883793ce175f69e29d55d..4ef81cd0c7e066c369814d4953e3fd6fe7f46f99 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 { |