| Index: tests/language/constructor12_test.dart
|
| diff --git a/tests/language/constructor12_test.dart b/tests/language/constructor12_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..28539921b55d90bfe97e92ea76cb3acfb16b57e2
|
| --- /dev/null
|
| +++ b/tests/language/constructor12_test.dart
|
| @@ -0,0 +1,65 @@
|
| +// Copyright (c) 2015, 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 "package:expect/expect.dart";
|
| +
|
| +class B {
|
| + final z;
|
| + B(this.z);
|
| +
|
| + foo() => this.z;
|
| +}
|
| +
|
| +class A<T> extends B {
|
| + var captured, captured2;
|
| + var typedList;
|
| +
|
| + // p must be inside a box (in dart2js).
|
| + A(p) : captured = (() => p), super(p++) {
|
| + // Make non-inlinable.
|
| + try {} catch(e) {}
|
| +
|
| + captured2 = () => p++;
|
| +
|
| + // In the current implementation of dart2js makes the generic type an
|
| + // argument to the body.
|
| + typedList = <T>[];
|
| + }
|
| +
|
| + foo() => captured();
|
| + bar() => captured2();
|
| +}
|
| +
|
| +@NoInline()
|
| +@AssumeDynamic()
|
| +confuse(x) => x;
|
| +
|
| +main() {
|
| + var a = confuse(new A<int>(1));
|
| + var a2 = confuse(new A(2));
|
| + var b = confuse(new B(3));
|
| + Expect.equals(2, a.foo());
|
| + Expect.equals(3, a2.foo());
|
| + Expect.equals(3, b.foo());
|
| + Expect.equals(1, a.z);
|
| + Expect.equals(2, a2.z);
|
| + Expect.equals(3, b.z);
|
| + Expect.isTrue(a is A<int>);
|
| + Expect.isFalse(a is A<String>);
|
| + Expect.isTrue(a2 is A<int>);
|
| + Expect.isTrue(a2 is A<String>);
|
| + Expect.equals(2, a.bar());
|
| + Expect.equals(3, a2.bar());
|
| + Expect.equals(3, a.foo());
|
| + Expect.equals(4, a2.foo());
|
| + Expect.equals(0, a.typedList.length);
|
| + Expect.equals(0, a2.typedList.length);
|
| + a.typedList.add(499);
|
| + Expect.equals(1, a.typedList.length);
|
| + Expect.equals(0, a2.typedList.length);
|
| + Expect.isTrue(a.typedList is List<int>);
|
| + Expect.isTrue(a2.typedList is List<int>);
|
| + Expect.isFalse(a.typedList is List<String>);
|
| + Expect.isTrue(a2.typedList is List<String>);
|
| +}
|
|
|