Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2781)

Unified Diff: lib/runtime/dart/core.js

Issue 1117793002: add checks needed for covariant generics, and List<E> (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: lib/runtime/dart/core.js
diff --git a/lib/runtime/dart/core.js b/lib/runtime/dart/core.js
index c1799ab4b0bf6d2b155f0da97a6e7ff26b82898c..eada4b50b2b1176ff322282bcb21586c082a68bf 100644
--- a/lib/runtime/dart/core.js
+++ b/lib/runtime/dart/core.js
@@ -1023,6 +1023,7 @@ var core;
return dart.as(values == null ? null : _js_helper.Primitives.getProperty(values, this[_getKey]()), T);
}
set(object, value) {
+ dart.as(value, T);
let values = _js_helper.Primitives.getProperty(object, Expando._EXPANDO_PROPERTY_NAME);
if (values == null) {
values = new Object();
@@ -1082,6 +1083,7 @@ var core;
generate(count, generator) {
if (generator === void 0)
generator = null;
+ dart.as(generator, dart.functionType(E, [int]));
if (dart.notNull(count) <= 0)
return new (_internal.EmptyIterable$(E))();
return new (exports._GeneratorIterable$(E))(count, generator);
@@ -1259,18 +1261,22 @@ var core;
List(length) {
if (length === void 0)
length = null;
+ let list = null;
if (length == null) {
- return dart.as([], List$(E));
- }
- if (!(typeof length == 'number') || dart.notNull(length) < 0) {
- throw new ArgumentError(`Length must be a non-negative integer: ${length}`);
+ list = [];
+ } else {
+ if (!(typeof length == 'number') || dart.notNull(length) < 0) {
+ throw new ArgumentError(`Length must be a non-negative integer: ${length}`);
+ }
+ list = new Array(length);
+ list.fixed$length = Array;
}
- let list = new Array(length);
- list.fixed$length = Array;
+ dart.setType(list, List$(E));
return dart.as(list, List$(E));
}
filled(length, fill) {
- let result = new _interceptors.JSArray$(E).fixed(length);
+ dart.as(fill, E);
+ let result = new (List$(E))(length);
if (length != 0 && dart.notNull(fill != null)) {
for (let i = 0; dart.notNull(i) < dart.notNull(result[$length]); i = dart.notNull(i) + 1) {
result[$set](i, fill);
@@ -1289,6 +1295,7 @@ var core;
return dart.as(_internal.makeListFixedLength(list), List$(E));
}
generate(length, generator, opts) {
+ dart.as(generator, dart.functionType(E, [int]));
let growable = opts && 'growable' in opts ? opts.growable : true;
let result = null;
if (growable) {
@@ -1350,11 +1357,15 @@ var core;
return _internal.IterableMixinWorkaround.fold(this, initialValue, combine);
}
[$firstWhere](test, opts) {
+ dart.as(test, dart.functionType(bool, [E]));
let orElse = opts && 'orElse' in opts ? opts.orElse : null;
+ dart.as(orElse, dart.functionType(E, []));
return dart.as(_internal.IterableMixinWorkaround.firstWhere(this, test, orElse), E);
}
[$lastWhere](test, opts) {
+ dart.as(test, dart.functionType(bool, [E]));
let orElse = opts && 'orElse' in opts ? opts.orElse : null;
+ dart.as(orElse, dart.functionType(E, []));
return dart.as(_internal.IterableMixinWorkaround.lastWhereList(this, test, orElse), E);
}
[$singleWhere](test) {
@@ -1389,6 +1400,7 @@ var core;
[$sort](compare) {
if (compare === void 0)
compare = null;
+ dart.as(compare, dart.functionType(int, [E, E]));
this[$checkMutable]('sort');
_internal.IterableMixinWorkaround.sortList(this, compare);
}
@@ -1433,6 +1445,7 @@ var core;
return dart.as(this[index], E);
}
[$set](index, value) {
+ dart.as(value, E);
this[$checkMutable]('indexed set');
if (!(typeof index == 'number'))
throw new ArgumentError(index);
@@ -1452,6 +1465,7 @@ var core;
this.length = newLength;
}
[$add](value) {
+ dart.as(value, E);
this[$checkGrowable]('add');
this.push(value);
}
@@ -1466,6 +1480,7 @@ var core;
[$sort](compare) {
if (compare === void 0)
compare = null;
+ dart.as(compare, dart.functionType(int, [E, E]));
_internal.IterableMixinWorkaround.sortList(this, compare);
}
[$shuffle](random) {
@@ -1474,11 +1489,13 @@ var core;
_internal.IterableMixinWorkaround.shuffleList(this, random);
}
[$indexOf](element, start) {
+ dart.as(element, E);
if (start === void 0)
start = 0;
return _internal.IterableMixinWorkaround.indexOfList(this, element, start);
}
[$lastIndexOf](element, start) {
+ dart.as(element, E);
if (start === void 0)
start = null;
return _internal.IterableMixinWorkaround.lastIndexOfList(this, element, start);
@@ -1487,6 +1504,7 @@ var core;
this[$length] = 0;
}
[$insert](index, element) {
+ dart.as(element, E);
if (!(typeof index == 'number'))
throw new ArgumentError(index);
if (dart.notNull(index) < 0 || dart.notNull(index) > dart.notNull(this[$length])) {
@@ -1560,6 +1578,7 @@ var core;
return new (_internal.IterableMixinWorkaround$(E))().getRangeList(this, start, end);
}
[$setRange](start, end, iterable, skipCount) {
+ dart.as(iterable, Iterable$(E));
if (skipCount === void 0)
skipCount = 0;
this[$checkMutable]('set range');
@@ -1580,6 +1599,7 @@ var core;
[$fillRange](start, end, fillValue) {
if (fillValue === void 0)
fillValue = null;
+ dart.as(fillValue, E);
this[$checkMutable]('fill range');
_internal.IterableMixinWorkaround.fillRangeList(this, start, end, fillValue);
}
@@ -1591,6 +1611,7 @@ var core;
return new (_internal.IterableMixinWorkaround$(E))().asMapList(this);
}
}
+ dart.setBaseClass(List, dart.global.Array);
List[dart.implements] = () => [Iterable$(E), _internal.EfficientLength];
dart.defineNamedConstructor(List, 'filled');
dart.defineNamedConstructor(List, 'from');

Powered by Google App Engine
This is Rietveld 408576698