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

class Test1 extends core::Object {
  field core::int t;
  field core::int? t2;
  constructor •(core::int t, core::int? t2) → self::Test1
    : self::Test1::t = t, self::Test1::t2 = t2, super core::Object::•()
    ;
  method test() → void {
    core::int v1 = this.{self::Test1::t} = self::getInt();
    core::int v4 = let final core::int? #t1 = this.{self::Test1::t2}{core::int?} in #t1 == null ?{core::int} this.{self::Test1::t2} = self::getInt() : #t1{core::int};
    core::int v7 = this.{self::Test1::t} = this.{self::Test1::t}{core::int}.{core::num::+}(self::getInt()){(core::num) → core::int};
    core::int v10 = this.{self::Test1::t} = this.{self::Test1::t}{core::int}.{core::num::+}(1){(core::num) → core::int};
    core::int v11 = let final core::int #t2 = this.{self::Test1::t}{core::int} in let final core::int #t3 = this.{self::Test1::t} = #t2.{core::num::+}(1){(core::num) → core::int} in #t2;
  }
}
class Test2 extends core::Object {
  field core::num t;
  field core::num? t2;
  constructor •(core::num t, core::num? t2) → self::Test2
    : self::Test2::t = t, self::Test2::t2 = t2, super core::Object::•()
    ;
  method test() → void {
    core::int v1 = this.{self::Test2::t} = self::getInt();
    core::num v2 = this.{self::Test2::t} = self::getNum();
    core::double v3 = this.{self::Test2::t} = self::getDouble();
    core::num v4 = let final core::num? #t4 = this.{self::Test2::t2}{core::num?} in #t4 == null ?{core::num} this.{self::Test2::t2} = self::getInt() : #t4{core::num};
    core::num v5 = let final core::num? #t5 = this.{self::Test2::t2}{core::num?} in #t5 == null ?{core::num} this.{self::Test2::t2} = self::getNum() : #t5{core::num};
    core::num v6 = let final core::num? #t6 = this.{self::Test2::t2}{core::num?} in #t6 == null ?{core::num} this.{self::Test2::t2} = self::getDouble() : #t6{core::num};
    core::num v7 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getInt()){(core::num) → core::num};
    core::num v8 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getNum()){(core::num) → core::num};
    core::double v9 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double};
    core::num v10 = this.{self::Test2::t} = this.{self::Test2::t}{core::num}.{core::num::+}(1){(core::num) → core::num};
    core::num v11 = let final core::num #t7 = this.{self::Test2::t}{core::num} in let final core::num #t8 = this.{self::Test2::t} = #t7.{core::num::+}(1){(core::num) → core::num} in #t7;
  }
}
class Test3 extends core::Object {
  field core::double t;
  field core::double? t2;
  constructor •(core::double t, core::double? t2) → self::Test3
    : self::Test3::t = t, self::Test3::t2 = t2, super core::Object::•()
    ;
  method test3() → void {
    core::double v3 = this.{self::Test3::t} = self::getDouble();
    core::double v6 = let final core::double? #t9 = this.{self::Test3::t2}{core::double?} in #t9 == null ?{core::double} this.{self::Test3::t2} = self::getDouble() : #t9{core::double};
    core::double v7 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(self::getInt()){(core::num) → core::double};
    core::double v8 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(self::getNum()){(core::num) → core::double};
    core::double v9 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double};
    core::double v10 = this.{self::Test3::t} = this.{self::Test3::t}{core::double}.{core::double::+}(1){(core::num) → core::double};
    core::double v11 = let final core::double #t10 = this.{self::Test3::t}{core::double} in let final core::double #t11 = this.{self::Test3::t} = #t10.{core::double::+}(1){(core::num) → core::double} in #t10;
  }
}
static method getInt() → core::int
  return 0;
static method getNum() → core::num
  return 0;
static method getDouble() → core::double
  return 0.0;
static method main() → dynamic {}
