library test;
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) → void {
  core::int v1 = t = self::getInt();
  core::num v2 = t = self::getNum() as{TypeError} core::int;
  core::int v4 = let final core::int #t1 = t in #t1.{core::num::==}(null) ?{core::int} t = self::getInt() : #t1;
  core::num v5 = let final core::int #t2 = t in #t2.{core::num::==}(null) ?{core::num} t = self::getNum() as{TypeError} core::int : #t2;
  core::int v7 = t = t.{core::num::+}(self::getInt());
  core::num v8 = t = t.{core::num::+}(self::getNum()) as{TypeError} core::int;
  core::int v10 = t = t.{core::num::+}(1);
  core::int v11 = let final core::int #t3 = t in let final core::int #t4 = t = #t3.{core::num::+}(1) in #t3;
}
static method test2(core::num t) → 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 #t5 = t in #t5.{core::num::==}(null) ?{core::num} t = self::getInt() : #t5;
  core::num v5 = let final core::num #t6 = t in #t6.{core::num::==}(null) ?{core::num} t = self::getNum() : #t6;
  core::num v6 = let final core::num #t7 = t in #t7.{core::num::==}(null) ?{core::num} t = self::getDouble() : #t7;
  core::num v7 = t = t.{core::num::+}(self::getInt());
  core::num v8 = t = t.{core::num::+}(self::getNum());
  core::num v9 = t = t.{core::num::+}(self::getDouble());
  core::num v10 = t = t.{core::num::+}(1);
  core::num v11 = let final core::num #t8 = t in let final core::num #t9 = t = #t8.{core::num::+}(1) in #t8;
}
static method test3(core::double t) → void {
  core::num v2 = t = self::getNum() as{TypeError} core::double;
  core::double v3 = t = self::getDouble();
  core::num v5 = let final core::double #t10 = t in #t10.{core::num::==}(null) ?{core::num} t = self::getNum() as{TypeError} core::double : #t10;
  core::double v6 = let final core::double #t11 = t in #t11.{core::num::==}(null) ?{core::double} t = self::getDouble() : #t11;
  core::double v7 = t = t.{core::double::+}(self::getInt());
  core::double v8 = t = t.{core::double::+}(self::getNum());
  core::double v9 = t = t.{core::double::+}(self::getDouble());
  core::double v10 = t = t.{core::double::+}(1);
  core::double v11 = let final core::double #t12 = t in let final core::double #t13 = t = #t12.{core::double::+}(1) in #t12;
}
static method main() → dynamic {}
