blob: 5052aa475fc8671017f82eb92d3d1c2e9ddd644a [file] [log] [blame]
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
static method main() dynamic {
core::bool b = false;
final core::int? lateLocal;
function #lateLocal#get() → core::int
return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
function #lateLocal#set(core::int #t2) → dynamic
if(lateLocal.==(null))
return lateLocal = #t2;
else
throw new _in::LateError::localAI("lateLocal");
if(b) {
#lateLocal#set.call(123);
}
self::throws(() core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
if(!b) {
self::expect(123, #lateLocal#set.call(123));
self::expect(123, #lateLocal#get.call());
}
self::throws(() core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
function local<T extends core::Object? = dynamic>(T% value) Null {
final T? lateGenericLocal;
core::bool #lateGenericLocal#isSet = false;
function #lateGenericLocal#get() → T%
return #lateGenericLocal#isSet ?{T%} lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
function #lateGenericLocal#set(T% #t3) → dynamic
if(#lateGenericLocal#isSet)
throw new _in::LateError::localAI("lateGenericLocal");
else {
#lateGenericLocal#isSet = true;
return lateGenericLocal = #t3;
}
if(b) {
#lateGenericLocal#set.call(value);
}
self::throws(() T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
if(!b) {
self::expect(value, #lateGenericLocal#set.call(value));
self::expect(value, #lateGenericLocal#get.call());
}
self::throws(() T% => #lateGenericLocal#set.call(value), "Write value to initialized lateGenericLocal");
}
local.call<core::int?>(null);
local.call<core::int?>(42);
local.call<core::int>(42);
}
static method expect(dynamic expected, dynamic actual) dynamic {
if(!expected.{core::Object::==}(actual))
throw "Expected ${expected}, actual ${actual}";
}
static method throws(() dynamic f, core::String message) dynamic {
dynamic value;
try {
value = f.call();
}
on core::LateInitializationError catch(final core::LateInitializationError e) {
core::print(e);
return;
}
throw "${message}: ${value}";
}