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