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 {
  lowered core::int? #local1;
  lowered 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 local1#param) → dynamic {
    #local1#isSet = true;
    return #local1 = local1#param;
  }
  #local1#set(0){(core::int) → dynamic};
  self::expect(0, #local1#get(){() → core::int});
  #local1#set(#local1#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
  self::expect(2, #local1#get(){() → core::int});
  lowered has-declared-initializer core::int? #local2;
  lowered 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 local2#param) → dynamic {
    #local2#isSet = true;
    return #local2 = local2#param;
  }
  self::expect(1, #local2#get(){() → core::int});
  #local2#set(#local2#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
  self::expect(3, #local2#get(){() → core::int});
}
static method error() → dynamic {
  lowered final core::int? #local;
  lowered 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 local#param) → dynamic
    if(#local#isSet)
      throw new _in::LateError::localAI("local");
    else {
      #local#isSet = true;
      return #local = local#param;
    }
  #local#set(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(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
    throw "Expected ${expected}, actual ${actual}";
}
