library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
//   local2 = value; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
//   local4 = 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
//   local6 = 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
//   local2 = value; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
//   local4 = 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
//   local6 = 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
//   local2 = value; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
//   local4 = 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
//   local6 = 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
//   local2 = value; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
//   local4 = 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
//   local6 = 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
//   local4 += 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
//   local4 += 0; // error
//   ^^^^^^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;

import "dart:async";

static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
  final T? local2;
  core::bool #local2#isSet = false;
  function #local2#get() → T%
    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
  function #local2#set(T% #t1) → dynamic
    if(#local2#isSet)
      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
    else {
      #local2#isSet = true;
      return local2 = #t1;
    }
  final core::int? local4;
  function #local4#get() → core::int
    return let final core::int? #t2 = local4 in #t2.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t2{core::int};
  function #local4#set(core::int #t3) → dynamic
    if(local4.==(null))
      return local4 = #t3;
    else
      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
  final FutureOr<core::int>? local6;
  function #local6#get() → FutureOr<core::int>
    return let final FutureOr<core::int>? #t4 = local6 in #t4.==(null) ?{FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t4{FutureOr<core::int>};
  function #local6#set(FutureOr<core::int>#t5) → dynamic
    if(local6.==(null))
      return local6 = #t5;
    else
      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
  #local2#set.call(value);
  #local4#set.call(0);
  #local6#set.call(0);
  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
  local2 = value; // error
  ^^^^^^" in #local2#set.call(value);
  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
  local4 = 0; // error
  ^^^^^^" in #local4#set.call(0);
  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
  local6 = 0; // error
  ^^^^^^" in #local6#set.call(0);
};
static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
  final T? local2;
  core::bool #local2#isSet = false;
  function #local2#get() → T%
    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
  function #local2#set(T% #t9) → dynamic
    if(#local2#isSet)
      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
    else {
      #local2#isSet = true;
      return local2 = #t9;
    }
  final core::int? local4;
  function #local4#get() → core::int
    return let final core::int? #t10 = local4 in #t10.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t10{core::int};
  function #local4#set(core::int #t11) → dynamic
    if(local4.==(null))
      return local4 = #t11;
    else
      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
  final FutureOr<core::int>? local6;
  function #local6#get() → FutureOr<core::int>
    return let final FutureOr<core::int>? #t12 = local6 in #t12.==(null) ?{FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t12{FutureOr<core::int>};
  function #local6#set(FutureOr<core::int>#t13) → dynamic
    if(local6.==(null))
      return local6 = #t13;
    else
      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
  if(b) {
    #local2#set.call(value);
    #local4#set.call(0);
    #local6#set.call(0);
  }
  #local2#set.call(value);
  #local4#set.call(0);
  #local6#set.call(0);
  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
  local2 = value; // error
  ^^^^^^" in #local2#set.call(value);
  let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
  local4 = 0; // error
  ^^^^^^" in #local4#set.call(0);
  let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
  local6 = 0; // error
  ^^^^^^" in #local6#set.call(0);
};
static field () → core::Null? fieldCompound = () → core::Null? {
  final core::int? local4;
  function #local4#get() → core::int
    return let final core::int? #t17 = local4 in #t17.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t17{core::int};
  function #local4#set(core::int #t18) → dynamic
    if(local4.==(null))
      return local4 = #t18;
    else
      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
  #local4#set.call(0);
  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
  local4 += 0; // error
  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
};
static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
  final self::methodDirect::T? local2;
  core::bool #local2#isSet = false;
  function #local2#get() → self::methodDirect::T%
    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
  function #local2#set(self::methodDirect::T% #t20) → dynamic
    if(#local2#isSet)
      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
    else {
      #local2#isSet = true;
      return local2 = #t20;
    }
  final core::int? local4;
  function #local4#get() → core::int
    return let final core::int? #t21 = local4 in #t21.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t21{core::int};
  function #local4#set(core::int #t22) → dynamic
    if(local4.==(null))
      return local4 = #t22;
    else
      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
  final FutureOr<core::int>? local6;
  function #local6#get() → FutureOr<core::int>
    return let final FutureOr<core::int>? #t23 = local6 in #t23.==(null) ?{FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t23{FutureOr<core::int>};
  function #local6#set(FutureOr<core::int>#t24) → dynamic
    if(local6.==(null))
      return local6 = #t24;
    else
      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
  #local2#set.call(value);
  #local4#set.call(0);
  #local6#set.call(0);
  let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
  local2 = value; // error
  ^^^^^^" in #local2#set.call(value);
  let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
  local4 = 0; // error
  ^^^^^^" in #local4#set.call(0);
  let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
  local6 = 0; // error
  ^^^^^^" in #local6#set.call(0);
}
static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
  final self::methodConditional::T? local2;
  core::bool #local2#isSet = false;
  function #local2#get() → self::methodConditional::T%
    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
  function #local2#set(self::methodConditional::T% #t28) → dynamic
    if(#local2#isSet)
      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
    else {
      #local2#isSet = true;
      return local2 = #t28;
    }
  final core::int? local4;
  function #local4#get() → core::int
    return let final core::int? #t29 = local4 in #t29.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t29{core::int};
  function #local4#set(core::int #t30) → dynamic
    if(local4.==(null))
      return local4 = #t30;
    else
      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
  final FutureOr<core::int>? local6;
  function #local6#get() → FutureOr<core::int>
    return let final FutureOr<core::int>? #t31 = local6 in #t31.==(null) ?{FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t31{FutureOr<core::int>};
  function #local6#set(FutureOr<core::int>#t32) → dynamic
    if(local6.==(null))
      return local6 = #t32;
    else
      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
  if(b) {
    #local2#set.call(value);
    #local4#set.call(0);
    #local6#set.call(0);
  }
  #local2#set.call(value);
  #local4#set.call(0);
  #local6#set.call(0);
  let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
  local2 = value; // error
  ^^^^^^" in #local2#set.call(value);
  let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
  local4 = 0; // error
  ^^^^^^" in #local4#set.call(0);
  let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
  local6 = 0; // error
  ^^^^^^" in #local6#set.call(0);
}
static method methodCompound() → dynamic {
  final core::int? local4;
  function #local4#get() → core::int
    return let final core::int? #t36 = local4 in #t36.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t36{core::int};
  function #local4#set(core::int #t37) → dynamic
    if(local4.==(null))
      return local4 = #t37;
    else
      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
  #local4#set.call(0);
  let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
  local4 += 0; // error
  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
}
static method main() → dynamic {}
