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