Index: lib/runtime/dart_sdk.js |
diff --git a/lib/runtime/dart_sdk.js b/lib/runtime/dart_sdk.js |
index d649ca357d1f95eac5bfa10fffd5863923b0251f..6e024e35a4371fbaa454f96cf147303873a30ea3 100644 |
--- a/lib/runtime/dart_sdk.js |
+++ b/lib/runtime/dart_sdk.js |
@@ -9164,6 +9164,18 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
return _js_helper.Primitives._fromCharCodeApply(dart.as(charCodes, core.List$(core.int))); |
} |
+ static stringFromNativeUint8List(charCodes, start, end) { |
+ let kMaxApply = 500; |
+ if (dart.notNull(end) <= kMaxApply && start == 0 && end == charCodes[dartx.length]) { |
+ return String.fromCharCode.apply(null, charCodes); |
+ } |
+ let result = ''; |
+ for (let i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNull(i) + kMaxApply) { |
+ let chunkEnd = dart.notNull(i) + kMaxApply < dart.notNull(end) ? dart.notNull(i) + kMaxApply : end; |
+ result = result + String.fromCharCode.apply(null, charCodes.subarray(i, chunkEnd)); |
+ } |
+ return result; |
+ } |
static stringFromCharCode(charCode) { |
if (0 <= dart.notNull(charCode)) { |
if (dart.notNull(charCode) <= 65535) { |
@@ -9301,6 +9313,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
_fromCharCodeApply: [core.String, [core.List$(core.int)]], |
stringFromCodePoints: [core.String, [dart.dynamic]], |
stringFromCharCodes: [core.String, [dart.dynamic]], |
+ stringFromNativeUint8List: [core.String, [_native_typed_data.NativeUint8List, core.int, core.int]], |
stringFromCharCode: [core.String, [core.int]], |
stringConcatUnchecked: [core.String, [core.String, core.String]], |
flattenString: [core.String, [core.String]], |
@@ -9323,7 +9336,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
identicalImplementation: [core.bool, [dart.dynamic, dart.dynamic]], |
extractStackTrace: [core.StackTrace, [core.Error]] |
}), |
- names: ['initializeStatics', 'objectHashCode', '_parseIntError', 'parseInt', '_parseDoubleError', 'parseDouble', 'objectTypeName', 'objectToString', 'dateNow', 'initTicker', 'currentUri', '_fromCharCodeApply', 'stringFromCodePoints', 'stringFromCharCodes', 'stringFromCharCode', 'stringConcatUnchecked', 'flattenString', 'getTimeZoneName', 'getTimeZoneOffsetInMinutes', 'valueFromDecomposedDate', 'patchUpY2K', 'lazyAsJsDate', 'getYear', 'getMonth', 'getDay', 'getHours', 'getMinutes', 'getSeconds', 'getMilliseconds', 'getWeekday', 'valueFromDateString', 'getProperty', 'setProperty', 'identicalImplementation', 'extractStackTrace'] |
+ names: ['initializeStatics', 'objectHashCode', '_parseIntError', 'parseInt', '_parseDoubleError', 'parseDouble', 'objectTypeName', 'objectToString', 'dateNow', 'initTicker', 'currentUri', '_fromCharCodeApply', 'stringFromCodePoints', 'stringFromCharCodes', 'stringFromNativeUint8List', 'stringFromCharCode', 'stringConcatUnchecked', 'flattenString', 'getTimeZoneName', 'getTimeZoneOffsetInMinutes', 'valueFromDecomposedDate', 'patchUpY2K', 'lazyAsJsDate', 'getYear', 'getMonth', 'getDay', 'getHours', 'getMinutes', 'getSeconds', 'getMilliseconds', 'getWeekday', 'valueFromDateString', 'getProperty', 'setProperty', 'identicalImplementation', 'extractStackTrace'] |
}); |
_js_helper.Primitives.mirrorFunctionCacheName = '$cachedFunction'; |
_js_helper.Primitives.mirrorInvokeCacheName = '$cachedInvocation'; |
@@ -24393,23 +24406,13 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
static fromCharCodes(charCodes, start, end) { |
if (start === void 0) start = 0; |
if (end === void 0) end = null; |
- if (!dart.is(charCodes, _interceptors.JSArray)) { |
- return core.String._stringFromIterable(charCodes, start, end); |
+ if (dart.is(charCodes, _interceptors.JSArray)) { |
+ return core.String._stringFromJSArray(dart.as(charCodes, core.List), start, end); |
} |
- let list = dart.as(charCodes, core.List); |
- let len = list[dartx.length]; |
- if (dart.notNull(start) < 0 || dart.notNull(start) > dart.notNull(len)) { |
- dart.throw(new core.RangeError.range(start, 0, len)); |
- } |
- if (end == null) { |
- end = len; |
- } else if (dart.notNull(end) < dart.notNull(start) || dart.notNull(end) > dart.notNull(len)) { |
- dart.throw(new core.RangeError.range(end, start, len)); |
- } |
- if (dart.notNull(start) > 0 || dart.notNull(end) < dart.notNull(len)) { |
- list = list[dartx.sublist](start, end); |
+ if (dart.is(charCodes, _native_typed_data.NativeUint8List)) { |
+ return core.String._stringFromUint8List(charCodes, start, end); |
} |
- return _js_helper.Primitives.stringFromCharCodes(list); |
+ return core.String._stringFromIterable(charCodes, start, end); |
} |
static fromCharCode(charCode) { |
return _js_helper.Primitives.stringFromCharCode(charCode); |
@@ -24418,6 +24421,19 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
let defaultValue = opts && 'defaultValue' in opts ? opts.defaultValue : null; |
dart.throw(new core.UnsupportedError('String.fromEnvironment can only be used as a const constructor')); |
} |
+ static _stringFromJSArray(list, start, endOrNull) { |
+ let len = list[dartx.length]; |
+ let end = core.RangeError.checkValidRange(start, endOrNull, len); |
+ if (dart.notNull(start) > 0 || dart.notNull(end) < dart.notNull(len)) { |
+ list = list[dartx.sublist](start, end); |
+ } |
+ return _js_helper.Primitives.stringFromCharCodes(list); |
+ } |
+ static _stringFromUint8List(charCodes, start, endOrNull) { |
+ let len = charCodes[dartx.length]; |
+ let end = core.RangeError.checkValidRange(start, endOrNull, len); |
+ return _js_helper.Primitives.stringFromNativeUint8List(charCodes, start, end); |
+ } |
static _stringFromIterable(charCodes, start, end) { |
if (dart.notNull(start) < 0) dart.throw(new core.RangeError.range(start, 0, charCodes[dartx.length])); |
if (end != null && dart.notNull(end) < dart.notNull(start)) { |
@@ -24451,8 +24467,12 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
fromCharCode: [core.String, [core.int]], |
fromEnvironment: [core.String, [core.String], {defaultValue: core.String}] |
}), |
- statics: () => ({_stringFromIterable: [core.String, [core.Iterable$(core.int), core.int, core.int]]}), |
- names: ['_stringFromIterable'] |
+ statics: () => ({ |
+ _stringFromJSArray: [core.String, [core.List, core.int, core.int]], |
+ _stringFromUint8List: [core.String, [_native_typed_data.NativeUint8List, core.int, core.int]], |
+ _stringFromIterable: [core.String, [core.Iterable$(core.int), core.int, core.int]] |
+ }), |
+ names: ['_stringFromJSArray', '_stringFromUint8List', '_stringFromIterable'] |
}); |
core.List$ = dart.generic(E => { |
class List extends core.Object { |