blob: 0743c91d08c6c05548feccd7be249ffbf0457a0f [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.
/// @assertion We say that a type T0 is a subtype of a type T1 (written
/// T0 <: T1) when:
/// Assume that T1, .. Ts are types, and V resolves to an extension type
/// declaration of the following form:
///
/// extension type V<X1 extends B1, .. Xs extends Bs>(T id) ... {
/// ... // Members.
/// }
/// It is then allowed to use V<T1, .. Tk> as a type.
///
/// @description Check that if type `T0` is an extension type `V` with nullable
/// representation type then it is subtype of `Object?`
/// @author sgrekhov22@gmail.com
///
/// @description Check that if type T0 is a subtype of a type T1, then instance
/// of T0 can be assigned to the class member of type T1
/// @author sgrekhov@unipro.ru
///
/// This test is generated from test_types/extension_type_A03.dart and
/// test_cases/class_member_x01.dart. Don't modify it!
/// If you need to change this test, then change one of the files above and then
/// run generator/generator.dart to regenerate the tests.
// SharedOptions=--enable-experiment=inline-class
extension type const V<T>(T id) {}
V<int?> t0Instance = V<int?>(42);
class ClassMember1_t01 {
static Object? s = t0Instance;
Object? m = t0Instance;
Object? _p = t0Instance;
ClassMember1_t01() {
s = t0Instance;
m = t0Instance;
_p = t0Instance;
}
ClassMember1_t01.named(Object? value) {
s = value;
m = value;
_p = value;
}
ClassMember1_t01.short(this.m, this._p);
test() {
s = t0Instance;
m = t0Instance;
_p = t0Instance;
}
set setter(Object? val) {
_p = val;
}
Object? get getter => _p;
static staticTest() {
s = t0Instance;
}
static set staticSetter(Object? val) {
s = val;
}
static Object? get staticGetter => t0Instance;
}
main() {
ClassMember1_t01 c1 = new ClassMember1_t01();
c1 = new ClassMember1_t01.short(t0Instance,
t0Instance);
c1 = new ClassMember1_t01.named(t0Instance);
c1.m = t0Instance;
c1.test();
c1.setter = t0Instance;
c1.getter;
ClassMember1_t01.s = t0Instance;
ClassMember1_t01.staticTest();
ClassMember1_t01.staticSetter = t0Instance;
ClassMember1_t01.staticGetter;
}