blob: 2daf2db7c619c0d006068aad5a5319e3b9b1a84e [file] [log] [blame]
// Copyright (c) 2023, 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 current instance (and hence its members) can only be accessed at
/// specific locations in a class: We say that a location ℓ has access to this
/// iff ℓ is inside the body of a declaration of an instance member or a
/// generative constructor, or in the initializing expression of a late instance
/// variable declaration.
///
/// Note that an initializing expression for a non-late instance variable does
/// not have access to this, and neither does any part of a declaration marked
/// static.
///
/// @description Checks that it is a compile-time error if `this` is accessed in
/// an initializing expression of a static variable
/// @author sgrekhov22@gmail.com
class C1 {
int x = 0;
static void Function() y1 = () {print(this.x);};
// ^^^^
// [analyzer] unspecified
// [cfe] unspecified
static int Function() y2 = () => this.x;
// ^^^^
// [analyzer] unspecified
// [cfe] unspecified
static int Function(String s) y3 = (String s) {return this.x;};
// ^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
class C2 {
int x = 0;
static late void Function() y1 = () {print(this.x);};
// ^^^^
// [analyzer] unspecified
// [cfe] unspecified
static late int Function() y2 = () => this.x;
// ^^^^
// [analyzer] unspecified
// [cfe] unspecified
static late int Function(String s) y3 = (String s) {return this.x;};
// ^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
main() {
print(C1);
print(C2);
}