| // Copyright (c) 2017, 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. |
| |
| // The purpose of this test is to detect that closures in [LocalInitializer]s |
| // and [FieldInitializer]s are properly converted. This test assumes that |
| // [ArgumentExtractionForRedirecting] transformer was run before closure |
| // conversion. It should introduce one [LocalInitializer] for each argument |
| // passed to the redirecting constructor. If such argument contains a closure, |
| // it would appear in a [LocalInitializer]. The [FieldInitializer] example |
| // requires no such elaboration. |
| |
| class X {} |
| |
| // Closure in field initializer. |
| // |
| class A { |
| X foo; |
| A(X i) : foo = ((() => i)()); |
| } |
| |
| // Closure in local initializer. |
| // |
| class B { |
| X foo; |
| B.named(X foo) {} |
| B(X foo) : this.named((() => foo)()); |
| } |
| |
| main() { |
| A a = new A(new X()); |
| a.foo; // To prevent dartanalyzer from marking [a] as unused. |
| B b = new B(new X()); |
| b.foo; |
| } |