| // Copyright (c) 2012, 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. |
| |
| // @dart = 2.9 |
| |
| // Test that a parameter used in two different closures defined in a |
| // constructor initializer, is properly boxed. |
| |
| import "package:expect/expect.dart"; |
| |
| class A { |
| var f; |
| var g; |
| A(a) |
| : f = (() => 42 + a), |
| g = (() => ++a) { |
| a = 4; |
| } |
| } |
| |
| class B extends A { |
| B() : super(42); |
| } |
| |
| class C extends A { |
| var h; |
| C(a) |
| : h = (() => ++a), |
| super(42); |
| } |
| |
| main() { |
| dynamic a = new A(1); |
| Expect.equals(46, a.f()); |
| Expect.equals(5, a.g()); |
| Expect.equals(47, a.f()); |
| |
| a = new B(); |
| Expect.equals(46, a.f()); |
| Expect.equals(5, a.g()); |
| Expect.equals(47, a.f()); |
| |
| a = new C(0); |
| Expect.equals(46, a.f()); |
| Expect.equals(5, a.g()); |
| Expect.equals(47, a.f()); |
| Expect.equals(1, a.h()); |
| Expect.equals(2, a.h()); |
| Expect.equals(47, a.f()); |
| Expect.equals(6, a.g()); |
| Expect.equals(48, a.f()); |
| } |