library;
import self as self;
import "dart:core" as core;

class Class extends core::Object {
  field core::Function* field1a = #C1;
  field () →* core::int* field1b = #C1;
  field (core::int*) →* core::int* field2 = #C2;
  field (core::int*, core::int*) →* core::int* field3 = #C3;
  field (core::int*, [core::int*]) →* core::int* field4 = #C4;
  field ([core::int*, core::int*]) →* core::int* field5 = #C5;
  field (core::int*, {b: core::int*}) →* core::int* field6 = #C6;
  field ({a: core::int*, b: core::int*}) →* core::int* field7 = #C7;
  synthetic constructor •() → self::Class*
    : super core::Object::•()
    ;
  get getter1a() → core::Function*
    return #C1;
  get getter1b() → () →* core::int*
    return #C1;
  get getter2() → (core::int*) →* core::int*
    return #C2;
  get getter3() → (core::int*, core::int*) →* core::int*
    return #C3;
  get getter4() → (core::int*, [core::int*]) →* core::int*
    return #C4;
  get getter5() → ([core::int*, core::int*]) →* core::int*
    return #C5;
  get getter6() → (core::int*, {b: core::int*}) →* core::int*
    return #C6;
  get getter7() → ({a: core::int*, b: core::int*}) →* core::int*
    return #C7;
  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
  abstract member-signature method toString() → core::String*; -> core::Object::toString
  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
class Subclass extends self::Class {
  synthetic constructor •() → self::Subclass*
    : super self::Class::•()
    ;
  get field1a() → core::Function* {
    self::enableRead = false;
    return #C1;
  }
  get field1b() → () →* core::int* {
    self::enableRead = false;
    return #C1;
  }
  get field2() → (core::int*) →* core::int* {
    self::enableRead = false;
    return #C2;
  }
  get field3() → (core::int*, core::int*) →* core::int* {
    self::enableRead = false;
    return #C3;
  }
  get field4() → (core::int*, [core::int*]) →* core::int* {
    self::enableRead = false;
    return #C4;
  }
  get field5() → ([core::int*, core::int*]) →* core::int* {
    self::enableRead = false;
    return #C5;
  }
  get field6() → (core::int*, {b: core::int*}) →* core::int* {
    self::enableRead = false;
    return #C6;
  }
  get field7() → ({a: core::int*, b: core::int*}) →* core::int* {
    self::enableRead = false;
    return #C7;
  }
  get getter1a() → core::Function* {
    self::enableRead = false;
    return #C1;
  }
  get getter1b() → () →* core::int* {
    self::enableRead = false;
    return #C1;
  }
  get getter2() → (core::int*) →* core::int* {
    self::enableRead = false;
    return #C2;
  }
  get getter3() → (core::int*, core::int*) →* core::int* {
    self::enableRead = false;
    return #C3;
  }
  get getter4() → (core::int*, [core::int*]) →* core::int* {
    self::enableRead = false;
    return #C4;
  }
  get getter5() → ([core::int*, core::int*]) →* core::int* {
    self::enableRead = false;
    return #C5;
  }
  get getter6() → (core::int*, {b: core::int*}) →* core::int* {
    self::enableRead = false;
    return #C6;
  }
  get getter7() → ({a: core::int*, b: core::int*}) →* core::int* {
    self::enableRead = false;
    return #C7;
  }
}
static field core::bool* enableRead = true;
static method read(core::int* value) → core::int*
  return self::enableRead ?{core::int*} value : 1.{core::int::unary-}();
static method method1() → core::int*
  return 0;
static method method2(core::int* a) → core::int*
  return a.{core::int::unary-}();
static method method3(core::int* a, core::int* b) → core::int*
  return a.{core::num::-}(b);
static method method4(core::int* a, [core::int* b = #C8]) → core::int*
  return a.{core::num::-}(b);
static method method5([core::int* a = #C8, core::int* b = #C8]) → core::int*
  return a.{core::num::-}(b);
static method method6(core::int* a, {core::int* b = #C8}) → core::int*
  return a.{core::num::-}(b);
static method method7({core::int* a = #C8, core::int* b = #C8}) → core::int*
  return a.{core::num::-}(b);
static method main() → dynamic {
  self::callField(new self::Class::•());
  self::callGetter(new self::Class::•());
  self::callField(new self::Subclass::•());
  self::callGetter(new self::Subclass::•());
}
static method callField(self::Class* c) → dynamic {
  self::expect(0, c.{self::Class::field1a}());
  self::expect(0, c.{self::Class::field1b}());
  self::expect(42.{core::int::unary-}(), let final self::Class* #t1 = c in let final core::int* #t2 = self::read(42) in #t1.{self::Class::field2}(#t2));
  self::expect(11.{core::int::unary-}(), let final self::Class* #t3 = c in let final core::int* #t4 = self::read(12) in let final core::int* #t5 = self::read(23) in #t3.{self::Class::field3}(#t4, #t5));
  self::expect(12, let final self::Class* #t6 = c in let final core::int* #t7 = self::read(12) in #t6.{self::Class::field4}(#t7));
  self::expect(11.{core::int::unary-}(), let final self::Class* #t8 = c in let final core::int* #t9 = self::read(12) in let final core::int* #t10 = self::read(23) in #t8.{self::Class::field4}(#t9, #t10));
  self::expect(0, c.{self::Class::field5}());
  self::expect(12, let final self::Class* #t11 = c in let final core::int* #t12 = self::read(12) in #t11.{self::Class::field5}(#t12));
  self::expect(11.{core::int::unary-}(), let final self::Class* #t13 = c in let final core::int* #t14 = self::read(12) in let final core::int* #t15 = self::read(23) in #t13.{self::Class::field5}(#t14, #t15));
  self::expect(12, let final self::Class* #t16 = c in let final core::int* #t17 = self::read(12) in #t16.{self::Class::field6}(#t17));
  self::expect(11.{core::int::unary-}(), let final self::Class* #t18 = c in let final core::int* #t19 = self::read(12) in let final core::int* #t20 = self::read(23) in #t18.{self::Class::field6}(#t19, b: #t20));
  self::expect(0, c.{self::Class::field7}());
  self::expect(12, let final self::Class* #t21 = c in let final core::int* #t22 = self::read(12) in #t21.{self::Class::field7}(a: #t22));
  self::expect(23.{core::int::unary-}(), let final self::Class* #t23 = c in let final core::int* #t24 = self::read(23) in #t23.{self::Class::field7}(b: #t24));
  self::expect(11.{core::int::unary-}(), let final self::Class* #t25 = c in let final core::int* #t26 = self::read(12) in let final core::int* #t27 = self::read(23) in #t25.{self::Class::field7}(a: #t26, b: #t27));
  self::expect(11.{core::int::unary-}(), let final self::Class* #t28 = c in let final core::int* #t29 = self::read(23) in let final core::int* #t30 = self::read(12) in #t28.{self::Class::field7}(b: #t29, a: #t30));
}
static method callGetter(self::Class* c) → dynamic {
  self::expect(0, c.{self::Class::getter1a}());
  self::expect(0, c.{self::Class::getter1b}());
  self::expect(42.{core::int::unary-}(), let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}(#t32));
  self::expect(11.{core::int::unary-}(), let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}(#t34, #t35));
  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}(#t37));
  self::expect(11.{core::int::unary-}(), let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}(#t39, #t40));
  self::expect(0, c.{self::Class::getter5}());
  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}(#t42));
  self::expect(11.{core::int::unary-}(), let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}(#t44, #t45));
  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}(#t47));
  self::expect(11.{core::int::unary-}(), let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}(#t49, b: #t50));
  self::expect(0, c.{self::Class::getter7}());
  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}(a: #t52));
  self::expect(23.{core::int::unary-}(), let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}(b: #t54));
  self::expect(11.{core::int::unary-}(), let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}(a: #t56, b: #t57));
  self::expect(11.{core::int::unary-}(), let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}(b: #t59, a: #t60));
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  self::enableRead = true;
  if(!expected.{core::Object::==}(actual))
    throw "Expected ${expected}, ${actual}";
}

constants  {
  #C1 = tearoff self::method1
  #C2 = tearoff self::method2
  #C3 = tearoff self::method3
  #C4 = tearoff self::method4
  #C5 = tearoff self::method5
  #C6 = tearoff self::method6
  #C7 = tearoff self::method7
  #C8 = 0
}
