mirror of
https://github.com/dart-lang/sdk
synced 2024-10-06 13:35:05 +00:00
Fix runtime strong mode error in ListMixin
R=jacobr@google.com Review URL: https://codereview.chromium.org/2544163002 .
This commit is contained in:
parent
ec81359fc0
commit
201c5b9297
|
@ -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)))();
|
||||
|
|
|
@ -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)))();
|
||||
|
|
|
@ -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)))();
|
||||
|
|
|
@ -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.
|
@ -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,
|
||||
|
||||
|
|
40
pkg/dev_compiler/test/codegen/lib/collection/list_test.dart
Normal file
40
pkg/dev_compiler/test/codegen/lib/collection/list_test.dart
Normal 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();
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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];
|
||||
|
|
Loading…
Reference in a new issue