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