Index: tool/input_sdk/patch/core_patch.dart |
diff --git a/tool/input_sdk/patch/core_patch.dart b/tool/input_sdk/patch/core_patch.dart |
index dc9b72c3e3a68fd2511379cf103fdda64ead3e4d..da771fe5ac93784d8bcfd27193fd893af0e7cb1e 100644 |
--- a/tool/input_sdk/patch/core_patch.dart |
+++ b/tool/input_sdk/patch/core_patch.dart |
@@ -17,6 +17,8 @@ import 'dart:_js_helper' show patch, |
import 'dart:_foreign_helper' show JS; |
+import 'dart:_native_typed_data' show NativeUint8List; |
+ |
String _symbolToString(Symbol symbol) => _symbol_dev.Symbol.getName(symbol); |
@patch |
@@ -287,26 +289,13 @@ class String { |
@patch |
factory String.fromCharCodes(Iterable<int> charCodes, |
[int start = 0, int end]) { |
- // If possible, recognize typed lists too. |
- if (charCodes is! JSArray) { |
- return _stringFromIterable(charCodes, start, end); |
- } |
- |
- List list = charCodes; |
- int len = list.length; |
- if (start < 0 || start > len) { |
- throw new RangeError.range(start, 0, len); |
- } |
- if (end == null) { |
- end = len; |
- } else if (end < start || end > len) { |
- throw new RangeError.range(end, start, len); |
+ if (charCodes is JSArray) { |
+ return _stringFromJSArray(charCodes, start, end); |
} |
- |
- if (start > 0 || end < len) { |
- list = list.sublist(start, end); |
+ if (charCodes is NativeUint8List) { |
+ return _stringFromUint8List(charCodes, start, end); |
} |
- return Primitives.stringFromCharCodes(list); |
+ return _stringFromIterable(charCodes, start, end); |
} |
@patch |
@@ -320,6 +309,22 @@ class String { |
'String.fromEnvironment can only be used as a const constructor'); |
} |
+ static String _stringFromJSArray(List list, int start, int endOrNull) { |
+ int len = list.length; |
+ int end = RangeError.checkValidRange(start, endOrNull, len); |
+ if (start > 0 || end < len) { |
+ list = list.sublist(start, end); |
+ } |
+ return Primitives.stringFromCharCodes(list); |
+ } |
+ |
+ static String _stringFromUint8List( |
+ NativeUint8List charCodes, int start, int endOrNull) { |
+ int len = charCodes.length; |
+ int end = RangeError.checkValidRange(start, endOrNull, len); |
+ return Primitives.stringFromNativeUint8List(charCodes, start, end); |
+ } |
+ |
static String _stringFromIterable(Iterable<int> charCodes, |
int start, int end) { |
if (start < 0) throw new RangeError.range(start, 0, charCodes.length); |