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::LateError::localNI("nullableTopLevelLocal") : #t1{core::int?};
  function #nullableTopLevelLocal#set(core::int? #t2) → dynamic
    return nullableTopLevelLocal = #t2;
  core::int? nonNullableTopLevelLocal = _in::createSentinel<core::int>();
  function #nonNullableTopLevelLocal#get() → core::int
    return let final core::int? #t3 = nonNullableTopLevelLocal in _in::isSentinel(#t3) ?{core::int} throw new _in::LateError::localNI("nonNullableTopLevelLocal") : #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 = _in::createSentinel<core::int>();
  function #nonNullableTopLevelLocalWithInitializer#get() → core::int
    return let final core::int? #t7 = nonNullableTopLevelLocalWithInitializer in _in::isSentinel(#t7) ?{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::LateError::localNI("nullableFinalTopLevelLocal") : #t9{core::int?};
  function #nullableFinalTopLevelLocal#set(core::int? #t10) → dynamic
    if(_in::isSentinel(nullableFinalTopLevelLocal))
      return nullableFinalTopLevelLocal = #t10;
    else
      throw new _in::LateError::localAI("nullableFinalTopLevelLocal");
  final core::int? nonNullableFinalTopLevelLocal = _in::createSentinel<core::int>();
  function #nonNullableFinalTopLevelLocal#get() → core::int
    return let final core::int? #t11 = nonNullableFinalTopLevelLocal in _in::isSentinel(#t11) ?{core::int} throw new _in::LateError::localNI("nonNullableFinalTopLevelLocal") : #t11{core::int};
  function #nonNullableFinalTopLevelLocal#set(core::int #t12) → dynamic
    if(_in::isSentinel(nonNullableFinalTopLevelLocal))
      return nonNullableFinalTopLevelLocal = #t12;
    else
      throw new _in::LateError::localAI("nonNullableFinalTopLevelLocal");
  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 = _in::createSentinel<core::int>();
  function #nonNullableFinalTopLevelLocalWithInitializer#get() → core::int
    return let final core::int? #t14 = nonNullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t14) ?{core::int} nonNullableFinalTopLevelLocalWithInitializer = 0 : #t14{core::int};
  Null neverLocal = _in::createSentinel<Never>();
  function #neverLocal#get() → Never
    return let final Never? #t15 = neverLocal in _in::isSentinel(#t15) ?{Never} throw new _in::LateError::localNI("neverLocal") : #t15{Never};
  function #neverLocal#set(Never #t16) → dynamic
    return neverLocal = #t16;
}
static method main() → dynamic {}
