library test;
import self as self;
import "dart:core" as core;

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