library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
//   local += 0;
//   ^^^^^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;

static method main() → dynamic {
  core::int? local1;
  core::bool #local1#isSet = false;
  function #local1#get() → core::int
    return #local1#isSet ?{core::int} local1{core::int} : throw new _in::LateError::localNI("local1");
  function #local1#set(core::int #t1) → dynamic {
    #local1#isSet = true;
    return local1 = #t1;
  }
  #local1#set.call(0);
  self::expect(0, #local1#get.call());
  #local1#set.call(#local1#get.call().{core::num::+}(2));
  self::expect(2, #local1#get.call());
  core::int? local2;
  core::bool #local2#isSet = false;
  function #local2#get() → core::int {
    if(!#local2#isSet) {
      local2 = 1;
      #local2#isSet = true;
    }
    return local2{core::int};
  }
  function #local2#set(core::int #t2) → dynamic {
    #local2#isSet = true;
    return local2 = #t2;
  }
  self::expect(1, #local2#get.call());
  #local2#set.call(#local2#get.call().{core::num::+}(2));
  self::expect(3, #local2#get.call());
}
static method error() → dynamic {
  final core::int? local;
  core::bool #local#isSet = false;
  function #local#get() → core::int
    return #local#isSet ?{core::int} local{core::int} : throw new _in::LateError::localNI("local");
  function #local#set(core::int #t3) → dynamic
    if(#local#isSet)
      throw new _in::LateError::localAI("local");
    else {
      #local#isSet = true;
      return local = #t3;
    }
  #local#set.call((let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
  local += 0;
  ^^^^^" in #local#get.call()).{core::num::+}(0));
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!expected.{core::Object::==}(actual))
    throw "Expected ${expected}, actual ${actual}";
}
