Fix runtime strong mode error in ListMixin

R=jacobr@google.com

Review URL: https://codereview.chromium.org/2544163002 .
This commit is contained in:
Vijay Menon 2016-12-01 15:41:46 -08:00
parent ec81359fc0
commit 201c5b9297
9 changed files with 85 additions and 38 deletions

View file

@ -5642,6 +5642,7 @@ define([], function() {
});
_internal.POWERS_OF_TEN = dart.constList([1.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, 10000000.0, 100000000.0, 1000000000.0, 10000000000.0, 100000000000.0, 1000000000000.0, 10000000000000.0, 100000000000000.0, 1000000000000000.0, 10000000000000000.0, 100000000000000000.0, 1000000000000000000.0, 10000000000000000000.0, 100000000000000000000.0, 1e+21, 1e+22], core.double);
const _string = Symbol('_string');
const _filter = Symbol('_filter');
collection.ListMixin$ = dart.generic(E => {
let ListIteratorOfE = () => (ListIteratorOfE = dart.constFn(_internal.ListIterator$(E)))();
let VoidToE = () => (VoidToE = dart.constFn(dart.functionType(E, [])))();
@ -5653,6 +5654,7 @@ define([], function() {
let ListOfE = () => (ListOfE = dart.constFn(core.List$(E)))();
let SetOfE = () => (SetOfE = dart.constFn(core.Set$(E)))();
let IterableOfE = () => (IterableOfE = dart.constFn(core.Iterable$(E)))();
let JSArrayOfE = () => (JSArrayOfE = dart.constFn(_interceptors.JSArray$(E)))();
let ListMapViewOfE = () => (ListMapViewOfE = dart.constFn(_internal.ListMapView$(E)))();
let ReversedListIterableOfE = () => (ReversedListIterableOfE = dart.constFn(_internal.ReversedListIterable$(E)))();
let ETovoid = () => (ETovoid = dart.constFn(dart.functionType(dart.void, [E])))();
@ -5934,13 +5936,14 @@ define([], function() {
return false;
}
removeWhere(test) {
collection.ListMixin._filter(this, test, false);
this[_filter](test, false);
}
retainWhere(test) {
collection.ListMixin._filter(this, test, true);
this[_filter](test, true);
}
static _filter(source, test, retainMatching) {
let retained = [];
[_filter](test, retainMatching) {
let source = this;
let retained = JSArrayOfE().of([]);
let length = source[dartx.length];
for (let i = 0; i < dart.notNull(length); i++) {
let element = source[dartx._get](i);
@ -6202,6 +6205,7 @@ define([], function() {
remove: dart.definiteFunctionType(core.bool, [core.Object]),
removeWhere: dart.definiteFunctionType(dart.void, [ETobool()]),
retainWhere: dart.definiteFunctionType(dart.void, [ETobool()]),
[_filter]: dart.definiteFunctionType(dart.void, [dynamicTobool(), core.bool]),
clear: dart.definiteFunctionType(dart.void, []),
removeLast: dart.definiteFunctionType(E, []),
sort: dart.definiteFunctionType(dart.void, [], [EAndEToint()]),
@ -6219,9 +6223,7 @@ define([], function() {
removeAt: dart.definiteFunctionType(E, [core.int]),
insertAll: dart.definiteFunctionType(dart.void, [core.int, IterableOfE()]),
setAll: dart.definiteFunctionType(dart.void, [core.int, IterableOfE()])
}),
statics: () => ({_filter: dart.definiteFunctionType(dart.void, [core.List, dynamicTobool(), core.bool])}),
names: ['_filter']
})
});
dart.defineExtensionMembers(ListMixin, [
'elementAt',
@ -27107,7 +27109,6 @@ define([], function() {
});
collection._DoubleLinkedQueueSentinel = _DoubleLinkedQueueSentinel();
const _sentinel = Symbol('_sentinel');
const _filter = Symbol('_filter');
collection.DoubleLinkedQueue$ = dart.generic(E => {
let _DoubleLinkedQueueSentinelOfE = () => (_DoubleLinkedQueueSentinelOfE = dart.constFn(collection._DoubleLinkedQueueSentinel$(E)))();
let DoubleLinkedQueueOfE = () => (DoubleLinkedQueueOfE = dart.constFn(collection.DoubleLinkedQueue$(E)))();

View file

@ -5642,6 +5642,7 @@
});
_internal.POWERS_OF_TEN = dart.constList([1.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, 10000000.0, 100000000.0, 1000000000.0, 10000000000.0, 100000000000.0, 1000000000000.0, 10000000000000.0, 100000000000000.0, 1000000000000000.0, 10000000000000000.0, 100000000000000000.0, 1000000000000000000.0, 10000000000000000000.0, 100000000000000000000.0, 1e+21, 1e+22], core.double);
const _string = Symbol('_string');
const _filter = Symbol('_filter');
collection.ListMixin$ = dart.generic(E => {
let ListIteratorOfE = () => (ListIteratorOfE = dart.constFn(_internal.ListIterator$(E)))();
let VoidToE = () => (VoidToE = dart.constFn(dart.functionType(E, [])))();
@ -5653,6 +5654,7 @@
let ListOfE = () => (ListOfE = dart.constFn(core.List$(E)))();
let SetOfE = () => (SetOfE = dart.constFn(core.Set$(E)))();
let IterableOfE = () => (IterableOfE = dart.constFn(core.Iterable$(E)))();
let JSArrayOfE = () => (JSArrayOfE = dart.constFn(_interceptors.JSArray$(E)))();
let ListMapViewOfE = () => (ListMapViewOfE = dart.constFn(_internal.ListMapView$(E)))();
let ReversedListIterableOfE = () => (ReversedListIterableOfE = dart.constFn(_internal.ReversedListIterable$(E)))();
let ETovoid = () => (ETovoid = dart.constFn(dart.functionType(dart.void, [E])))();
@ -5934,13 +5936,14 @@
return false;
}
removeWhere(test) {
collection.ListMixin._filter(this, test, false);
this[_filter](test, false);
}
retainWhere(test) {
collection.ListMixin._filter(this, test, true);
this[_filter](test, true);
}
static _filter(source, test, retainMatching) {
let retained = [];
[_filter](test, retainMatching) {
let source = this;
let retained = JSArrayOfE().of([]);
let length = source[dartx.length];
for (let i = 0; i < dart.notNull(length); i++) {
let element = source[dartx._get](i);
@ -6202,6 +6205,7 @@
remove: dart.definiteFunctionType(core.bool, [core.Object]),
removeWhere: dart.definiteFunctionType(dart.void, [ETobool()]),
retainWhere: dart.definiteFunctionType(dart.void, [ETobool()]),
[_filter]: dart.definiteFunctionType(dart.void, [dynamicTobool(), core.bool]),
clear: dart.definiteFunctionType(dart.void, []),
removeLast: dart.definiteFunctionType(E, []),
sort: dart.definiteFunctionType(dart.void, [], [EAndEToint()]),
@ -6219,9 +6223,7 @@
removeAt: dart.definiteFunctionType(E, [core.int]),
insertAll: dart.definiteFunctionType(dart.void, [core.int, IterableOfE()]),
setAll: dart.definiteFunctionType(dart.void, [core.int, IterableOfE()])
}),
statics: () => ({_filter: dart.definiteFunctionType(dart.void, [core.List, dynamicTobool(), core.bool])}),
names: ['_filter']
})
});
dart.defineExtensionMembers(ListMixin, [
'elementAt',
@ -27107,7 +27109,6 @@
});
collection._DoubleLinkedQueueSentinel = _DoubleLinkedQueueSentinel();
const _sentinel = Symbol('_sentinel');
const _filter = Symbol('_filter');
collection.DoubleLinkedQueue$ = dart.generic(E => {
let _DoubleLinkedQueueSentinelOfE = () => (_DoubleLinkedQueueSentinelOfE = dart.constFn(collection._DoubleLinkedQueueSentinel$(E)))();
let DoubleLinkedQueueOfE = () => (DoubleLinkedQueueOfE = dart.constFn(collection.DoubleLinkedQueue$(E)))();

View file

@ -5640,6 +5640,7 @@ dart.defineLazy(core.double, {
});
_internal.POWERS_OF_TEN = dart.constList([1.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, 10000000.0, 100000000.0, 1000000000.0, 10000000000.0, 100000000000.0, 1000000000000.0, 10000000000000.0, 100000000000000.0, 1000000000000000.0, 10000000000000000.0, 100000000000000000.0, 1000000000000000000.0, 10000000000000000000.0, 100000000000000000000.0, 1e+21, 1e+22], core.double);
const _string = Symbol('_string');
const _filter = Symbol('_filter');
collection.ListMixin$ = dart.generic(E => {
let ListIteratorOfE = () => (ListIteratorOfE = dart.constFn(_internal.ListIterator$(E)))();
let VoidToE = () => (VoidToE = dart.constFn(dart.functionType(E, [])))();
@ -5651,6 +5652,7 @@ collection.ListMixin$ = dart.generic(E => {
let ListOfE = () => (ListOfE = dart.constFn(core.List$(E)))();
let SetOfE = () => (SetOfE = dart.constFn(core.Set$(E)))();
let IterableOfE = () => (IterableOfE = dart.constFn(core.Iterable$(E)))();
let JSArrayOfE = () => (JSArrayOfE = dart.constFn(_interceptors.JSArray$(E)))();
let ListMapViewOfE = () => (ListMapViewOfE = dart.constFn(_internal.ListMapView$(E)))();
let ReversedListIterableOfE = () => (ReversedListIterableOfE = dart.constFn(_internal.ReversedListIterable$(E)))();
let ETovoid = () => (ETovoid = dart.constFn(dart.functionType(dart.void, [E])))();
@ -5932,13 +5934,14 @@ collection.ListMixin$ = dart.generic(E => {
return false;
}
removeWhere(test) {
collection.ListMixin._filter(this, test, false);
this[_filter](test, false);
}
retainWhere(test) {
collection.ListMixin._filter(this, test, true);
this[_filter](test, true);
}
static _filter(source, test, retainMatching) {
let retained = [];
[_filter](test, retainMatching) {
let source = this;
let retained = JSArrayOfE().of([]);
let length = source[dartx.length];
for (let i = 0; i < dart.notNull(length); i++) {
let element = source[dartx._get](i);
@ -6200,6 +6203,7 @@ collection.ListMixin$ = dart.generic(E => {
remove: dart.definiteFunctionType(core.bool, [core.Object]),
removeWhere: dart.definiteFunctionType(dart.void, [ETobool()]),
retainWhere: dart.definiteFunctionType(dart.void, [ETobool()]),
[_filter]: dart.definiteFunctionType(dart.void, [dynamicTobool(), core.bool]),
clear: dart.definiteFunctionType(dart.void, []),
removeLast: dart.definiteFunctionType(E, []),
sort: dart.definiteFunctionType(dart.void, [], [EAndEToint()]),
@ -6217,9 +6221,7 @@ collection.ListMixin$ = dart.generic(E => {
removeAt: dart.definiteFunctionType(E, [core.int]),
insertAll: dart.definiteFunctionType(dart.void, [core.int, IterableOfE()]),
setAll: dart.definiteFunctionType(dart.void, [core.int, IterableOfE()])
}),
statics: () => ({_filter: dart.definiteFunctionType(dart.void, [core.List, dynamicTobool(), core.bool])}),
names: ['_filter']
})
});
dart.defineExtensionMembers(ListMixin, [
'elementAt',
@ -27105,7 +27107,6 @@ collection._DoubleLinkedQueueSentinel$ = dart.generic(E => {
});
collection._DoubleLinkedQueueSentinel = _DoubleLinkedQueueSentinel();
const _sentinel = Symbol('_sentinel');
const _filter = Symbol('_filter');
collection.DoubleLinkedQueue$ = dart.generic(E => {
let _DoubleLinkedQueueSentinelOfE = () => (_DoubleLinkedQueueSentinelOfE = dart.constFn(collection._DoubleLinkedQueueSentinel$(E)))();
let DoubleLinkedQueueOfE = () => (DoubleLinkedQueueOfE = dart.constFn(collection.DoubleLinkedQueue$(E)))();

View file

@ -5643,6 +5643,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
});
_internal.POWERS_OF_TEN = dart.constList([1.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, 10000000.0, 100000000.0, 1000000000.0, 10000000000.0, 100000000000.0, 1000000000000.0, 10000000000000.0, 100000000000000.0, 1000000000000000.0, 10000000000000000.0, 100000000000000000.0, 1000000000000000000.0, 10000000000000000000.0, 100000000000000000000.0, 1e+21, 1e+22], core.double);
const _string = Symbol('_string');
const _filter = Symbol('_filter');
collection.ListMixin$ = dart.generic(E => {
let ListIteratorOfE = () => (ListIteratorOfE = dart.constFn(_internal.ListIterator$(E)))();
let VoidToE = () => (VoidToE = dart.constFn(dart.functionType(E, [])))();
@ -5654,6 +5655,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
let ListOfE = () => (ListOfE = dart.constFn(core.List$(E)))();
let SetOfE = () => (SetOfE = dart.constFn(core.Set$(E)))();
let IterableOfE = () => (IterableOfE = dart.constFn(core.Iterable$(E)))();
let JSArrayOfE = () => (JSArrayOfE = dart.constFn(_interceptors.JSArray$(E)))();
let ListMapViewOfE = () => (ListMapViewOfE = dart.constFn(_internal.ListMapView$(E)))();
let ReversedListIterableOfE = () => (ReversedListIterableOfE = dart.constFn(_internal.ReversedListIterable$(E)))();
let ETovoid = () => (ETovoid = dart.constFn(dart.functionType(dart.void, [E])))();
@ -5935,13 +5937,14 @@ dart_library.library('dart_sdk', null, /* Imports */[
return false;
}
removeWhere(test) {
collection.ListMixin._filter(this, test, false);
this[_filter](test, false);
}
retainWhere(test) {
collection.ListMixin._filter(this, test, true);
this[_filter](test, true);
}
static _filter(source, test, retainMatching) {
let retained = [];
[_filter](test, retainMatching) {
let source = this;
let retained = JSArrayOfE().of([]);
let length = source[dartx.length];
for (let i = 0; i < dart.notNull(length); i++) {
let element = source[dartx._get](i);
@ -6203,6 +6206,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
remove: dart.definiteFunctionType(core.bool, [core.Object]),
removeWhere: dart.definiteFunctionType(dart.void, [ETobool()]),
retainWhere: dart.definiteFunctionType(dart.void, [ETobool()]),
[_filter]: dart.definiteFunctionType(dart.void, [dynamicTobool(), core.bool]),
clear: dart.definiteFunctionType(dart.void, []),
removeLast: dart.definiteFunctionType(E, []),
sort: dart.definiteFunctionType(dart.void, [], [EAndEToint()]),
@ -6220,9 +6224,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
removeAt: dart.definiteFunctionType(E, [core.int]),
insertAll: dart.definiteFunctionType(dart.void, [core.int, IterableOfE()]),
setAll: dart.definiteFunctionType(dart.void, [core.int, IterableOfE()])
}),
statics: () => ({_filter: dart.definiteFunctionType(dart.void, [core.List, dynamicTobool(), core.bool])}),
names: ['_filter']
})
});
dart.defineExtensionMembers(ListMixin, [
'elementAt',
@ -27108,7 +27110,6 @@ dart_library.library('dart_sdk', null, /* Imports */[
});
collection._DoubleLinkedQueueSentinel = _DoubleLinkedQueueSentinel();
const _sentinel = Symbol('_sentinel');
const _filter = Symbol('_filter');
collection.DoubleLinkedQueue$ = dart.generic(E => {
let _DoubleLinkedQueueSentinelOfE = () => (_DoubleLinkedQueueSentinelOfE = dart.constFn(collection._DoubleLinkedQueueSentinel$(E)))();
let DoubleLinkedQueueOfE = () => (DoubleLinkedQueueOfE = dart.constFn(collection.DoubleLinkedQueue$(E)))();

Binary file not shown.

View file

@ -399,6 +399,9 @@ define(['dart_sdk', 'async_helper', 'expect', 'unittest', 'is', 'require'],
'UC16_test': firefox_fail,
},
'lib/collection': {
},
'lib/convert': {
'encoding_test': skip_timeout,

View file

@ -0,0 +1,40 @@
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:collection';
import "package:expect/expect.dart";
class MyList<E> extends Object with ListMixin<E> implements List<E> {
List<E> _list;
MyList(List<E> this._list);
int get length => _list.length;
void set length(int x) {
_list.length = x;
}
E operator[](int idx) => _list[idx];
void operator[]=(int idx, E value) {
_list[idx] = value;
}
}
void testRetainWhere() {
List<int> list = <int>[1, 2, 3];
list.retainWhere((x) => x % 2 == 0);
Expect.equals(1, list.length);
Expect.equals(2, list.first);
list = new MyList<int>([1, 2, 3]);
list.retainWhere((x) => x % 2 == 0);
Expect.equals(1, list.length);
Expect.equals(2, list.first);
}
void main() {
testRetainWhere();
}

View file

@ -85,6 +85,7 @@ main(List<String> arguments) {
'language',
'corelib',
path.join('corelib', 'regexp'),
path.join('lib', 'collection'),
path.join('lib', 'convert'),
path.join('lib', 'html'),
// TODO(vsm): Fix these - they import files from a different directory

View file

@ -267,17 +267,16 @@ abstract class ListMixin<E> implements List<E> {
}
void removeWhere(bool test(E element)) {
_filter(this, test, false);
_filter(test, false);
}
void retainWhere(bool test(E element)) {
_filter(this, test, true);
_filter(test, true);
}
static void _filter(List source,
bool test(var element),
bool retainMatching) {
List retained = [];
void _filter(bool test(var element), bool retainMatching) {
var source = this;
var retained = <E>[];
int length = source.length;
for (int i = 0; i < length; i++) {
var element = source[i];