Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(777)

Unified Diff: sdk/lib/io/string_stream.dart

Issue 11418115: Fix Unicode issues in dart2js and dart2dart. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Remove accidental test expectation dupe Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sdk/lib/io/string_stream.dart
diff --git a/sdk/lib/io/string_stream.dart b/sdk/lib/io/string_stream.dart
index c16815327dba39d7f330498dd09b29db38ee91b9..49302c16172b2b3d02648221a4dadc74555aa3e6 100644
--- a/sdk/lib/io/string_stream.dart
+++ b/sdk/lib/io/string_stream.dart
@@ -268,38 +268,13 @@ class _UTF8Encoder implements _StringEncoder {
static int _encodingSize(String string) => _encodeString(string, null);
static int _encodeString(String string, List<int> buffer) {
- int pos = 0;
- int length = string.length;
- for (int i = 0; i < length; i++) {
- int additionalBytes;
- int charCode = string.charCodeAt(i);
- if (charCode <= 0x007F) {
- additionalBytes = 0;
- if (buffer != null) buffer[pos] = charCode;
- } else if (charCode <= 0x07FF) {
- // 110xxxxx (xxxxx is top 5 bits).
- if (buffer != null) buffer[pos] = ((charCode >> 6) & 0x1F) | 0xC0;
- additionalBytes = 1;
- } else if (charCode <= 0xFFFF) {
- // 1110xxxx (xxxx is top 4 bits)
- if (buffer != null) buffer[pos] = ((charCode >> 12) & 0x0F)| 0xE0;
- additionalBytes = 2;
- } else {
- // 11110xxx (xxx is top 3 bits)
- if (buffer != null) buffer[pos] = ((charCode >> 18) & 0x07) | 0xF0;
- additionalBytes = 3;
- }
- pos++;
- if (buffer != null) {
- for (int i = additionalBytes; i > 0; i--) {
- // 10xxxxxx (xxxxxx is next 6 bits from the top).
- buffer[pos++] = ((charCode >> (6 * (i - 1))) & 0x3F) | 0x80;
- }
- } else {
- pos += additionalBytes;
+ List<int> utf8CodeUnits = encodeUtf8(string);
+ if (buffer != null) {
+ for (int i = 0; i < utf8CodeUnits.length; i++) {
+ buffer[i] = utf8CodeUnits[i];
}
}
- return pos;
+ return utf8CodeUnits.length;
}
}

Powered by Google App Engine
This is Rietveld 408576698