| // Copyright (c) 2026, 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 body of a primary constructor body uses the primary parameter scope. | |
| // Instance variables are accessable in this scope, but not any declaring | |
| // parameters, super parameters, or initializing formals. | |
| import "package:expect/expect.dart"; | |
| class C1(var int x) { | |
| this { | |
| x++; | |
| } | |
| } | |
| class C2(var String x) { | |
| String Function() captureAtDeclaration = () => x; | |
| String Function() captureInInitializer; | |
| String Function()? captureInBody; | |
| this : captureInInitializer = (() => x) { | |
| captureInBody = () => x; | |
| } | |
| } | |
| main() { | |
| var c1 = C1(1); | |
| Expect.equals(c1.x, 2); | |
| var c2 = C2('old'); | |
| Expect.equals(c2.captureAtDeclaration(), 'old'); | |
| Expect.equals(c2.captureInInitializer(), 'old'); | |
| Expect.equals(c2.captureInBody!(), 'old'); | |
| c2.x = 'new'; | |
| Expect.equals(c2.captureAtDeclaration(), 'old'); | |
| Expect.equals(c2.captureInInitializer(), 'old'); | |
| Expect.equals(c2.captureInBody!(), 'new'); | |
| } |