library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;

static method test() → dynamic {
  core::int? nullableTopLevelLocal = _in::createSentinel<core::int?>();
  function #nullableTopLevelLocal#get() → core::int?
    return let final core::int? #t1 = nullableTopLevelLocal in _in::isSentinel(#t1) ?{core::int?} throw new _in::LateInitializationErrorImpl::•("Local 'nullableTopLevelLocal' has not been initialized.") : #t1{core::int?};
  function #nullableTopLevelLocal#set(core::int? #t2) → dynamic
    return nullableTopLevelLocal = #t2;
  core::int? nonNullableTopLevelLocal;
  function #nonNullableTopLevelLocal#get() → core::int
    return let final core::int? #t3 = nonNullableTopLevelLocal in #t3.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'nonNullableTopLevelLocal' has not been initialized.") : #t3{core::int};
  function #nonNullableTopLevelLocal#set(core::int #t4) → dynamic
    return nonNullableTopLevelLocal = #t4;
  core::int? nullableTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
  function #nullableTopLevelLocalWithInitializer#get() → core::int?
    return let final core::int? #t5 = nullableTopLevelLocalWithInitializer in _in::isSentinel(#t5) ?{core::int?} nullableTopLevelLocalWithInitializer = null : #t5{core::int?};
  function #nullableTopLevelLocalWithInitializer#set(core::int? #t6) → dynamic
    return nullableTopLevelLocalWithInitializer = #t6;
  core::int? nonNullableTopLevelLocalWithInitializer;
  function #nonNullableTopLevelLocalWithInitializer#get() → core::int
    return let final core::int? #t7 = nonNullableTopLevelLocalWithInitializer in #t7.==(null) ?{core::int} nonNullableTopLevelLocalWithInitializer = 0 : #t7{core::int};
  function #nonNullableTopLevelLocalWithInitializer#set(core::int #t8) → dynamic
    return nonNullableTopLevelLocalWithInitializer = #t8;
  final core::int? nullableFinalTopLevelLocal = _in::createSentinel<core::int?>();
  function #nullableFinalTopLevelLocal#get() → core::int?
    return let final core::int? #t9 = nullableFinalTopLevelLocal in _in::isSentinel(#t9) ?{core::int?} throw new _in::LateInitializationErrorImpl::•("Local 'nullableFinalTopLevelLocal' has not been initialized.") : #t9{core::int?};
  function #nullableFinalTopLevelLocal#set(core::int? #t10) → dynamic
    if(_in::isSentinel(nullableFinalTopLevelLocal))
      return nullableFinalTopLevelLocal = #t10;
    else
      throw new _in::LateInitializationErrorImpl::•("Local 'nullableFinalTopLevelLocal' has already been initialized.");
  final core::int? nonNullableFinalTopLevelLocal;
  function #nonNullableFinalTopLevelLocal#get() → core::int
    return let final core::int? #t11 = nonNullableFinalTopLevelLocal in #t11.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'nonNullableFinalTopLevelLocal' has not been initialized.") : #t11{core::int};
  function #nonNullableFinalTopLevelLocal#set(core::int #t12) → dynamic
    if(nonNullableFinalTopLevelLocal.==(null))
      return nonNullableFinalTopLevelLocal = #t12;
    else
      throw new _in::LateInitializationErrorImpl::•("Local 'nonNullableFinalTopLevelLocal' has already been initialized.");
  final core::int? nullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
  function #nullableFinalTopLevelLocalWithInitializer#get() → core::int?
    return let final core::int? #t13 = nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t13) ?{core::int?} nullableFinalTopLevelLocalWithInitializer = null : #t13{core::int?};
  final core::int? nonNullableFinalTopLevelLocalWithInitializer;
  function #nonNullableFinalTopLevelLocalWithInitializer#get() → core::int
    return let final core::int? #t14 = nonNullableFinalTopLevelLocalWithInitializer in #t14.==(null) ?{core::int} nonNullableFinalTopLevelLocalWithInitializer = 0 : #t14{core::int};
}
static method main() → dynamic {}
