Index: sdk/lib/_internal/js_runtime/lib/js_array.dart |
diff --git a/sdk/lib/_internal/js_runtime/lib/js_array.dart b/sdk/lib/_internal/js_runtime/lib/js_array.dart |
index 447c749282b4ebc4c4280eb7486137c599536e72..74de24d25c54b28872f4a6727bff978547cd1265 100644 |
--- a/sdk/lib/_internal/js_runtime/lib/js_array.dart |
+++ b/sdk/lib/_internal/js_runtime/lib/js_array.dart |
@@ -7,6 +7,7 @@ part of _interceptors; |
class _Growable { |
const _Growable(); |
} |
+ |
const _ListConstructorSentinel = const _Growable(); |
/** |
@@ -16,7 +17,6 @@ const _ListConstructorSentinel = const _Growable(); |
* argument added to each member. |
*/ |
class JSArray<E> extends Interceptor implements List<E>, JSIndexable { |
- |
const JSArray(); |
// This factory constructor is the redirection target of the List() factory |
@@ -28,17 +28,16 @@ class JSArray<E> extends Interceptor implements List<E>, JSIndexable { |
return new JSArray<E>.fixed(length); |
} |
- |
/** |
* Returns a fresh JavaScript Array, marked as fixed-length. |
* |
* [length] must be a non-negative integer. |
*/ |
- factory JSArray.fixed(int length) { |
+ factory JSArray.fixed(int length) { |
// Explicit type test is necessary to guard against JavaScript conversions |
// in unchecked mode, and against `new Array(null)` which creates a single |
// element Array containing `null`. |
- if (length is !int) { |
+ if (length is! int) { |
throw new ArgumentError.value(length, "length", "is not an integer"); |
} |
// The JavaScript Array constructor with one argument throws if |
@@ -63,7 +62,7 @@ class JSArray<E> extends Interceptor implements List<E>, JSIndexable { |
factory JSArray.growable(int length) { |
// Explicit type test is necessary to guard against JavaScript conversions |
// in unchecked mode. |
- if ((length is !int) || (length < 0)) { |
+ if ((length is! int) || (length < 0)) { |
throw new ArgumentError("Length must be a non-negative integer: $length"); |
} |
return new JSArray<E>.markGrowable(JS('', 'new Array(#)', length)); |
@@ -109,13 +108,13 @@ class JSArray<E> extends Interceptor implements List<E>, JSIndexable { |
} |
checkMutable(reason) { |
- if (this is !JSMutableArray) { |
+ if (this is! JSMutableArray) { |
throw new UnsupportedError(reason); |
} |
} |
checkGrowable(reason) { |
- if (this is !JSExtendableArray) { |
+ if (this is! JSExtendableArray) { |
throw new UnsupportedError(reason); |
} |
} |
@@ -127,7 +126,7 @@ class JSArray<E> extends Interceptor implements List<E>, JSIndexable { |
E removeAt(int index) { |
checkGrowable('removeAt'); |
- if (index is !int) throw argumentErrorValue(index); |
+ if (index is! int) throw argumentErrorValue(index); |
if (index < 0 || index >= length) { |
throw new RangeError.value(index); |
} |
@@ -136,7 +135,7 @@ class JSArray<E> extends Interceptor implements List<E>, JSIndexable { |
void insert(int index, E value) { |
checkGrowable('insert'); |
- if (index is !int) throw argumentErrorValue(index); |
+ if (index is! int) throw argumentErrorValue(index); |
if (index < 0 || index > length) { |
throw new RangeError.value(index); |
} |
@@ -233,7 +232,8 @@ class JSArray<E> extends Interceptor implements List<E>, JSIndexable { |
int i = this.length; |
checkGrowable('addAll'); |
for (E e in collection) { |
- assert(i++ == this.length || (throw new ConcurrentModificationError(this))); |
+ assert( |
+ i++ == this.length || (throw new ConcurrentModificationError(this))); |
JS('void', r'#.push(#)', this, e); |
} |
} |
@@ -321,7 +321,7 @@ class JSArray<E> extends Interceptor implements List<E>, JSIndexable { |
throw IterableElementError.noElement(); |
} |
- E lastWhere(bool test(E element), { E orElse() }) { |
+ E lastWhere(bool test(E element), {E orElse()}) { |
int length = this.length; |
for (int i = length - 1; i >= 0; i--) { |
// TODO(22407): Improve bounds check elimination to allow this JS code to |
@@ -365,14 +365,14 @@ class JSArray<E> extends Interceptor implements List<E>, JSIndexable { |
List<E> sublist(int start, [int end]) { |
checkNull(start); // TODO(ahe): This is not specified but co19 tests it. |
- if (start is !int) throw argumentErrorValue(start); |
+ if (start is! int) throw argumentErrorValue(start); |
if (start < 0 || start > length) { |
throw new RangeError.range(start, 0, length, "start"); |
} |
if (end == null) { |
end = length; |
} else { |
- if (end is !int) throw argumentErrorValue(end); |
+ if (end is! int) throw argumentErrorValue(end); |
if (end < start || end > length) { |
throw new RangeError.range(end, start, length, "end"); |
} |
@@ -382,7 +382,6 @@ class JSArray<E> extends Interceptor implements List<E>, JSIndexable { |
JS('', r'#.slice(#, #)', this, start, end)); |
} |
- |
Iterable<E> getRange(int start, int end) { |
RangeError.checkValidRange(start, end, this.length); |
return new SubListIterable<E>(this, start, end); |
@@ -480,7 +479,7 @@ class JSArray<E> extends Interceptor implements List<E>, JSIndexable { |
} else { |
int delta = insertLength - removeLength; |
int newLength = this.length + delta; |
- int insertEnd = start + insertLength; // aka. end + delta. |
+ int insertEnd = start + insertLength; // aka. end + delta. |
this.length = newLength; |
this.setRange(insertEnd, newLength, this, end); |
this.setRange(start, insertEnd, replacement); |
@@ -578,16 +577,13 @@ class JSArray<E> extends Interceptor implements List<E>, JSIndexable { |
String toString() => ListBase.listToString(this); |
- List<E> toList({ bool growable: true }) => |
- growable |
- ? _toListGrowable() |
- : _toListFixed(); |
+ List<E> toList({bool growable: true}) => |
+ growable ? _toListGrowable() : _toListFixed(); |
List<E> _toListGrowable() => |
new JSArray<E>.markGrowable(JS('', '#.slice()', this)); |
- List<E> _toListFixed() => |
- new JSArray<E>.markFixed(JS('', '#.slice()', this)); |
+ List<E> _toListFixed() => new JSArray<E>.markFixed(JS('', '#.slice()', this)); |
Set<E> toSet() => new Set<E>.from(this); |
@@ -599,7 +595,7 @@ class JSArray<E> extends Interceptor implements List<E>, JSIndexable { |
set length(int newLength) { |
checkGrowable('set length'); |
- if (newLength is !int) { |
+ if (newLength is! int) { |
throw new ArgumentError.value(newLength, 'newLength'); |
} |
// TODO(sra): Remove this test and let JavaScript throw an error. |
@@ -612,14 +608,14 @@ class JSArray<E> extends Interceptor implements List<E>, JSIndexable { |
} |
E operator [](int index) { |
- if (index is !int) throw diagnoseIndexError(this, index); |
+ if (index is! int) throw diagnoseIndexError(this, index); |
if (index >= length || index < 0) throw diagnoseIndexError(this, index); |
return JS('var', '#[#]', this, index); |
} |
void operator []=(int index, E value) { |
checkMutable('indexed set'); |
- if (index is !int) throw diagnoseIndexError(this, index); |
+ if (index is! int) throw diagnoseIndexError(this, index); |
if (index >= length || index < 0) throw diagnoseIndexError(this, index); |
JS('void', r'#[#] = #', this, index, value); |
} |
@@ -641,10 +637,12 @@ class JSArray<E> extends Interceptor implements List<E>, JSIndexable { |
* many assuptions in the JS backend. |
*/ |
class JSMutableArray<E> extends JSArray<E> implements JSMutableIndexable {} |
+ |
class JSFixedArray<E> extends JSMutableArray<E> {} |
+ |
class JSExtendableArray<E> extends JSMutableArray<E> {} |
-class JSUnmodifiableArray<E> extends JSArray<E> {} // Already is JSIndexable. |
+class JSUnmodifiableArray<E> extends JSArray<E> {} // Already is JSIndexable. |
/// An [Iterator] that iterates a JSArray. |
/// |
@@ -655,7 +653,9 @@ class ArrayIterator<E> implements Iterator<E> { |
E _current; |
ArrayIterator(JSArray<E> iterable) |
- : _iterable = iterable, _length = iterable.length, _index = 0; |
+ : _iterable = iterable, |
+ _length = iterable.length, |
+ _index = 0; |
E get current => _current; |