diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c52e12f11f..ddc637768e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,40 @@ ### Core libraries +* As part of (Issue [36900][]), the following methods and properties across + various core libraries, which used to declare a return type of `List`, + were updated to declare a return type of `Uint8List`: + + * `Utf8Codec.encode()` (and `Utf8Encoder.convert()`) + * `BytesBuilder.takeBytes()` + * `BytesBuilder.toBytes()` + * `File.readAsBytes()` (`Future`) + * `File.readAsBytesSync()` + * `RandomAccessFile.read()` (`Future`) + * `RandomAccessFile.readSync()` + * `InternetAddress.rawAddress` + * `RawSocket.read()` + + In addition, the following typed lists were updated to have their `sublist()` + methods declare a return type that is the same as the source list: + + * `Uint8List.sublist()` → `Uint8List` + * `Int8List.sublist()` → `Int8List` + * `Uint8ClampedList.sublist()` → `Uint8ClampedList` + * `Int16List.sublist()` → `Int16List` + * `Uint16List.sublist()` → `Uint16List` + * `Int32List.sublist()` → `Int32List` + * `Uint32List.sublist()` → `Uint32List` + * `Int64List.sublist()` → `Int64List` + * `Uint64List.sublist()` → `Uint64List` + * `Float32List.sublist()` → `Float32List` + * `Float64List.sublist()` → `Float64List` + * `Float32x4List.sublist()` → `Float32x4List` + * `Int32x4List.sublist()` → `Int32x4List` + * `Float64x2List.sublist()` → `Float64x2List` + + [36900]: https://github.com/dart-lang/sdk/issues/36900 + #### `dart:core` * Update `Uri` class to support [RFC6874](https://tools.ietf.org/html/rfc6874): diff --git a/DEPS b/DEPS index 4d8c7e932fe..e7731b9da88 100644 --- a/DEPS +++ b/DEPS @@ -85,7 +85,7 @@ vars = { "fixnum_tag": "0.10.9", "glob_tag": "1.1.7", "html_tag" : "0.14.0+1", - "http_io_rev": "57da05a66f5bf7df3dd7aebe7b7efe0dfc477baa", + "http_io_rev": "773f4bc73ef572e2c37e879b065c3b406d75e8fd", "http_multi_server_tag" : "2.0.5", "http_parser_tag" : "3.1.3", "http_retry_tag": "0.1.1", diff --git a/runtime/lib/typed_data_patch.dart b/runtime/lib/typed_data_patch.dart index 7c563c4c516..f79cf3e9018 100644 --- a/runtime/lib/typed_data_patch.dart +++ b/runtime/lib/typed_data_patch.dart @@ -111,12 +111,13 @@ abstract class _TypedListBase { int startFromInBytes, int toCid, int fromCid) native "TypedData_setRange"; } -abstract class _IntListMixin implements List { +abstract class _IntListMixin> + implements List { int get elementSizeInBytes; int get offsetInBytes; _ByteBuffer get buffer; - List _createList(int length); + SpawnedType _createList(int length); Iterable whereType() => new WhereTypeIterable(this); @@ -441,10 +442,10 @@ abstract class _IntListMixin implements List { throw IterableElementError.tooMany(); } - List sublist(int start, [int end]) { + SpawnedType sublist(int start, [int end]) { end = RangeError.checkValidRange(start, end, this.length); var length = end - start; - List result = _createList(length); + SpawnedType result = _createList(length); result.setRange(0, length, this, start); return result; } @@ -462,12 +463,13 @@ abstract class _IntListMixin implements List { } } -abstract class _DoubleListMixin implements List { +abstract class _DoubleListMixin> + implements List { int get elementSizeInBytes; int get offsetInBytes; _ByteBuffer get buffer; - List _createList(int length); + SpawnedType _createList(int length); Iterable whereType() => new WhereTypeIterable(this); @@ -795,10 +797,10 @@ abstract class _DoubleListMixin implements List { throw IterableElementError.tooMany(); } - List sublist(int start, [int end]) { + SpawnedType sublist(int start, [int end]) { end = RangeError.checkValidRange(start, end, this.length); var length = end - start; - List result = _createList(length); + SpawnedType result = _createList(length); result.setRange(0, length, this, start); return result; } @@ -821,7 +823,7 @@ abstract class _Float32x4ListMixin implements List { int get offsetInBytes; _ByteBuffer get buffer; - List _createList(int length); + Float32x4List _createList(int length); Iterable whereType() => new WhereTypeIterable(this); @@ -1153,10 +1155,10 @@ abstract class _Float32x4ListMixin implements List { throw IterableElementError.tooMany(); } - List sublist(int start, [int end]) { + Float32x4List sublist(int start, [int end]) { end = RangeError.checkValidRange(start, end, this.length); var length = end - start; - List result = _createList(length); + Float32x4List result = _createList(length); result.setRange(0, length, this, start); return result; } @@ -1179,7 +1181,7 @@ abstract class _Int32x4ListMixin implements List { int get offsetInBytes; _ByteBuffer get buffer; - List _createList(int length); + Int32x4List _createList(int length); Iterable whereType() => new WhereTypeIterable(this); @@ -1510,10 +1512,10 @@ abstract class _Int32x4ListMixin implements List { throw IterableElementError.tooMany(); } - List sublist(int start, [int end]) { + Int32x4List sublist(int start, [int end]) { end = RangeError.checkValidRange(start, end, this.length); var length = end - start; - List result = _createList(length); + Int32x4List result = _createList(length); result.setRange(0, length, this, start); return result; } @@ -1536,7 +1538,7 @@ abstract class _Float64x2ListMixin implements List { int get offsetInBytes; _ByteBuffer get buffer; - List _createList(int length); + Float64x2List _createList(int length); Iterable whereType() => new WhereTypeIterable(this); @@ -1868,10 +1870,10 @@ abstract class _Float64x2ListMixin implements List { throw IterableElementError.tooMany(); } - List sublist(int start, [int end]) { + Float64x2List sublist(int start, [int end]) { end = RangeError.checkValidRange(start, end, this.length); var length = end - start; - List result = _createList(length); + Float64x2List result = _createList(length); result.setRange(0, length, this, start); return result; } @@ -2138,7 +2140,9 @@ class Int8List { } @pragma("vm:entry-point") -class _Int8List extends _TypedList with _IntListMixin implements Int8List { +class _Int8List extends _TypedList + with _IntListMixin + implements Int8List { factory _Int8List._uninstantiable() { throw "Unreachable"; } @@ -2184,7 +2188,9 @@ class Uint8List { } @pragma("vm:entry-point") -class _Uint8List extends _TypedList with _IntListMixin implements Uint8List { +class _Uint8List extends _TypedList + with _IntListMixin + implements Uint8List { factory _Uint8List._uninstantiable() { throw "Unreachable"; } @@ -2231,7 +2237,7 @@ class Uint8ClampedList { @pragma("vm:entry-point") class _Uint8ClampedList extends _TypedList - with _IntListMixin + with _IntListMixin implements Uint8ClampedList { factory _Uint8ClampedList._uninstantiable() { throw "Unreachable"; @@ -2278,7 +2284,9 @@ class Int16List { } @pragma("vm:entry-point") -class _Int16List extends _TypedList with _IntListMixin implements Int16List { +class _Int16List extends _TypedList + with _IntListMixin + implements Int16List { factory _Int16List._uninstantiable() { throw "Unreachable"; } @@ -2343,7 +2351,9 @@ class Uint16List { } @pragma("vm:entry-point") -class _Uint16List extends _TypedList with _IntListMixin implements Uint16List { +class _Uint16List extends _TypedList + with _IntListMixin + implements Uint16List { factory _Uint16List._uninstantiable() { throw "Unreachable"; } @@ -2408,7 +2418,9 @@ class Int32List { } @pragma("vm:entry-point") -class _Int32List extends _TypedList with _IntListMixin implements Int32List { +class _Int32List extends _TypedList + with _IntListMixin + implements Int32List { factory _Int32List._uninstantiable() { throw "Unreachable"; } @@ -2461,7 +2473,9 @@ class Uint32List { } @pragma("vm:entry-point") -class _Uint32List extends _TypedList with _IntListMixin implements Uint32List { +class _Uint32List extends _TypedList + with _IntListMixin + implements Uint32List { factory _Uint32List._uninstantiable() { throw "Unreachable"; } @@ -2514,7 +2528,9 @@ class Int64List { } @pragma("vm:entry-point") -class _Int64List extends _TypedList with _IntListMixin implements Int64List { +class _Int64List extends _TypedList + with _IntListMixin + implements Int64List { factory _Int64List._uninstantiable() { throw "Unreachable"; } @@ -2567,7 +2583,9 @@ class Uint64List { } @pragma("vm:entry-point") -class _Uint64List extends _TypedList with _IntListMixin implements Uint64List { +class _Uint64List extends _TypedList + with _IntListMixin + implements Uint64List { factory _Uint64List._uninstantiable() { throw "Unreachable"; } @@ -2621,7 +2639,7 @@ class Float32List { @pragma("vm:entry-point") class _Float32List extends _TypedList - with _DoubleListMixin + with _DoubleListMixin implements Float32List { factory _Float32List._uninstantiable() { throw "Unreachable"; @@ -2677,7 +2695,7 @@ class Float64List { @pragma("vm:entry-point") class _Float64List extends _TypedList - with _DoubleListMixin + with _DoubleListMixin implements Float64List { factory _Float64List._uninstantiable() { throw "Unreachable"; @@ -2885,7 +2903,7 @@ class _Float64x2List extends _TypedList @pragma("vm:entry-point") class _ExternalInt8Array extends _TypedList - with _IntListMixin + with _IntListMixin implements Int8List { factory _ExternalInt8Array._uninstantiable() { throw "Unreachable"; @@ -2919,7 +2937,7 @@ class _ExternalInt8Array extends _TypedList @pragma("vm:entry-point") class _ExternalUint8Array extends _TypedList - with _IntListMixin + with _IntListMixin implements Uint8List { factory _ExternalUint8Array._uninstantiable() { throw "Unreachable"; @@ -2954,7 +2972,7 @@ class _ExternalUint8Array extends _TypedList @pragma("vm:entry-point") class _ExternalUint8ClampedArray extends _TypedList - with _IntListMixin + with _IntListMixin implements Uint8ClampedList { factory _ExternalUint8ClampedArray._uninstantiable() { throw "Unreachable"; @@ -2989,7 +3007,7 @@ class _ExternalUint8ClampedArray extends _TypedList @pragma("vm:entry-point") class _ExternalInt16Array extends _TypedList - with _IntListMixin + with _IntListMixin implements Int16List { factory _ExternalInt16Array._uninstantiable() { throw "Unreachable"; @@ -3031,7 +3049,7 @@ class _ExternalInt16Array extends _TypedList @pragma("vm:entry-point") class _ExternalUint16Array extends _TypedList - with _IntListMixin + with _IntListMixin implements Uint16List { factory _ExternalUint16Array._uninstantiable() { throw "Unreachable"; @@ -3073,7 +3091,7 @@ class _ExternalUint16Array extends _TypedList @pragma("vm:entry-point") class _ExternalInt32Array extends _TypedList - with _IntListMixin + with _IntListMixin implements Int32List { factory _ExternalInt32Array._uninstantiable() { throw "Unreachable"; @@ -3115,7 +3133,7 @@ class _ExternalInt32Array extends _TypedList @pragma("vm:entry-point") class _ExternalUint32Array extends _TypedList - with _IntListMixin + with _IntListMixin implements Uint32List { factory _ExternalUint32Array._uninstantiable() { throw "Unreachable"; @@ -3157,7 +3175,7 @@ class _ExternalUint32Array extends _TypedList @pragma("vm:entry-point") class _ExternalInt64Array extends _TypedList - with _IntListMixin + with _IntListMixin implements Int64List { factory _ExternalInt64Array._uninstantiable() { throw "Unreachable"; @@ -3199,7 +3217,7 @@ class _ExternalInt64Array extends _TypedList @pragma("vm:entry-point") class _ExternalUint64Array extends _TypedList - with _IntListMixin + with _IntListMixin implements Uint64List { factory _ExternalUint64Array._uninstantiable() { throw "Unreachable"; @@ -3241,7 +3259,7 @@ class _ExternalUint64Array extends _TypedList @pragma("vm:entry-point") class _ExternalFloat32Array extends _TypedList - with _DoubleListMixin + with _DoubleListMixin implements Float32List { factory _ExternalFloat32Array._uninstantiable() { throw "Unreachable"; @@ -3283,7 +3301,7 @@ class _ExternalFloat32Array extends _TypedList @pragma("vm:entry-point") class _ExternalFloat64Array extends _TypedList - with _DoubleListMixin + with _DoubleListMixin implements Float64List { factory _ExternalFloat64Array._uninstantiable() { throw "Unreachable"; @@ -3698,7 +3716,7 @@ abstract class _TypedListView extends _TypedListBase implements TypedData { @pragma("vm:entry-point") class _Int8ArrayView extends _TypedListView - with _IntListMixin + with _IntListMixin implements Int8List { // Constructor. @pragma("vm:exact-result-type", _Int8ArrayView) @@ -3735,7 +3753,7 @@ class _Int8ArrayView extends _TypedListView @pragma("vm:entry-point") class _Uint8ArrayView extends _TypedListView - with _IntListMixin + with _IntListMixin implements Uint8List { // Constructor. @pragma("vm:exact-result-type", _Uint8ArrayView) @@ -3772,7 +3790,7 @@ class _Uint8ArrayView extends _TypedListView @pragma("vm:entry-point") class _Uint8ClampedArrayView extends _TypedListView - with _IntListMixin + with _IntListMixin implements Uint8ClampedList { // Constructor. @pragma("vm:exact-result-type", _Uint8ClampedArrayView) @@ -3809,7 +3827,7 @@ class _Uint8ClampedArrayView extends _TypedListView @pragma("vm:entry-point") class _Int16ArrayView extends _TypedListView - with _IntListMixin + with _IntListMixin implements Int16List { // Constructor. @pragma("vm:exact-result-type", _Int16ArrayView) @@ -3858,7 +3876,7 @@ class _Int16ArrayView extends _TypedListView @pragma("vm:entry-point") class _Uint16ArrayView extends _TypedListView - with _IntListMixin + with _IntListMixin implements Uint16List { // Constructor. @pragma("vm:exact-result-type", _Uint16ArrayView) @@ -3908,7 +3926,7 @@ class _Uint16ArrayView extends _TypedListView @pragma("vm:entry-point") class _Int32ArrayView extends _TypedListView - with _IntListMixin + with _IntListMixin implements Int32List { // Constructor. @pragma("vm:exact-result-type", _Int32ArrayView) @@ -3945,7 +3963,7 @@ class _Int32ArrayView extends _TypedListView @pragma("vm:entry-point") class _Uint32ArrayView extends _TypedListView - with _IntListMixin + with _IntListMixin implements Uint32List { // Constructor. @pragma("vm:exact-result-type", _Uint32ArrayView) @@ -3982,7 +4000,7 @@ class _Uint32ArrayView extends _TypedListView @pragma("vm:entry-point") class _Int64ArrayView extends _TypedListView - with _IntListMixin + with _IntListMixin implements Int64List { // Constructor. @pragma("vm:exact-result-type", _Int64ArrayView) @@ -4019,7 +4037,7 @@ class _Int64ArrayView extends _TypedListView @pragma("vm:entry-point") class _Uint64ArrayView extends _TypedListView - with _IntListMixin + with _IntListMixin implements Uint64List { // Constructor. @pragma("vm:exact-result-type", _Uint64ArrayView) @@ -4056,7 +4074,7 @@ class _Uint64ArrayView extends _TypedListView @pragma("vm:entry-point") class _Float32ArrayView extends _TypedListView - with _DoubleListMixin + with _DoubleListMixin implements Float32List { // Constructor. @pragma("vm:exact-result-type", _Float32ArrayView) @@ -4093,7 +4111,7 @@ class _Float32ArrayView extends _TypedListView @pragma("vm:entry-point") class _Float64ArrayView extends _TypedListView - with _DoubleListMixin + with _DoubleListMixin implements Float64List { // Constructor. @pragma("vm:exact-result-type", _Float64ArrayView) diff --git a/sdk/lib/_http/http_impl.dart b/sdk/lib/_http/http_impl.dart index 497516c86e9..5c39ad4036b 100644 --- a/sdk/lib/_http/http_impl.dart +++ b/sdk/lib/_http/http_impl.dart @@ -85,14 +85,14 @@ class _CopyingBytesBuilder implements BytesBuilder { _buffer = newBuffer; } - List takeBytes() { + Uint8List takeBytes() { if (_length == 0) return _emptyList; var buffer = new Uint8List.view(_buffer.buffer, 0, _length); clear(); return buffer; } - List toBytes() { + Uint8List toBytes() { if (_length == 0) return _emptyList; return new Uint8List.fromList( new Uint8List.view(_buffer.buffer, 0, _length)); diff --git a/sdk/lib/_internal/js_dev_runtime/private/native_typed_data.dart b/sdk/lib/_internal/js_dev_runtime/private/native_typed_data.dart index 4bc3ff5076a..5947ad11c65 100644 --- a/sdk/lib/_internal/js_dev_runtime/private/native_typed_data.dart +++ b/sdk/lib/_internal/js_dev_runtime/private/native_typed_data.dart @@ -171,7 +171,7 @@ class NativeFloat32x4List extends Object _storage[(index * 4) + 3] = value.w; } - List sublist(int start, [int end]) { + Float32x4List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); return NativeFloat32x4List._externalStorage( _storage.sublist(start * 4, end * 4)); @@ -249,7 +249,7 @@ class NativeInt32x4List extends Object _storage[(index * 4) + 3] = value.w; } - List sublist(int start, [int end]) { + Int32x4List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); return NativeInt32x4List._externalStorage( _storage.sublist(start * 4, end * 4)); @@ -321,7 +321,7 @@ class NativeFloat64x2List extends Object _storage[(index * 2) + 1] = value.y; } - List sublist(int start, [int end]) { + Float64x2List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); return NativeFloat64x2List._externalStorage( _storage.sublist(start * 2, end * 2)); @@ -831,7 +831,7 @@ class NativeFloat32List extends NativeTypedArrayOfDouble Type get runtimeType => Float32List; - List sublist(int start, [int end]) { + Float32List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeFloat32List', '#.subarray(#, #)', this, start, end); return _create1(source); @@ -865,7 +865,7 @@ class NativeFloat64List extends NativeTypedArrayOfDouble Type get runtimeType => Float64List; - List sublist(int start, [int end]) { + Float64List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeFloat64List', '#.subarray(#, #)', this, start, end); return _create1(source); @@ -903,7 +903,7 @@ class NativeInt16List extends NativeTypedArrayOfInt implements Int16List { return JS('int', '#[#]', this, index); } - List sublist(int start, [int end]) { + Int16List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeInt16List', '#.subarray(#, #)', this, start, end); return _create1(source); @@ -941,7 +941,7 @@ class NativeInt32List extends NativeTypedArrayOfInt implements Int32List { return JS('int', '#[#]', this, index); } - List sublist(int start, [int end]) { + Int32List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeInt32List', '#.subarray(#, #)', this, start, end); return _create1(source); @@ -979,7 +979,7 @@ class NativeInt8List extends NativeTypedArrayOfInt implements Int8List { return JS('int', '#[#]', this, index); } - List sublist(int start, [int end]) { + Int8List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeInt8List', '#.subarray(#, #)', this, start, end); return _create1(source); @@ -1017,7 +1017,7 @@ class NativeUint16List extends NativeTypedArrayOfInt implements Uint16List { return JS('int', '#[#]', this, index); } - List sublist(int start, [int end]) { + Uint16List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeUint16List', '#.subarray(#, #)', this, start, end); return _create1(source); @@ -1055,7 +1055,7 @@ class NativeUint32List extends NativeTypedArrayOfInt implements Uint32List { return JS('int', '#[#]', this, index); } - List sublist(int start, [int end]) { + Uint32List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeUint32List', '#.subarray(#, #)', this, start, end); return _create1(source); @@ -1096,7 +1096,7 @@ class NativeUint8ClampedList extends NativeTypedArrayOfInt return JS('int', '#[#]', this, index); } - List sublist(int start, [int end]) { + Uint8ClampedList sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeUint8ClampedList', '#.subarray(#, #)', this, start, end); @@ -1145,7 +1145,7 @@ class NativeUint8List extends NativeTypedArrayOfInt implements Uint8List { return JS('int', '#[#]', this, index); } - List sublist(int start, [int end]) { + Uint8List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeUint8List', '#.subarray(#, #)', this, start, end); return _create1(source); diff --git a/sdk/lib/_internal/js_runtime/lib/native_typed_data.dart b/sdk/lib/_internal/js_runtime/lib/native_typed_data.dart index 9fa90706333..0a91641fff1 100644 --- a/sdk/lib/_internal/js_runtime/lib/native_typed_data.dart +++ b/sdk/lib/_internal/js_runtime/lib/native_typed_data.dart @@ -163,7 +163,7 @@ class NativeFloat32x4List extends Object _storage[(index * 4) + 3] = value.w; } - List sublist(int start, [int end]) { + Float32x4List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); return new NativeFloat32x4List._externalStorage( _storage.sublist(start * 4, end * 4)); @@ -235,7 +235,7 @@ class NativeInt32x4List extends Object _storage[(index * 4) + 3] = value.w; } - List sublist(int start, [int end]) { + Int32x4List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); return new NativeInt32x4List._externalStorage( _storage.sublist(start * 4, end * 4)); @@ -302,7 +302,7 @@ class NativeFloat64x2List extends Object _storage[(index * 2) + 1] = value.y; } - List sublist(int start, [int end]) { + Float64x2List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); return new NativeFloat64x2List._externalStorage( _storage.sublist(start * 2, end * 2)); @@ -757,7 +757,7 @@ class NativeFloat32List extends NativeTypedArrayOfDouble Type get runtimeType => Float32List; - List sublist(int start, [int end]) { + Float32List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeFloat32List', '#.subarray(#, #)', this, start, end); return _create1(source); @@ -791,7 +791,7 @@ class NativeFloat64List extends NativeTypedArrayOfDouble Type get runtimeType => Float64List; - List sublist(int start, [int end]) { + Float64List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeFloat64List', '#.subarray(#, #)', this, start, end); return _create1(source); @@ -829,7 +829,7 @@ class NativeInt16List extends NativeTypedArrayOfInt implements Int16List { return JS('int', '#[#]', this, index); } - List sublist(int start, [int end]) { + Int16List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeInt16List', '#.subarray(#, #)', this, start, end); return _create1(source); @@ -867,7 +867,7 @@ class NativeInt32List extends NativeTypedArrayOfInt implements Int32List { return JS('int', '#[#]', this, index); } - List sublist(int start, [int end]) { + Int32List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeInt32List', '#.subarray(#, #)', this, start, end); return _create1(source); @@ -905,7 +905,7 @@ class NativeInt8List extends NativeTypedArrayOfInt implements Int8List { return JS('int', '#[#]', this, index); } - List sublist(int start, [int end]) { + Int8List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeInt8List', '#.subarray(#, #)', this, start, end); return _create1(source); @@ -943,7 +943,7 @@ class NativeUint16List extends NativeTypedArrayOfInt implements Uint16List { return JS('JSUInt31', '#[#]', this, index); } - List sublist(int start, [int end]) { + Uint16List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeUint16List', '#.subarray(#, #)', this, start, end); return _create1(source); @@ -981,7 +981,7 @@ class NativeUint32List extends NativeTypedArrayOfInt implements Uint32List { return JS('JSUInt32', '#[#]', this, index); } - List sublist(int start, [int end]) { + Uint32List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeUint32List', '#.subarray(#, #)', this, start, end); return _create1(source); @@ -1022,7 +1022,7 @@ class NativeUint8ClampedList extends NativeTypedArrayOfInt return JS('JSUInt31', '#[#]', this, index); } - List sublist(int start, [int end]) { + Uint8ClampedList sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeUint8ClampedList', '#.subarray(#, #)', this, start, end); @@ -1071,7 +1071,7 @@ class NativeUint8List extends NativeTypedArrayOfInt implements Uint8List { return JS('JSUInt31', '#[#]', this, index); } - List sublist(int start, [int end]) { + Uint8List sublist(int start, [int end]) { end = _checkValidRange(start, end, this.length); var source = JS('NativeUint8List', '#.subarray(#, #)', this, start, end); return _create1(source); diff --git a/sdk/lib/convert/utf.dart b/sdk/lib/convert/utf.dart index 66c9cac3076..39eb135db84 100644 --- a/sdk/lib/convert/utf.dart +++ b/sdk/lib/convert/utf.dart @@ -75,7 +75,7 @@ class Utf8Encoder extends Converter> { /// /// If [start] and [end] are provided, only the substring /// `string.substring(start, end)` is converted. - List convert(String string, [int start = 0, int end]) { + Uint8List convert(String string, [int start = 0, int end]) { var stringLength = string.length; end = RangeError.checkValidRange(start, end, stringLength); var length = end - start; @@ -117,7 +117,7 @@ class Utf8Encoder extends Converter> { class _Utf8Encoder { int _carry = 0; int _bufferIndex = 0; - final List _buffer; + final Uint8List _buffer; static const _DEFAULT_BYTE_BUFFER_SIZE = 1024; @@ -127,7 +127,7 @@ class _Utf8Encoder { : _buffer = _createBuffer(bufferSize); /// Allow an implementation to pick the most efficient way of storing bytes. - static List _createBuffer(int size) => Uint8List(size); + static Uint8List _createBuffer(int size) => Uint8List(size); /// Tries to combine the given [leadingSurrogate] with the [nextCodeUnit] and /// writes it to [_buffer]. diff --git a/sdk/lib/io/bytes_builder.dart b/sdk/lib/io/bytes_builder.dart index 3962037db7d..9113d44cc57 100644 --- a/sdk/lib/io/bytes_builder.dart +++ b/sdk/lib/io/bytes_builder.dart @@ -48,14 +48,14 @@ abstract class BytesBuilder { * The list returned is a view of the internal buffer, limited to the * [length]. */ - List takeBytes(); + Uint8List takeBytes(); /** * Returns a copy of the current contents of the builder. * * Leaves the contents of the builder intact. */ - List toBytes(); + Uint8List toBytes(); /** * The number of bytes in the builder. @@ -82,6 +82,7 @@ class _CopyingBytesBuilder implements BytesBuilder { // Start with 1024 bytes. static const int _initSize = 1024; + // Safe for reuse because a fixed-length empty list is immutable. static final _emptyList = new Uint8List(0); int _length = 0; @@ -135,14 +136,14 @@ class _CopyingBytesBuilder implements BytesBuilder { _buffer = newBuffer; } - List takeBytes() { + Uint8List takeBytes() { if (_length == 0) return _emptyList; var buffer = new Uint8List.view(_buffer.buffer, 0, _length); clear(); return buffer; } - List toBytes() { + Uint8List toBytes() { if (_length == 0) return _emptyList; return new Uint8List.fromList( new Uint8List.view(_buffer.buffer, 0, _length)); @@ -191,7 +192,7 @@ class _BytesBuilder implements BytesBuilder { _length++; } - List takeBytes() { + Uint8List takeBytes() { if (_length == 0) return _CopyingBytesBuilder._emptyList; if (_chunks.length == 1) { var buffer = _chunks[0]; @@ -208,7 +209,7 @@ class _BytesBuilder implements BytesBuilder { return buffer; } - List toBytes() { + Uint8List toBytes() { if (_length == 0) return _CopyingBytesBuilder._emptyList; var buffer = new Uint8List(_length); int offset = 0; diff --git a/sdk/lib/io/file.dart b/sdk/lib/io/file.dart index eb3db4c7106..861ce47c3db 100644 --- a/sdk/lib/io/file.dart +++ b/sdk/lib/io/file.dart @@ -505,17 +505,17 @@ abstract class File implements FileSystemEntity { /** * Read the entire file contents as a list of bytes. Returns a - * `Future>` that completes with the list of bytes that + * `Future` that completes with the list of bytes that * is the contents of the file. */ - Future> readAsBytes(); + Future readAsBytes(); /** * Synchronously read the entire file contents as a list of bytes. * * Throws a [FileSystemException] if the operation fails. */ - List readAsBytesSync(); + Uint8List readAsBytesSync(); /** * Read the entire file contents as a string using the given @@ -682,7 +682,7 @@ abstract class RandomAccessFile { /** * Reads [bytes] bytes from a file and returns the result as a list of bytes. */ - Future> read(int bytes); + Future read(int bytes); /** * Synchronously reads a maximum of [bytes] bytes from a file and @@ -690,7 +690,7 @@ abstract class RandomAccessFile { * * Throws a [FileSystemException] if the operation fails. */ - List readSync(int bytes); + Uint8List readSync(int bytes); /** * Reads into an existing [List] from the file. If [start] is present, diff --git a/sdk/lib/io/file_impl.dart b/sdk/lib/io/file_impl.dart index 33c13521843..68d8b1b9f38 100644 --- a/sdk/lib/io/file_impl.dart +++ b/sdk/lib/io/file_impl.dart @@ -513,10 +513,10 @@ class _File extends FileSystemEntity implements File { return new IOSink(consumer, encoding: encoding); } - Future> readAsBytes() { - Future> readDataChunked(RandomAccessFile file) { + Future readAsBytes() { + Future readDataChunked(RandomAccessFile file) { var builder = new BytesBuilder(copy: false); - var completer = new Completer>(); + var completer = new Completer(); void read() { file.read(_blockSize).then((data) { if (data.length > 0) { @@ -543,10 +543,10 @@ class _File extends FileSystemEntity implements File { }); } - List readAsBytesSync() { + Uint8List readAsBytesSync() { var opened = openSync(); try { - List data; + Uint8List data; var length = opened.lengthSync(); if (length == 0) { // May be character device, try to read it in chunks. @@ -741,19 +741,19 @@ class _RandomAccessFile implements RandomAccessFile { return result; } - Future> read(int bytes) { + Future read(int bytes) { ArgumentError.checkNotNull(bytes, 'bytes'); return _dispatch(_IOService.fileRead, [null, bytes]).then((response) { if (_isErrorResponse(response)) { throw _exceptionFromResponse(response, "read failed", path); } _resourceInfo.addRead(response[1].length); - List result = response[1]; + Uint8List result = response[1]; return result; }); } - List readSync(int bytes) { + Uint8List readSync(int bytes) { _checkAvailable(); ArgumentError.checkNotNull(bytes, 'bytes'); var result = _ops.read(bytes); diff --git a/sdk/lib/typed_data/typed_data.dart b/sdk/lib/typed_data/typed_data.dart index 62e7ee8da60..89c9496cd73 100644 --- a/sdk/lib/typed_data/typed_data.dart +++ b/sdk/lib/typed_data/typed_data.dart @@ -772,6 +772,31 @@ abstract class Int8List implements List, _TypedIntList { return buffer.asInt8List(offsetInBytes, length); } + /** + * Returns a new list containing the elements between [start] and [end]. + * + * The new list is an `Int8List` containing the elements of this list at + * positions greater than or equal to [start] and less than [end] in the same + * order as they occur in this list. + * + * ```dart + * var numbers = Int8List.fromList([0, 1, 2, 3, 4]); + * print(numbers.sublist(1, 3)); // [1, 2] + * print(numbers.sublist(1, 3).runtimeType); // Int8List + * ``` + * + * If [end] is omitted, it defaults to the [length] of this list. + * + * ```dart + * print(numbers.sublist(1)); // [1, 2, 3, 4] + * ``` + * + * The `start` and `end` positions must satisfy the relations + * 0 ≤ `start` ≤ `end` ≤ `this.length` + * If `end` is equal to `start`, then the returned list is empty. + */ + Int8List sublist(int start, [int end]); + static const int bytesPerElement = 1; } @@ -829,6 +854,31 @@ abstract class Uint8List implements List, _TypedIntList { */ List operator +(List other); + /** + * Returns a new list containing the elements between [start] and [end]. + * + * The new list is a `Uint8List` containing the elements of this list at + * positions greater than or equal to [start] and less than [end] in the same + * order as they occur in this list. + * + * ```dart + * var numbers = Uint8List.fromList([0, 1, 2, 3, 4]); + * print(numbers.sublist(1, 3)); // [1, 2] + * print(numbers.sublist(1, 3).runtimeType); // Uint8List + * ``` + * + * If [end] is omitted, it defaults to the [length] of this list. + * + * ```dart + * print(numbers.sublist(1)); // [1, 2, 3, 4] + * ``` + * + * The `start` and `end` positions must satisfy the relations + * 0 ≤ `start` ≤ `end` ≤ `this.length` + * If `end` is equal to `start`, then the returned list is empty. + */ + Uint8List sublist(int start, [int end]); + static const int bytesPerElement = 1; } @@ -878,6 +928,31 @@ abstract class Uint8ClampedList implements List, _TypedIntList { return buffer.asUint8ClampedList(offsetInBytes, length); } + /** + * Returns a new list containing the elements between [start] and [end]. + * + * The new list is a `Uint8ClampedList` containing the elements of this + * list at positions greater than or equal to [start] and less than [end] in + * the same order as they occur in this list. + * + * ```dart + * var numbers = Uint8ClampedList.fromList([0, 1, 2, 3, 4]); + * print(numbers.sublist(1, 3)); // [1, 2] + * print(numbers.sublist(1, 3).runtimeType); // Uint8ClampedList + * ``` + * + * If [end] is omitted, it defaults to the [length] of this list. + * + * ```dart + * print(numbers.sublist(1)); // [1, 2, 3, 4] + * ``` + * + * The `start` and `end` positions must satisfy the relations + * 0 ≤ `start` ≤ `end` ≤ `this.length` + * If `end` is equal to `start`, then the returned list is empty. + */ + Uint8ClampedList sublist(int start, [int end]); + static const int bytesPerElement = 1; } @@ -930,6 +1005,31 @@ abstract class Int16List implements List, _TypedIntList { return buffer.asInt16List(offsetInBytes, length); } + /** + * Returns a new list containing the elements between [start] and [end]. + * + * The new list is an `Int16List` containing the elements of this + * list at positions greater than or equal to [start] and less than [end] in + * the same order as they occur in this list. + * + * ```dart + * var numbers = Int16List.fromList([0, 1, 2, 3, 4]); + * print(numbers.sublist(1, 3)); // [1, 2] + * print(numbers.sublist(1, 3).runtimeType); // Int16List + * ``` + * + * If [end] is omitted, it defaults to the [length] of this list. + * + * ```dart + * print(numbers.sublist(1)); // [1, 2, 3, 4] + * ``` + * + * The `start` and `end` positions must satisfy the relations + * 0 ≤ `start` ≤ `end` ≤ `this.length` + * If `end` is equal to `start`, then the returned list is empty. + */ + Int16List sublist(int start, [int end]); + static const int bytesPerElement = 2; } @@ -983,6 +1083,31 @@ abstract class Uint16List implements List, _TypedIntList { return buffer.asUint16List(offsetInBytes, length); } + /** + * Returns a new list containing the elements between [start] and [end]. + * + * The new list is a `Uint16List` containing the elements of this + * list at positions greater than or equal to [start] and less than [end] in + * the same order as they occur in this list. + * + * ```dart + * var numbers = Uint16List.fromList([0, 1, 2, 3, 4]); + * print(numbers.sublist(1, 3)); // [1, 2] + * print(numbers.sublist(1, 3).runtimeType); // Uint16List + * ``` + * + * If [end] is omitted, it defaults to the [length] of this list. + * + * ```dart + * print(numbers.sublist(1)); // [1, 2, 3, 4] + * ``` + * + * The `start` and `end` positions must satisfy the relations + * 0 ≤ `start` ≤ `end` ≤ `this.length` + * If `end` is equal to `start`, then the returned list is empty. + */ + Uint16List sublist(int start, [int end]); + static const int bytesPerElement = 2; } @@ -1035,6 +1160,31 @@ abstract class Int32List implements List, _TypedIntList { return buffer.asInt32List(offsetInBytes, length); } + /** + * Returns a new list containing the elements between [start] and [end]. + * + * The new list is an `Int32List` containing the elements of this + * list at positions greater than or equal to [start] and less than [end] in + * the same order as they occur in this list. + * + * ```dart + * var numbers = Int32List.fromList([0, 1, 2, 3, 4]); + * print(numbers.sublist(1, 3)); // [1, 2] + * print(numbers.sublist(1, 3).runtimeType); // Int32List + * ``` + * + * If [end] is omitted, it defaults to the [length] of this list. + * + * ```dart + * print(numbers.sublist(1)); // [1, 2, 3, 4] + * ``` + * + * The `start` and `end` positions must satisfy the relations + * 0 ≤ `start` ≤ `end` ≤ `this.length` + * If `end` is equal to `start`, then the returned list is empty. + */ + Int32List sublist(int start, [int end]); + static const int bytesPerElement = 4; } @@ -1088,6 +1238,31 @@ abstract class Uint32List implements List, _TypedIntList { return buffer.asUint32List(offsetInBytes, length); } + /** + * Returns a new list containing the elements between [start] and [end]. + * + * The new list is a `Uint32List` containing the elements of this + * list at positions greater than or equal to [start] and less than [end] in + * the same order as they occur in this list. + * + * ```dart + * var numbers = Uint32List.fromList([0, 1, 2, 3, 4]); + * print(numbers.sublist(1, 3)); // [1, 2] + * print(numbers.sublist(1, 3).runtimeType); // Uint32List + * ``` + * + * If [end] is omitted, it defaults to the [length] of this list. + * + * ```dart + * print(numbers.sublist(1)); // [1, 2, 3, 4] + * ``` + * + * The `start` and `end` positions must satisfy the relations + * 0 ≤ `start` ≤ `end` ≤ `this.length` + * If `end` is equal to `start`, then the returned list is empty. + */ + Uint32List sublist(int start, [int end]); + static const int bytesPerElement = 4; } @@ -1140,6 +1315,31 @@ abstract class Int64List implements List, _TypedIntList { return buffer.asInt64List(offsetInBytes, length); } + /** + * Returns a new list containing the elements between [start] and [end]. + * + * The new list is an `Int64List` containing the elements of this + * list at positions greater than or equal to [start] and less than [end] in + * the same order as they occur in this list. + * + * ```dart + * var numbers = Int64List.fromList([0, 1, 2, 3, 4]); + * print(numbers.sublist(1, 3)); // [1, 2] + * print(numbers.sublist(1, 3).runtimeType); // Int64List + * ``` + * + * If [end] is omitted, it defaults to the [length] of this list. + * + * ```dart + * print(numbers.sublist(1)); // [1, 2, 3, 4] + * ``` + * + * The `start` and `end` positions must satisfy the relations + * 0 ≤ `start` ≤ `end` ≤ `this.length` + * If `end` is equal to `start`, then the returned list is empty. + */ + Int64List sublist(int start, [int end]); + static const int bytesPerElement = 8; } @@ -1193,6 +1393,31 @@ abstract class Uint64List implements List, _TypedIntList { return buffer.asUint64List(offsetInBytes, length); } + /** + * Returns a new list containing the elements between [start] and [end]. + * + * The new list is a `Uint64List` containing the elements of this + * list at positions greater than or equal to [start] and less than [end] in + * the same order as they occur in this list. + * + * ```dart + * var numbers = Uint64List.fromList([0, 1, 2, 3, 4]); + * print(numbers.sublist(1, 3)); // [1, 2] + * print(numbers.sublist(1, 3).runtimeType); // Uint64List + * ``` + * + * If [end] is omitted, it defaults to the [length] of this list. + * + * ```dart + * print(numbers.sublist(1)); // [1, 2, 3, 4] + * ``` + * + * The `start` and `end` positions must satisfy the relations + * 0 ≤ `start` ≤ `end` ≤ `this.length` + * If `end` is equal to `start`, then the returned list is empty. + */ + Uint64List sublist(int start, [int end]); + static const int bytesPerElement = 8; } @@ -1246,6 +1471,31 @@ abstract class Float32List implements List, _TypedFloatList { return buffer.asFloat32List(offsetInBytes, length); } + /** + * Returns a new list containing the elements between [start] and [end]. + * + * The new list is a `Float32List` containing the elements of this + * list at positions greater than or equal to [start] and less than [end] in + * the same order as they occur in this list. + * + * ```dart + * var numbers = Float32List.fromList([0, 1, 2, 3, 4]); + * print(numbers.sublist(1, 3)); // [1, 2] + * print(numbers.sublist(1, 3).runtimeType); // Float32List + * ``` + * + * If [end] is omitted, it defaults to the [length] of this list. + * + * ```dart + * print(numbers.sublist(1)); // [1, 2, 3, 4] + * ``` + * + * The `start` and `end` positions must satisfy the relations + * 0 ≤ `start` ≤ `end` ≤ `this.length` + * If `end` is equal to `start`, then the returned list is empty. + */ + Float32List sublist(int start, [int end]); + static const int bytesPerElement = 4; } @@ -1292,6 +1542,31 @@ abstract class Float64List implements List, _TypedFloatList { return buffer.asFloat64List(offsetInBytes, length); } + /** + * Returns a new list containing the elements between [start] and [end]. + * + * The new list is a `Float64List` containing the elements of this + * list at positions greater than or equal to [start] and less than [end] in + * the same order as they occur in this list. + * + * ```dart + * var numbers = Float64List.fromList([0, 1, 2, 3, 4]); + * print(numbers.sublist(1, 3)); // [1, 2] + * print(numbers.sublist(1, 3).runtimeType); // Float64List + * ``` + * + * If [end] is omitted, it defaults to the [length] of this list. + * + * ```dart + * print(numbers.sublist(1)); // [1, 2, 3, 4] + * ``` + * + * The `start` and `end` positions must satisfy the relations + * 0 ≤ `start` ≤ `end` ≤ `this.length` + * If `end` is equal to `start`, then the returned list is empty. + */ + Float64List sublist(int start, [int end]); + static const int bytesPerElement = 8; } @@ -1345,6 +1620,31 @@ abstract class Float32x4List implements List, TypedData { */ List operator +(List other); + /** + * Returns a new list containing the elements between [start] and [end]. + * + * The new list is a `Float32x4List` containing the elements of this + * list at positions greater than or equal to [start] and less than [end] in + * the same order as they occur in this list. + * + * ```dart + * var numbers = Float32x4List.fromList([0, 1, 2, 3, 4]); + * print(numbers.sublist(1, 3)); // [1, 2] + * print(numbers.sublist(1, 3).runtimeType); // Float32x4List + * ``` + * + * If [end] is omitted, it defaults to the [length] of this list. + * + * ```dart + * print(numbers.sublist(1)); // [1, 2, 3, 4] + * ``` + * + * The `start` and `end` positions must satisfy the relations + * 0 ≤ `start` ≤ `end` ≤ `this.length` + * If `end` is equal to `start`, then the returned list is empty. + */ + Float32x4List sublist(int start, [int end]); + static const int bytesPerElement = 16; } @@ -1398,6 +1698,31 @@ abstract class Int32x4List implements List, TypedData { */ List operator +(List other); + /** + * Returns a new list containing the elements between [start] and [end]. + * + * The new list is an `Int32x4list` containing the elements of this + * list at positions greater than or equal to [start] and less than [end] in + * the same order as they occur in this list. + * + * ```dart + * var numbers = Int32x4list.fromList([0, 1, 2, 3, 4]); + * print(numbers.sublist(1, 3)); // [1, 2] + * print(numbers.sublist(1, 3).runtimeType); // Int32x4list + * ``` + * + * If [end] is omitted, it defaults to the [length] of this list. + * + * ```dart + * print(numbers.sublist(1)); // [1, 2, 3, 4] + * ``` + * + * The `start` and `end` positions must satisfy the relations + * 0 ≤ `start` ≤ `end` ≤ `this.length` + * If `end` is equal to `start`, then the returned list is empty. + */ + Int32x4List sublist(int start, [int end]); + static const int bytesPerElement = 16; } @@ -1451,6 +1776,31 @@ abstract class Float64x2List implements List, TypedData { return buffer.asFloat64x2List(offsetInBytes, length); } + /** + * Returns a new list containing the elements between [start] and [end]. + * + * The new list is a `Float64x2List` containing the elements of this + * list at positions greater than or equal to [start] and less than [end] in + * the same order as they occur in this list. + * + * ```dart + * var numbers = Float64x2List.fromList([0, 1, 2, 3, 4]); + * print(numbers.sublist(1, 3)); // [1, 2] + * print(numbers.sublist(1, 3).runtimeType); // Float64x2List + * ``` + * + * If [end] is omitted, it defaults to the [length] of this list. + * + * ```dart + * print(numbers.sublist(1)); // [1, 2, 3, 4] + * ``` + * + * The `start` and `end` positions must satisfy the relations + * 0 ≤ `start` ≤ `end` ≤ `this.length` + * If `end` is equal to `start`, then the returned list is empty. + */ + Float64x2List sublist(int start, [int end]); + static const int bytesPerElement = 16; } diff --git a/sdk/lib/typed_data/unmodifiable_typed_data.dart b/sdk/lib/typed_data/unmodifiable_typed_data.dart index 4cc5af7ecfc..35490411e05 100644 --- a/sdk/lib/typed_data/unmodifiable_typed_data.dart +++ b/sdk/lib/typed_data/unmodifiable_typed_data.dart @@ -160,6 +160,16 @@ abstract class _UnmodifiableListMixin, int get lengthInBytes => _data.lengthInBytes; ByteBuffer get buffer => new UnmodifiableByteBufferView(_data.buffer); + + L _createList(int length); + + L sublist(int start, [int end]) { + end = RangeError.checkValidRange(start, end, length); + int sublistLength = end - start; + L result = _createList(sublistLength); + result.setRange(0, sublistLength, _list, start); + return result; + } } /** @@ -170,6 +180,8 @@ class UnmodifiableUint8ListView extends UnmodifiableListBase implements Uint8List { final Uint8List _list; UnmodifiableUint8ListView(Uint8List list) : _list = list; + + Uint8List _createList(int length) => Uint8List(length); } /** @@ -180,6 +192,8 @@ class UnmodifiableInt8ListView extends UnmodifiableListBase implements Int8List { final Int8List _list; UnmodifiableInt8ListView(Int8List list) : _list = list; + + Int8List _createList(int length) => Int8List(length); } /** @@ -190,6 +204,8 @@ class UnmodifiableUint8ClampedListView extends UnmodifiableListBase implements Uint8ClampedList { final Uint8ClampedList _list; UnmodifiableUint8ClampedListView(Uint8ClampedList list) : _list = list; + + Uint8ClampedList _createList(int length) => Uint8ClampedList(length); } /** @@ -200,6 +216,8 @@ class UnmodifiableUint16ListView extends UnmodifiableListBase implements Uint16List { final Uint16List _list; UnmodifiableUint16ListView(Uint16List list) : _list = list; + + Uint16List _createList(int length) => Uint16List(length); } /** @@ -210,6 +228,8 @@ class UnmodifiableInt16ListView extends UnmodifiableListBase implements Int16List { final Int16List _list; UnmodifiableInt16ListView(Int16List list) : _list = list; + + Int16List _createList(int length) => Int16List(length); } /** @@ -220,6 +240,8 @@ class UnmodifiableUint32ListView extends UnmodifiableListBase implements Uint32List { final Uint32List _list; UnmodifiableUint32ListView(Uint32List list) : _list = list; + + Uint32List _createList(int length) => Uint32List(length); } /** @@ -230,6 +252,8 @@ class UnmodifiableInt32ListView extends UnmodifiableListBase implements Int32List { final Int32List _list; UnmodifiableInt32ListView(Int32List list) : _list = list; + + Int32List _createList(int length) => Int32List(length); } /** @@ -240,6 +264,8 @@ class UnmodifiableUint64ListView extends UnmodifiableListBase implements Uint64List { final Uint64List _list; UnmodifiableUint64ListView(Uint64List list) : _list = list; + + Uint64List _createList(int length) => Uint64List(length); } /** @@ -250,6 +276,8 @@ class UnmodifiableInt64ListView extends UnmodifiableListBase implements Int64List { final Int64List _list; UnmodifiableInt64ListView(Int64List list) : _list = list; + + Int64List _createList(int length) => Int64List(length); } /** @@ -260,6 +288,8 @@ class UnmodifiableInt32x4ListView extends UnmodifiableListBase implements Int32x4List { final Int32x4List _list; UnmodifiableInt32x4ListView(Int32x4List list) : _list = list; + + Int32x4List _createList(int length) => Int32x4List(length); } /** @@ -270,6 +300,8 @@ class UnmodifiableFloat32x4ListView extends UnmodifiableListBase implements Float32x4List { final Float32x4List _list; UnmodifiableFloat32x4ListView(Float32x4List list) : _list = list; + + Float32x4List _createList(int length) => Float32x4List(length); } /** @@ -280,6 +312,8 @@ class UnmodifiableFloat64x2ListView extends UnmodifiableListBase implements Float64x2List { final Float64x2List _list; UnmodifiableFloat64x2ListView(Float64x2List list) : _list = list; + + Float64x2List _createList(int length) => Float64x2List(length); } /** @@ -290,6 +324,8 @@ class UnmodifiableFloat32ListView extends UnmodifiableListBase implements Float32List { final Float32List _list; UnmodifiableFloat32ListView(Float32List list) : _list = list; + + Float32List _createList(int length) => Float32List(length); } /** @@ -300,4 +336,6 @@ class UnmodifiableFloat64ListView extends UnmodifiableListBase implements Float64List { final Float64List _list; UnmodifiableFloat64ListView(Float64List list) : _list = list; + + Float64List _createList(int length) => Float64List(length); }