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

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
« no previous file with comments | « lib/runtime/dart/convert.js ('k') | lib/runtime/dart/math.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/runtime/dart/core.js
diff --git a/lib/runtime/dart/core.js b/lib/runtime/dart/core.js
index c1799ab4b0bf6d2b155f0da97a6e7ff26b82898c..f278e1c1b69b26b48990aebcf210f8977495942c 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();
@@ -1259,18 +1260,21 @@ 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);
+ 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);
@@ -1305,12 +1309,15 @@ var core;
[$checkMutable](reason) {}
[$checkGrowable](reason) {}
[$where](f) {
+ dart.as(f, dart.functionType(bool, [E]));
return new (_internal.IterableMixinWorkaround$(E))().where(this, f);
}
[$expand](f) {
+ dart.as(f, dart.functionType(Iterable, [E]));
return _internal.IterableMixinWorkaround.expand(this, f);
}
[$forEach](f) {
+ dart.as(f, dart.functionType(dart.void, [E]));
let length = this[$length];
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
f(dart.as(this[i], E));
@@ -1320,6 +1327,7 @@ var core;
}
}
[$map](f) {
+ dart.as(f, dart.functionType(dart.dynamic, [E]));
return _internal.IterableMixinWorkaround.mapList(this, f);
}
[$join](separator) {
@@ -1335,29 +1343,38 @@ var core;
return new (_internal.IterableMixinWorkaround$(E))().takeList(this, n);
}
[$takeWhile](test) {
+ dart.as(test, dart.functionType(bool, [E]));
return new (_internal.IterableMixinWorkaround$(E))().takeWhile(this, test);
}
[$skip](n) {
return new (_internal.IterableMixinWorkaround$(E))().skipList(this, n);
}
[$skipWhile](test) {
+ dart.as(test, dart.functionType(bool, [E]));
return new (_internal.IterableMixinWorkaround$(E))().skipWhile(this, test);
}
[$reduce](combine) {
+ dart.as(combine, dart.functionType(E, [E, E]));
return dart.as(_internal.IterableMixinWorkaround.reduce(this, combine), E);
}
[$fold](initialValue, combine) {
+ dart.as(combine, dart.functionType(dart.dynamic, [dart.dynamic, E]));
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) {
+ dart.as(test, dart.functionType(bool, [E]));
return dart.as(_internal.IterableMixinWorkaround.singleWhere(this, test), E);
}
[$elementAt](index) {
@@ -1381,14 +1398,17 @@ var core;
throw new StateError("More than one element");
}
[$any](f) {
+ dart.as(f, dart.functionType(bool, [E]));
return _internal.IterableMixinWorkaround.any(this, f);
}
[$every](f) {
+ dart.as(f, dart.functionType(bool, [E]));
return _internal.IterableMixinWorkaround.every(this, f);
}
[$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 +1453,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,10 +1473,12 @@ var core;
this.length = newLength;
}
[$add](value) {
+ dart.as(value, E);
this[$checkGrowable]('add');
this.push(value);
}
[$addAll](iterable) {
+ dart.as(iterable, Iterable$(E));
for (let e of iterable) {
this[$add](e);
}
@@ -1466,6 +1489,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 +1498,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 +1513,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])) {
@@ -1496,10 +1523,12 @@ var core;
this.splice(index, 0, element);
}
[$insertAll](index, iterable) {
+ dart.as(iterable, Iterable$(E));
this[$checkGrowable]('insertAll');
_internal.IterableMixinWorkaround.insertAllList(this, index, iterable);
}
[$setAll](index, iterable) {
+ dart.as(iterable, Iterable$(E));
this[$checkMutable]('setAll');
_internal.IterableMixinWorkaround.setAllList(this, index, iterable);
}
@@ -1529,9 +1558,11 @@ var core;
return dart.as(this.pop(), E);
}
[$removeWhere](test) {
+ dart.as(test, dart.functionType(bool, [E]));
_internal.IterableMixinWorkaround.removeWhereList(this, test);
}
[$retainWhere](test) {
+ dart.as(test, dart.functionType(bool, [E]));
_internal.IterableMixinWorkaround.removeWhereList(this, element => !dart.notNull(test(element)));
}
[$sublist](start, end) {
@@ -1560,6 +1591,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,10 +1612,12 @@ 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);
}
[$replaceRange](start, end, replacement) {
+ dart.as(replacement, Iterable$(E));
this[$checkGrowable]('removeRange');
_internal.IterableMixinWorkaround.replaceRangeList(this, start, end, replacement);
}
@@ -1591,6 +1625,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');
« no previous file with comments | « lib/runtime/dart/convert.js ('k') | lib/runtime/dart/math.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698