Files
sdk/pkg/vm/testcases/bytecode/instance_creation.dart
T
Alexander Markov 53497549ab [vm] Specialize 'new List()' on kernel AST
In VM, 'new List' is equivalent to either 'new _GrowableList' or
'new _List' depending on the number of arguments.
This change does the transformation early (on kernel AST), in order
to have specialized representation in TFA and in bytecode.

Change-Id: I46f0db8cc19efb3a53fdbe971ac26bdd2736fbda
Reviewed-on: https://dart-review.googlesource.com/76283
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-09-25 00:38:57 +00:00

91 lines
1.4 KiB
Dart

// Copyright (c) 2018, 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.
// ignore_for_file: native_function_body_in_non_sdk_code
class Base<T1, T2> {
T1 t1;
T2 t2;
Base() {
print('Base: $T1, $T2');
}
}
class A extends Base<int, String> {
A(String s);
}
class B<T> extends Base<List<T>, String> {
B() {
print('B: $T');
}
}
class C {
C(String s) {
print('C: $s');
}
}
foo1() => new C('hello');
void foo2() {
new A('hi');
new B<int>();
}
void foo3<T>() {
new B<List<T>>();
}
class E<K, V> {
test_reuse1() => new Map<K, V>();
}
class F<K, V> extends E<String, List<V>> {
test_reuse2() => new Map<String, List<V>>();
}
class G<K, V> {
G();
factory G.test_factory() => new H<String, K, V>();
}
class H<P1, P2, P3> extends G<P2, P3> {}
void foo4() {
new G<int, List<String>>.test_factory();
}
class I {
I(param);
factory I.test_factory2({param}) => new I(param);
}
void foo5() {
new I.test_factory2();
new I.test_factory2(param: 42);
}
class J {
factory J() native "agent_J";
}
abstract class K<A, B> {
factory K() => new TestTypeArgReuse<A, B>();
}
class TestTypeArgReuse<P, Q> extends Base<P, Q> implements K<P, Q> {}
foo6() => new List<String>();
foo7(int n) => new List<int>(n);
main() {
foo1();
foo2();
foo3<String>();
}