// 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 extends B { var captured, captured2; var typedList; // p must be inside a box (in dart2js). A(p) : captured = (() => p), super(p++) { // Make constructor body non-inlinable. try {} catch (e) {} captured2 = () => p++; // In the current implementation of dart2js makes the generic type an // argument to the body. typedList = []; } foo() => captured(); bar() => captured2(); } @pragma('dart2js:noInline') @pragma('dart2js:assumeDynamic') confuse(x) => x; main() { var a = confuse(new A(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); Expect.isFalse(a is A); Expect.isFalse(a2 is A); Expect.isFalse(a2 is A); Expect.isTrue(a2 is A); 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); Expect.isFalse(a2.typedList is List); Expect.isFalse(a.typedList is List); Expect.isFalse(a2.typedList is List); }