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