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-}(){() →* core::int*};
static method method1() → core::int*
  return 0;
static method method2(core::int* a) → core::int*
  return a.{core::int::unary-}(){() →* core::int*};
static method method3(core::int* a, core::int* b) → core::int*
  return a.{core::num::-}(b){(core::num*) →* core::int*};
static method method4(core::int* a, [core::int* b = #C8]) → core::int*
  return a.{core::num::-}(b){(core::num*) →* core::int*};
static method method5([core::int* a = #C8, core::int* b = #C8]) → core::int*
  return a.{core::num::-}(b){(core::num*) →* core::int*};
static method method6(core::int* a, {core::int* b = #C8}) → core::int*
  return a.{core::num::-}(b){(core::num*) →* core::int*};
static method method7({core::int* a = #C8, core::int* b = #C8}) → core::int*
  return a.{core::num::-}(b){(core::num*) →* core::int*};
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-}(){() →* core::int*}, 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-}(){() →* core::int*}, 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-}(){() →* core::int*}, 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-}(){() →* core::int*}, 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-}(){() →* core::int*}, 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-}(){() →* core::int*}, 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-}(){() →* core::int*}, 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-}(){() →* core::int*}, 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}(){() →* core::int*});
  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}(#t32){(core::int*) →* core::int*});
  self::expect(11.{core::int::unary-}(){() →* core::int*}, 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){(core::int*, core::int*) →* core::int*});
  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}(#t37){(core::int*, [core::int*]) →* core::int*});
  self::expect(11.{core::int::unary-}(){() →* core::int*}, 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){(core::int*, [core::int*]) →* core::int*});
  self::expect(0, c.{self::Class::getter5}(){([core::int*, core::int*]) →* core::int*});
  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}(#t42){([core::int*, core::int*]) →* core::int*});
  self::expect(11.{core::int::unary-}(){() →* core::int*}, 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){([core::int*, core::int*]) →* core::int*});
  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}(#t47){(core::int*, {b: core::int*}) →* core::int*});
  self::expect(11.{core::int::unary-}(){() →* core::int*}, 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){(core::int*, {b: core::int*}) →* core::int*});
  self::expect(0, c.{self::Class::getter7}(){({a: core::int*, b: core::int*}) →* core::int*});
  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){({a: core::int*, b: core::int*}) →* core::int*});
  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}(b: #t54){({a: core::int*, b: core::int*}) →* core::int*});
  self::expect(11.{core::int::unary-}(){() →* core::int*}, 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){({a: core::int*, b: core::int*}) →* core::int*});
  self::expect(11.{core::int::unary-}(){() →* core::int*}, 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){({a: core::int*, b: core::int*}) →* core::int*});
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  self::enableRead = true;
  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} 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
}
