Index: tool/input_sdk/private/js_helper.dart |
diff --git a/tool/input_sdk/private/js_helper.dart b/tool/input_sdk/private/js_helper.dart |
index b558c03f20034277e6510a2e046448db04459f21..522729371a179ad77104f6622ef26adbeff5b059 100644 |
--- a/tool/input_sdk/private/js_helper.dart |
+++ b/tool/input_sdk/private/js_helper.dart |
@@ -16,6 +16,8 @@ import 'dart:_internal' show |
MappedIterable, |
IterableElementError; |
+import 'dart:_native_typed_data'; |
+ |
part 'annotations.dart'; |
part 'native_helper.dart'; |
part 'regexp_helper.dart'; |
@@ -279,6 +281,24 @@ class Primitives { |
return _fromCharCodeApply(charCodes); |
} |
+ // [start] and [end] are validated. |
+ static String stringFromNativeUint8List( |
+ NativeUint8List charCodes, int start, int end) { |
+ const kMaxApply = 500; |
+ if (end <= kMaxApply && start == 0 && end == charCodes.length) { |
+ return JS('String', r'String.fromCharCode.apply(null, #)', charCodes); |
+ } |
+ String result = ''; |
+ for (int i = start; i < end; i += kMaxApply) { |
+ int chunkEnd = (i + kMaxApply < end) ? i + kMaxApply : end; |
+ result = JS('String', |
+ r'# + String.fromCharCode.apply(null, #.subarray(#, #))', |
+ result, charCodes, i, chunkEnd); |
+ } |
+ return result; |
+ } |
+ |
+ |
static String stringFromCharCode(int charCode) { |
if (0 <= charCode) { |
if (charCode <= 0xffff) { |