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

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