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