blob: d60cc65c82e567edfe64007e1cf9cef674469824 [file] [log] [blame]
// Copyright (c) 2020, 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 test for type inference and ?? operator.
// -------------------------- If-null expression. ------------------------------
T hest1<T>() => throw "hest";
test1() {
String? foo() => null;
String bar() => "bar";
var s = foo() ?? bar();
String s2 = hest1() ?? "fisk";
}
// ------------------------- If-null property set. -----------------------------
class A2 {
String? foo;
}
test2(A2 a) {
var s = (a.foo ??= "bar");
}
// ------------------------------ If-null set. ---------------------------------
test3() {
String? s = null;
var s2 = (s ??= "bar");
}
// --------------------------- If-null index set. ------------------------------
test4() {
List<String?> list = [null];
var s = (list[0] ??= "bar");
}
// ------------------------ If-null super index set. ---------------------------
class A5 {
void operator []=(int index, String? value) {}
String? operator [](int index) => null;
}
class B5 extends A5 {
test5() {
var s = (super[0] ??= "bar");
}
}
// -------------------------- Extension index set. -----------------------------
extension E6 on double {
void operator []=(int index, String? value) {}
String? operator [](int index) => null;
}
test6() {
var s = (E6(3.14)[0] ??= "bar");
}
// ------------------------ Null-aware if-null set. ----------------------------
class A7 {
String foo = "foo";
String? bar;
}
test7(A7? a) {
var s = (a?.foo ??= "bar");
var s2 = (a?.bar ??= "bar");
}
main() {}