|
@@ -88,6 +88,11 @@ private abstract NullCoalAbstractResolve(NullCoalAbstractData) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+abstract Message(String) from String {
|
|
|
|
|
+ public function scream()
|
|
|
|
|
+ trace(this.toUpperCase());
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
@:nullSafety(StrictThreaded)
|
|
@:nullSafety(StrictThreaded)
|
|
|
class TestNullCoalescing extends Test {
|
|
class TestNullCoalescing extends Test {
|
|
|
final nullInt:Null<Int> = null;
|
|
final nullInt:Null<Int> = null;
|
|
@@ -213,7 +218,9 @@ class TestNullCoalescing extends Test {
|
|
|
a ??= 5;
|
|
a ??= 5;
|
|
|
eq(a, 5);
|
|
eq(a, 5);
|
|
|
t(HelperMacros.isNullable(a ??= null));
|
|
t(HelperMacros.isNullable(a ??= null));
|
|
|
|
|
+ t(HelperMacros.isNullable(a ??= a));
|
|
|
f(HelperMacros.isNullable(a ??= 5));
|
|
f(HelperMacros.isNullable(a ??= 5));
|
|
|
|
|
+ f(HelperMacros.isNullable(a ??= count));
|
|
|
var a:Null<Int> = null;
|
|
var a:Null<Int> = null;
|
|
|
eq(a ??= 5, 5);
|
|
eq(a ??= 5, 5);
|
|
|
eq(a, 5);
|
|
eq(a, 5);
|
|
@@ -329,6 +336,11 @@ class TestNullCoalescing extends Test {
|
|
|
eq("value", obj.field ?? "fail");
|
|
eq("value", obj.field ?? "fail");
|
|
|
eq("value", value);
|
|
eq("value", value);
|
|
|
|
|
|
|
|
|
|
+ var m:Message = "foo";
|
|
|
|
|
+ (m ??= "bar").scream();
|
|
|
|
|
+ eq("unit.Message", HelperMacros.typeString(m ??= "bar"));
|
|
|
|
|
+ eq("foo", '$m');
|
|
|
|
|
+
|
|
|
// TODO: this fails at the moment with some "not enough arguments error"
|
|
// TODO: this fails at the moment with some "not enough arguments error"
|
|
|
// mutAssignLeft(obj.field) ??= "not value";
|
|
// mutAssignLeft(obj.field) ??= "not value";
|
|
|
// eq(5, obj.getGetCounter());
|
|
// eq(5, obj.getGetCounter());
|