From f005bd5a3eded7dffe90e6fb2e7ea12db631fe21 Mon Sep 17 00:00:00 2001 From: Ryan Macnak Date: Wed, 12 Jun 2019 21:32:33 +0000 Subject: [PATCH] [vm] Harden access to unchecked natives. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: https://github.com/dart-lang/sdk/issues/37234 Change-Id: I567b3fa177e89db50345e174a07c98b10c53f102 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/105721 Commit-Queue: Ryan Macnak Reviewed-by: Régis Crelier Reviewed-by: Siva Annamalai --- runtime/lib/function.dart | 4 + runtime/lib/integers.dart | 6 +- runtime/lib/lib_prefix.dart | 4 + runtime/lib/mirror_reference.dart | 2 +- runtime/lib/regexp_patch.dart | 8 +- runtime/lib/string_patch.dart | 20 +- runtime/lib/type_patch.dart | 16 +- runtime/lib/typed_data_patch.dart | 189 ++++++++++++++---- runtime/vm/compiler/recognized_methods_list.h | 30 +-- 9 files changed, 196 insertions(+), 83 deletions(-) diff --git a/runtime/lib/function.dart b/runtime/lib/function.dart index ae3902a5cc4..1c99ca26e5f 100644 --- a/runtime/lib/function.dart +++ b/runtime/lib/function.dart @@ -6,6 +6,10 @@ @pragma("vm:entry-point") class _Closure implements Function { + factory _Closure._uninstantiable() { + throw "Unreachable"; + } + bool operator ==(Object other) native "Closure_equals"; int get hashCode { diff --git a/runtime/lib/integers.dart b/runtime/lib/integers.dart index 22890128e69..3a0191383bc 100644 --- a/runtime/lib/integers.dart +++ b/runtime/lib/integers.dart @@ -480,8 +480,9 @@ abstract class _IntegerImplementation implements int { @pragma("vm:entry-point") class _Smi extends _IntegerImplementation { factory _Smi._uninstantiable() { - throw new UnsupportedError("_Smi can only be allocated by the VM"); + throw "Unreachable"; } + int get hashCode => this; int get _identityHashCode => this; @pragma("vm:exact-result-type", "dart:core#_Smi") @@ -682,8 +683,9 @@ class _Smi extends _IntegerImplementation { @pragma("vm:entry-point") class _Mint extends _IntegerImplementation { factory _Mint._uninstantiable() { - throw new UnsupportedError("_Mint can only be allocated by the VM"); + throw "Unreachable"; } + int get hashCode => this; int get _identityHashCode => this; @pragma("vm:non-nullable-result-type") diff --git a/runtime/lib/lib_prefix.dart b/runtime/lib/lib_prefix.dart index 483a660e121..fe12660f793 100644 --- a/runtime/lib/lib_prefix.dart +++ b/runtime/lib/lib_prefix.dart @@ -7,6 +7,10 @@ // This type corresponds to the VM-internal class LibraryPrefix. @pragma("vm:entry-point") class _LibraryPrefix { + factory _LibraryPrefix._uninstantiable() { + throw "Unreachable"; + } + bool _load() native "LibraryPrefix_load"; Object _loadError() native "LibraryPrefix_loadError"; bool isLoaded() native "LibraryPrefix_isLoaded"; diff --git a/runtime/lib/mirror_reference.dart b/runtime/lib/mirror_reference.dart index ca21b5b96b0..d203953145c 100644 --- a/runtime/lib/mirror_reference.dart +++ b/runtime/lib/mirror_reference.dart @@ -7,7 +7,7 @@ @pragma("vm:entry-point") class _MirrorReference { factory _MirrorReference._uninstantiable() { - throw new UnsupportedError("class _MirrorReference cannot be instantiated"); + throw "Unreachable"; } bool operator ==(other) native "MirrorReference_equals"; diff --git a/runtime/lib/regexp_patch.dart b/runtime/lib/regexp_patch.dart index 35a13b1a937..7621bb07dec 100644 --- a/runtime/lib/regexp_patch.dart +++ b/runtime/lib/regexp_patch.dart @@ -148,7 +148,7 @@ class _RegExpHashValue { } class _RegExpMatch implements RegExpMatch { - _RegExpMatch(this._regexp, this.input, this._match); + _RegExpMatch._(this._regexp, this.input, this._match); int get start => _start(0); int get end => _end(0); @@ -222,7 +222,7 @@ class _RegExp implements RegExp { if (match == null) { return null; } - return new _RegExpMatch(this, str, match); + return new _RegExpMatch._(this, str, match); } Iterable allMatches(String string, [int start = 0]) { @@ -242,7 +242,7 @@ class _RegExp implements RegExp { } List list = _ExecuteMatchSticky(string, start); if (list == null) return null; - return new _RegExpMatch(this, string, list); + return new _RegExpMatch._(this, string, list); } bool hasMatch(String str) { @@ -379,7 +379,7 @@ class _AllMatchesIterator implements Iterator { if (_nextIndex <= _str.length) { var match = _re._ExecuteMatch(_str, _nextIndex); if (match != null) { - _current = new _RegExpMatch(_re, _str, match); + _current = new _RegExpMatch._(_re, _str, match); _nextIndex = _current.end; if (_nextIndex == _current.start) { // Zero-width match. Advance by one more, unless the regexp diff --git a/runtime/lib/string_patch.dart b/runtime/lib/string_patch.dart index 109926373d6..52d27dbde12 100644 --- a/runtime/lib/string_patch.dart +++ b/runtime/lib/string_patch.dart @@ -945,10 +945,7 @@ abstract class _StringBase implements String { @pragma("vm:entry-point") class _OneByteString extends _StringBase { - factory _OneByteString._uninstantiable() { - throw new UnsupportedError( - "_OneByteString can only be allocated by the VM"); - } + factory _OneByteString._uninstantiable() { throw "Unreachable"; } @pragma("vm:exact-result-type", "dart:core#_Smi") int get hashCode native "String_getHashCode"; @@ -1254,10 +1251,7 @@ class _OneByteString extends _StringBase { @pragma("vm:entry-point") class _TwoByteString extends _StringBase { - factory _TwoByteString._uninstantiable() { - throw new UnsupportedError( - "_TwoByteString can only be allocated by the VM"); - } + factory _TwoByteString._uninstantiable() { throw "Unreachable"; } static String _allocateFromTwoByteList(List list, int start, int end) native "TwoByteString_allocateFromTwoByteList"; @@ -1277,10 +1271,7 @@ class _TwoByteString extends _StringBase { @pragma("vm:entry-point") class _ExternalOneByteString extends _StringBase { - factory _ExternalOneByteString._uninstantiable() { - throw new UnsupportedError( - "_ExternalOneByteString can only be allocated by the VM"); - } + factory _ExternalOneByteString._uninstantiable() { throw "Unreachable"; } bool _isWhitespace(int codeUnit) { return _StringBase._isOneByteWhitespace(codeUnit); @@ -1296,10 +1287,7 @@ class _ExternalOneByteString extends _StringBase { @pragma("vm:entry-point") class _ExternalTwoByteString extends _StringBase { - factory _ExternalTwoByteString._uninstantiable() { - throw new UnsupportedError( - "_ExternalTwoByteString can only be allocated by the VM"); - } + factory _ExternalTwoByteString._uninstantiable() { throw "Unreachable"; } bool _isWhitespace(int codeUnit) { return _StringBase._isTwoByteWhitespace(codeUnit); diff --git a/runtime/lib/type_patch.dart b/runtime/lib/type_patch.dart index a05ce70dca8..35ce89fb029 100644 --- a/runtime/lib/type_patch.dart +++ b/runtime/lib/type_patch.dart @@ -14,14 +14,26 @@ abstract class _AbstractType implements Type { // Equivalent of RawType. @pragma("vm:entry-point") class _Type extends _AbstractType { + factory _Type._uninstantiable() { + throw "Unreachable"; + } + @pragma("vm:exact-result-type", "dart:core#_Smi") int get hashCode native "Type_getHashCode"; } // Equivalent of RawTypeRef. @pragma("vm:entry-point") -class _TypeRef extends _AbstractType {} +class _TypeRef extends _AbstractType { + factory _TypeRef._uninstantiable() { + throw "Unreachable"; + } +} // Equivalent of RawTypeParameter. @pragma("vm:entry-point") -class _TypeParameter extends _AbstractType {} +class _TypeParameter extends _AbstractType { + factory _TypeParameter._uninstantiable() { + throw "Unreachable"; + } +} diff --git a/runtime/lib/typed_data_patch.dart b/runtime/lib/typed_data_patch.dart index 7af21817e7b..7c563c4c516 100644 --- a/runtime/lib/typed_data_patch.dart +++ b/runtime/lib/typed_data_patch.dart @@ -40,14 +40,14 @@ class ByteData implements TypedData { factory ByteData(int length) { final list = new Uint8List(length) as _TypedList; _rangeCheck(list.lengthInBytes, 0, length); - return new _ByteDataView(list, 0, length); + return new _ByteDataView._(list, 0, length); } // Called directly from C code. @pragma("vm:entry-point") factory ByteData._view(_TypedList typedData, int offsetInBytes, int length) { _rangeCheck(typedData.lengthInBytes, offsetInBytes, length); - return new _ByteDataView(typedData, offsetInBytes, length); + return new _ByteDataView._(typedData, offsetInBytes, length); } } @@ -1907,14 +1907,14 @@ class _ByteBuffer implements ByteBuffer { ByteData asByteData([int offsetInBytes = 0, int length]) { length ??= this.lengthInBytes - offsetInBytes; _rangeCheck(this._data.lengthInBytes, offsetInBytes, length); - return new _ByteDataView(this._data, offsetInBytes, length); + return new _ByteDataView._(this._data, offsetInBytes, length); } Int8List asInt8List([int offsetInBytes = 0, int length]) { length ??= (this.lengthInBytes - offsetInBytes) ~/ Int8List.bytesPerElement; _rangeCheck( this.lengthInBytes, offsetInBytes, length * Int8List.bytesPerElement); - return new _Int8ArrayView(this._data, offsetInBytes, length); + return new _Int8ArrayView._(this._data, offsetInBytes, length); } Uint8List asUint8List([int offsetInBytes = 0, int length]) { @@ -1922,7 +1922,7 @@ class _ByteBuffer implements ByteBuffer { (this.lengthInBytes - offsetInBytes) ~/ Uint8List.bytesPerElement; _rangeCheck( this.lengthInBytes, offsetInBytes, length * Uint8List.bytesPerElement); - return new _Uint8ArrayView(this._data, offsetInBytes, length); + return new _Uint8ArrayView._(this._data, offsetInBytes, length); } Uint8ClampedList asUint8ClampedList([int offsetInBytes = 0, int length]) { @@ -1930,7 +1930,7 @@ class _ByteBuffer implements ByteBuffer { Uint8ClampedList.bytesPerElement; _rangeCheck(this.lengthInBytes, offsetInBytes, length * Uint8ClampedList.bytesPerElement); - return new _Uint8ClampedArrayView(this._data, offsetInBytes, length); + return new _Uint8ClampedArrayView._(this._data, offsetInBytes, length); } Int16List asInt16List([int offsetInBytes = 0, int length]) { @@ -1939,7 +1939,7 @@ class _ByteBuffer implements ByteBuffer { _rangeCheck( this.lengthInBytes, offsetInBytes, length * Int16List.bytesPerElement); _offsetAlignmentCheck(offsetInBytes, Int16List.bytesPerElement); - return new _Int16ArrayView(this._data, offsetInBytes, length); + return new _Int16ArrayView._(this._data, offsetInBytes, length); } Uint16List asUint16List([int offsetInBytes = 0, int length]) { @@ -1948,7 +1948,7 @@ class _ByteBuffer implements ByteBuffer { _rangeCheck( this.lengthInBytes, offsetInBytes, length * Uint16List.bytesPerElement); _offsetAlignmentCheck(offsetInBytes, Uint16List.bytesPerElement); - return new _Uint16ArrayView(this._data, offsetInBytes, length); + return new _Uint16ArrayView._(this._data, offsetInBytes, length); } Int32List asInt32List([int offsetInBytes = 0, int length]) { @@ -1957,7 +1957,7 @@ class _ByteBuffer implements ByteBuffer { _rangeCheck( this.lengthInBytes, offsetInBytes, length * Int32List.bytesPerElement); _offsetAlignmentCheck(offsetInBytes, Int32List.bytesPerElement); - return new _Int32ArrayView(this._data, offsetInBytes, length); + return new _Int32ArrayView._(this._data, offsetInBytes, length); } Uint32List asUint32List([int offsetInBytes = 0, int length]) { @@ -1966,7 +1966,7 @@ class _ByteBuffer implements ByteBuffer { _rangeCheck( this.lengthInBytes, offsetInBytes, length * Uint32List.bytesPerElement); _offsetAlignmentCheck(offsetInBytes, Uint32List.bytesPerElement); - return new _Uint32ArrayView(this._data, offsetInBytes, length); + return new _Uint32ArrayView._(this._data, offsetInBytes, length); } Int64List asInt64List([int offsetInBytes = 0, int length]) { @@ -1975,7 +1975,7 @@ class _ByteBuffer implements ByteBuffer { _rangeCheck( this.lengthInBytes, offsetInBytes, length * Int64List.bytesPerElement); _offsetAlignmentCheck(offsetInBytes, Int64List.bytesPerElement); - return new _Int64ArrayView(this._data, offsetInBytes, length); + return new _Int64ArrayView._(this._data, offsetInBytes, length); } Uint64List asUint64List([int offsetInBytes = 0, int length]) { @@ -1984,7 +1984,7 @@ class _ByteBuffer implements ByteBuffer { _rangeCheck( this.lengthInBytes, offsetInBytes, length * Uint64List.bytesPerElement); _offsetAlignmentCheck(offsetInBytes, Uint64List.bytesPerElement); - return new _Uint64ArrayView(this._data, offsetInBytes, length); + return new _Uint64ArrayView._(this._data, offsetInBytes, length); } Float32List asFloat32List([int offsetInBytes = 0, int length]) { @@ -1993,7 +1993,7 @@ class _ByteBuffer implements ByteBuffer { _rangeCheck(this.lengthInBytes, offsetInBytes, length * Float32List.bytesPerElement); _offsetAlignmentCheck(offsetInBytes, Float32List.bytesPerElement); - return new _Float32ArrayView(this._data, offsetInBytes, length); + return new _Float32ArrayView._(this._data, offsetInBytes, length); } Float64List asFloat64List([int offsetInBytes = 0, int length]) { @@ -2002,7 +2002,7 @@ class _ByteBuffer implements ByteBuffer { _rangeCheck(this.lengthInBytes, offsetInBytes, length * Float64List.bytesPerElement); _offsetAlignmentCheck(offsetInBytes, Float64List.bytesPerElement); - return new _Float64ArrayView(this._data, offsetInBytes, length); + return new _Float64ArrayView._(this._data, offsetInBytes, length); } Float32x4List asFloat32x4List([int offsetInBytes = 0, int length]) { @@ -2011,7 +2011,7 @@ class _ByteBuffer implements ByteBuffer { _rangeCheck(this.lengthInBytes, offsetInBytes, length * Float32x4List.bytesPerElement); _offsetAlignmentCheck(offsetInBytes, Float32x4List.bytesPerElement); - return new _Float32x4ArrayView(this._data, offsetInBytes, length); + return new _Float32x4ArrayView._(this._data, offsetInBytes, length); } Int32x4List asInt32x4List([int offsetInBytes = 0, int length]) { @@ -2020,7 +2020,7 @@ class _ByteBuffer implements ByteBuffer { _rangeCheck(this.lengthInBytes, offsetInBytes, length * Int32x4List.bytesPerElement); _offsetAlignmentCheck(offsetInBytes, Int32x4List.bytesPerElement); - return new _Int32x4ArrayView(this._data, offsetInBytes, length); + return new _Int32x4ArrayView._(this._data, offsetInBytes, length); } Float64x2List asFloat64x2List([int offsetInBytes = 0, int length]) { @@ -2029,7 +2029,7 @@ class _ByteBuffer implements ByteBuffer { _rangeCheck(this.lengthInBytes, offsetInBytes, length * Float64x2List.bytesPerElement); _offsetAlignmentCheck(offsetInBytes, Float64x2List.bytesPerElement); - return new _Float64x2ArrayView(this._data, offsetInBytes, length); + return new _Float64x2ArrayView._(this._data, offsetInBytes, length); } } @@ -2139,6 +2139,10 @@ class Int8List { @pragma("vm:entry-point") class _Int8List extends _TypedList with _IntListMixin implements Int8List { + factory _Int8List._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing List interface. @pragma("vm:exact-result-type", "dart:core#_Smi") int operator [](int index) { @@ -2181,6 +2185,10 @@ class Uint8List { @pragma("vm:entry-point") class _Uint8List extends _TypedList with _IntListMixin implements Uint8List { + factory _Uint8List._uninstantiable() { + throw "Unreachable"; + } + // Methods implementing List interface. @pragma("vm:exact-result-type", "dart:core#_Smi") int operator [](int index) { @@ -2225,6 +2233,10 @@ class Uint8ClampedList { class _Uint8ClampedList extends _TypedList with _IntListMixin implements Uint8ClampedList { + factory _Uint8ClampedList._uninstantiable() { + throw "Unreachable"; + } + // Methods implementing List interface. @pragma("vm:exact-result-type", "dart:core#_Smi") int operator [](int index) { @@ -2267,6 +2279,10 @@ class Int16List { @pragma("vm:entry-point") class _Int16List extends _TypedList with _IntListMixin implements Int16List { + factory _Int16List._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing List interface. @pragma("vm:exact-result-type", "dart:core#_Smi") int operator [](int index) { @@ -2328,6 +2344,10 @@ class Uint16List { @pragma("vm:entry-point") class _Uint16List extends _TypedList with _IntListMixin implements Uint16List { + factory _Uint16List._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. @pragma("vm:exact-result-type", "dart:core#_Smi") int operator [](int index) { @@ -2389,6 +2409,10 @@ class Int32List { @pragma("vm:entry-point") class _Int32List extends _TypedList with _IntListMixin implements Int32List { + factory _Int32List._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. int operator [](int index) { if (index < 0 || index >= length) { @@ -2438,6 +2462,10 @@ class Uint32List { @pragma("vm:entry-point") class _Uint32List extends _TypedList with _IntListMixin implements Uint32List { + factory _Uint32List._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. int operator [](int index) { if (index < 0 || index >= length) { @@ -2487,6 +2515,10 @@ class Int64List { @pragma("vm:entry-point") class _Int64List extends _TypedList with _IntListMixin implements Int64List { + factory _Int64List._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. int operator [](int index) { if (index < 0 || index >= length) { @@ -2536,6 +2568,10 @@ class Uint64List { @pragma("vm:entry-point") class _Uint64List extends _TypedList with _IntListMixin implements Uint64List { + factory _Uint64List._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. int operator [](int index) { if (index < 0 || index >= length) { @@ -2587,6 +2623,10 @@ class Float32List { class _Float32List extends _TypedList with _DoubleListMixin implements Float32List { + factory _Float32List._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. @pragma("vm:exact-result-type", "dart:core#_Double") double operator [](int index) { @@ -2639,6 +2679,10 @@ class Float64List { class _Float64List extends _TypedList with _DoubleListMixin implements Float64List { + factory _Float64List._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. @pragma("vm:exact-result-type", "dart:core#_Double") double operator [](int index) { @@ -2691,6 +2735,10 @@ class Float32x4List { class _Float32x4List extends _TypedList with _Float32x4ListMixin implements Float32x4List { + factory _Float32x4List._uninstantiable() { + throw "Unreachable"; + } + @pragma("vm:exact-result-type", _Float32x4) Float32x4 operator [](int index) { if (index < 0 || index >= length) { @@ -2742,6 +2790,10 @@ class Int32x4List { class _Int32x4List extends _TypedList with _Int32x4ListMixin implements Int32x4List { + factory _Int32x4List._uninstantiable() { + throw "Unreachable"; + } + @pragma("vm:exact-result-type", _Int32x4) Int32x4 operator [](int index) { if (index < 0 || index >= length) { @@ -2793,6 +2845,10 @@ class Float64x2List { class _Float64x2List extends _TypedList with _Float64x2ListMixin implements Float64x2List { + factory _Float64x2List._uninstantiable() { + throw "Unreachable"; + } + @pragma("vm:exact-result-type", _Float64x2) Float64x2 operator [](int index) { if (index < 0 || index >= length) { @@ -2831,6 +2887,10 @@ class _Float64x2List extends _TypedList class _ExternalInt8Array extends _TypedList with _IntListMixin implements Int8List { + factory _ExternalInt8Array._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. int operator [](int index) { if (index < 0 || index >= length) { @@ -2861,6 +2921,10 @@ class _ExternalInt8Array extends _TypedList class _ExternalUint8Array extends _TypedList with _IntListMixin implements Uint8List { + factory _ExternalUint8Array._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. @pragma("vm:exact-result-type", "dart:core#_Smi") int operator [](int index) { @@ -2892,6 +2956,10 @@ class _ExternalUint8Array extends _TypedList class _ExternalUint8ClampedArray extends _TypedList with _IntListMixin implements Uint8ClampedList { + factory _ExternalUint8ClampedArray._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. @pragma("vm:exact-result-type", "dart:core#_Smi") int operator [](int index) { @@ -2923,8 +2991,11 @@ class _ExternalUint8ClampedArray extends _TypedList class _ExternalInt16Array extends _TypedList with _IntListMixin implements Int16List { - // Method(s) implementing the List interface. + factory _ExternalInt16Array._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. int operator [](int index) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -2962,8 +3033,11 @@ class _ExternalInt16Array extends _TypedList class _ExternalUint16Array extends _TypedList with _IntListMixin implements Uint16List { - // Method(s) implementing the List interface. + factory _ExternalUint16Array._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. int operator [](int index) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -3001,6 +3075,10 @@ class _ExternalUint16Array extends _TypedList class _ExternalInt32Array extends _TypedList with _IntListMixin implements Int32List { + factory _ExternalInt32Array._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. int operator [](int index) { if (index < 0 || index >= length) { @@ -3039,8 +3117,11 @@ class _ExternalInt32Array extends _TypedList class _ExternalUint32Array extends _TypedList with _IntListMixin implements Uint32List { - // Method(s) implementing the List interface. + factory _ExternalUint32Array._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. int operator [](int index) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -3078,8 +3159,11 @@ class _ExternalUint32Array extends _TypedList class _ExternalInt64Array extends _TypedList with _IntListMixin implements Int64List { - // Method(s) implementing the List interface. + factory _ExternalInt64Array._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. int operator [](int index) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -3117,8 +3201,11 @@ class _ExternalInt64Array extends _TypedList class _ExternalUint64Array extends _TypedList with _IntListMixin implements Uint64List { - // Method(s) implementing the List interface. + factory _ExternalUint64Array._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. int operator [](int index) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -3156,8 +3243,11 @@ class _ExternalUint64Array extends _TypedList class _ExternalFloat32Array extends _TypedList with _DoubleListMixin implements Float32List { - // Method(s) implementing the List interface. + factory _ExternalFloat32Array._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. double operator [](int index) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -3195,8 +3285,11 @@ class _ExternalFloat32Array extends _TypedList class _ExternalFloat64Array extends _TypedList with _DoubleListMixin implements Float64List { - // Method(s) implementing the List interface. + factory _ExternalFloat64Array._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. double operator [](int index) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -3234,8 +3327,11 @@ class _ExternalFloat64Array extends _TypedList class _ExternalFloat32x4Array extends _TypedList with _Float32x4ListMixin implements Float32x4List { - // Method(s) implementing the List interface. + factory _ExternalFloat32x4Array._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. Float32x4 operator [](int index) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -3273,8 +3369,11 @@ class _ExternalFloat32x4Array extends _TypedList class _ExternalInt32x4Array extends _TypedList with _Int32x4ListMixin implements Int32x4List { - // Method(s) implementing the List interface. + factory _ExternalInt32x4Array._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. Int32x4 operator [](int index) { if (index < 0 || index >= length) { throw new RangeError.index(index, this, "index"); @@ -3312,6 +3411,10 @@ class _ExternalInt32x4Array extends _TypedList class _ExternalFloat64x2Array extends _TypedList with _Float64x2ListMixin implements Float64x2List { + factory _ExternalFloat64x2Array._uninstantiable() { + throw "Unreachable"; + } + // Method(s) implementing the List interface. Float64x2 operator [](int index) { if (index < 0 || index >= length) { @@ -3599,7 +3702,7 @@ class _Int8ArrayView extends _TypedListView implements Int8List { // Constructor. @pragma("vm:exact-result-type", _Int8ArrayView) - factory _Int8ArrayView(_TypedList buffer, int offsetInBytes, int length) + factory _Int8ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Int8ArrayView_new"; // Method(s) implementing List interface. @@ -3636,7 +3739,7 @@ class _Uint8ArrayView extends _TypedListView implements Uint8List { // Constructor. @pragma("vm:exact-result-type", _Uint8ArrayView) - factory _Uint8ArrayView(_TypedList buffer, int offsetInBytes, int length) + factory _Uint8ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Uint8ArrayView_new"; // Method(s) implementing List interface. @@ -3673,7 +3776,7 @@ class _Uint8ClampedArrayView extends _TypedListView implements Uint8ClampedList { // Constructor. @pragma("vm:exact-result-type", _Uint8ClampedArrayView) - factory _Uint8ClampedArrayView(_TypedList buffer, int offsetInBytes, + factory _Uint8ClampedArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Uint8ClampedArrayView_new"; // Method(s) implementing List interface. @@ -3710,7 +3813,7 @@ class _Int16ArrayView extends _TypedListView implements Int16List { // Constructor. @pragma("vm:exact-result-type", _Int16ArrayView) - factory _Int16ArrayView(_TypedList buffer, int offsetInBytes, int length) + factory _Int16ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Int16ArrayView_new"; // Method(s) implementing List interface. @@ -3759,7 +3862,7 @@ class _Uint16ArrayView extends _TypedListView implements Uint16List { // Constructor. @pragma("vm:exact-result-type", _Uint16ArrayView) - factory _Uint16ArrayView(_TypedList buffer, int offsetInBytes, int length) + factory _Uint16ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Uint16ArrayView_new"; // Method(s) implementing List interface. @@ -3809,7 +3912,7 @@ class _Int32ArrayView extends _TypedListView implements Int32List { // Constructor. @pragma("vm:exact-result-type", _Int32ArrayView) - factory _Int32ArrayView(_TypedList buffer, int offsetInBytes, int length) + factory _Int32ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Int32ArrayView_new"; // Method(s) implementing List interface. @@ -3846,7 +3949,7 @@ class _Uint32ArrayView extends _TypedListView implements Uint32List { // Constructor. @pragma("vm:exact-result-type", _Uint32ArrayView) - factory _Uint32ArrayView(_TypedList buffer, int offsetInBytes, int length) + factory _Uint32ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Uint32ArrayView_new"; // Method(s) implementing List interface. @@ -3883,7 +3986,7 @@ class _Int64ArrayView extends _TypedListView implements Int64List { // Constructor. @pragma("vm:exact-result-type", _Int64ArrayView) - factory _Int64ArrayView(_TypedList buffer, int offsetInBytes, int length) + factory _Int64ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Int64ArrayView_new"; // Method(s) implementing List interface. @@ -3920,7 +4023,7 @@ class _Uint64ArrayView extends _TypedListView implements Uint64List { // Constructor. @pragma("vm:exact-result-type", _Uint64ArrayView) - factory _Uint64ArrayView(_TypedList buffer, int offsetInBytes, int length) + factory _Uint64ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Uint64ArrayView_new"; // Method(s) implementing List interface. @@ -3957,7 +4060,7 @@ class _Float32ArrayView extends _TypedListView implements Float32List { // Constructor. @pragma("vm:exact-result-type", _Float32ArrayView) - factory _Float32ArrayView(_TypedList buffer, int offsetInBytes, int length) + factory _Float32ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Float32ArrayView_new"; // Method(s) implementing List interface. @@ -3994,7 +4097,7 @@ class _Float64ArrayView extends _TypedListView implements Float64List { // Constructor. @pragma("vm:exact-result-type", _Float64ArrayView) - factory _Float64ArrayView(_TypedList buffer, int offsetInBytes, int length) + factory _Float64ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Float64ArrayView_new"; // Method(s) implementing List interface. @@ -4031,8 +4134,8 @@ class _Float32x4ArrayView extends _TypedListView implements Float32x4List { // Constructor. @pragma("vm:exact-result-type", _Float32x4ArrayView) - factory _Float32x4ArrayView(_TypedList buffer, int offsetInBytes, int length) - native "TypedDataView_Float32x4ArrayView_new"; + factory _Float32x4ArrayView._(_TypedList buffer, int offsetInBytes, + int length) native "TypedDataView_Float32x4ArrayView_new"; // Method(s) implementing List interface. Float32x4 operator [](int index) { @@ -4068,7 +4171,7 @@ class _Int32x4ArrayView extends _TypedListView implements Int32x4List { // Constructor. @pragma("vm:exact-result-type", _Int32x4ArrayView) - factory _Int32x4ArrayView(_TypedList buffer, int offsetInBytes, int length) + factory _Int32x4ArrayView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_Int32x4ArrayView_new"; // Method(s) implementing List interface. @@ -4105,8 +4208,8 @@ class _Float64x2ArrayView extends _TypedListView implements Float64x2List { // Constructor. @pragma("vm:exact-result-type", _Float64x2ArrayView) - factory _Float64x2ArrayView(_TypedList buffer, int offsetInBytes, int length) - native "TypedDataView_Float64x2ArrayView_new"; + factory _Float64x2ArrayView._(_TypedList buffer, int offsetInBytes, + int length) native "TypedDataView_Float64x2ArrayView_new"; // Method(s) implementing List interface. Float64x2 operator [](int index) { @@ -4139,7 +4242,7 @@ class _Float64x2ArrayView extends _TypedListView @pragma("vm:entry-point") class _ByteDataView implements ByteData { @pragma("vm:exact-result-type", _ByteDataView) - factory _ByteDataView(_TypedList buffer, int offsetInBytes, int length) + factory _ByteDataView._(_TypedList buffer, int offsetInBytes, int length) native "TypedDataView_ByteDataView_new"; // Method(s) implementing TypedData interface. diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h index ffd72557149..2116ba9cb50 100644 --- a/runtime/vm/compiler/recognized_methods_list.h +++ b/runtime/vm/compiler/recognized_methods_list.h @@ -47,21 +47,21 @@ namespace dart { V(_ByteDataView, get:_typedData, ByteDataViewTypedData, 0x0) \ V(_TypedListView, get:offsetInBytes, TypedDataViewOffsetInBytes, 0x0) \ V(_TypedListView, get:_typedData, TypedDataViewTypedData, 0x0) \ - V(_ByteDataView, ., TypedData_ByteDataView_factory, 0x0) \ - V(_Int8ArrayView, ., TypedData_Int8ArrayView_factory, 0x0) \ - V(_Uint8ArrayView, ., TypedData_Uint8ArrayView_factory, 0x0) \ - V(_Uint8ClampedArrayView, ., TypedData_Uint8ClampedArrayView_factory, 0x0) \ - V(_Int16ArrayView, ., TypedData_Int16ArrayView_factory, 0x0) \ - V(_Uint16ArrayView, ., TypedData_Uint16ArrayView_factory, 0x0) \ - V(_Int32ArrayView, ., TypedData_Int32ArrayView_factory, 0x0) \ - V(_Uint32ArrayView, ., TypedData_Uint32ArrayView_factory, 0x0) \ - V(_Int64ArrayView, ., TypedData_Int64ArrayView_factory, 0x0) \ - V(_Uint64ArrayView, ., TypedData_Uint64ArrayView_factory, 0x0) \ - V(_Float32ArrayView, ., TypedData_Float32ArrayView_factory, 0x0) \ - V(_Float64ArrayView, ., TypedData_Float64ArrayView_factory, 0x0) \ - V(_Float32x4ArrayView, ., TypedData_Float32x4ArrayView_factory, 0x0) \ - V(_Int32x4ArrayView, ., TypedData_Int32x4ArrayView_factory, 0x0) \ - V(_Float64x2ArrayView, ., TypedData_Float64x2ArrayView_factory, 0x0) \ + V(_ByteDataView, ._, TypedData_ByteDataView_factory, 0x0) \ + V(_Int8ArrayView, ._, TypedData_Int8ArrayView_factory, 0x0) \ + V(_Uint8ArrayView, ._, TypedData_Uint8ArrayView_factory, 0x0) \ + V(_Uint8ClampedArrayView, ._, TypedData_Uint8ClampedArrayView_factory, 0x0) \ + V(_Int16ArrayView, ._, TypedData_Int16ArrayView_factory, 0x0) \ + V(_Uint16ArrayView, ._, TypedData_Uint16ArrayView_factory, 0x0) \ + V(_Int32ArrayView, ._, TypedData_Int32ArrayView_factory, 0x0) \ + V(_Uint32ArrayView, ._, TypedData_Uint32ArrayView_factory, 0x0) \ + V(_Int64ArrayView, ._, TypedData_Int64ArrayView_factory, 0x0) \ + V(_Uint64ArrayView, ._, TypedData_Uint64ArrayView_factory, 0x0) \ + V(_Float32ArrayView, ._, TypedData_Float32ArrayView_factory, 0x0) \ + V(_Float64ArrayView, ._, TypedData_Float64ArrayView_factory, 0x0) \ + V(_Float32x4ArrayView, ._, TypedData_Float32x4ArrayView_factory, 0x0) \ + V(_Int32x4ArrayView, ._, TypedData_Int32x4ArrayView_factory, 0x0) \ + V(_Float64x2ArrayView, ._, TypedData_Float64x2ArrayView_factory, 0x0) \ V(::, _toClampedUint8, ConvertIntToClampedUint8, 0x564b0435) \ V(_StringBase, _interpolate, StringBaseInterpolate, 0x01ecb15a) \ V(_IntegerImplementation, toDouble, IntegerToDouble, 0x05da96ed) \