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