| 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) {
|
|
|