library /*isNonNullableByDefault*/;
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;
}
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}{core::Function}());
  self::expect(0, c.{self::Class::field1b}{() → core::int}(){() → core::int});
  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}{(core::int) → core::int}(#t2){(core::int) → core::int});
  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}{(core::int, core::int) → core::int}(#t4, #t5){(core::int, core::int) → core::int});
  self::expect(12, let final self::Class #t6 = c in let final core::int #t7 = self::read(12) in #t6.{self::Class::field4}{(core::int, [core::int]) → core::int}(#t7){(core::int, [core::int]) → core::int});
  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}{(core::int, [core::int]) → core::int}(#t9, #t10){(core::int, [core::int]) → core::int});
  self::expect(0, c.{self::Class::field5}{([core::int, core::int]) → core::int}(){([core::int, core::int]) → core::int});
  self::expect(12, let final self::Class #t11 = c in let final core::int #t12 = self::read(12) in #t11.{self::Class::field5}{([core::int, core::int]) → core::int}(#t12){([core::int, core::int]) → core::int});
  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}{([core::int, core::int]) → core::int}(#t14, #t15){([core::int, core::int]) → core::int});
  self::expect(12, let final self::Class #t16 = c in let final core::int #t17 = self::read(12) in #t16.{self::Class::field6}{(core::int, {b: core::int}) → core::int}(#t17){(core::int, {b: core::int}) → core::int});
  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}{(core::int, {b: core::int}) → core::int}(#t19, b: #t20){(core::int, {b: core::int}) → core::int});
  self::expect(0, c.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(){({a: core::int, b: core::int}) → core::int});
  self::expect(12, let final self::Class #t21 = c in let final core::int #t22 = self::read(12) in #t21.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(a: #t22){({a: core::int, b: core::int}) → core::int});
  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}{({a: core::int, b: core::int}) → core::int}(b: #t24){({a: core::int, b: core::int}) → core::int});
  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: core::int, b: core::int}) → core::int}(a: #t26, b: #t27){({a: core::int, b: core::int}) → core::int});
  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}{({a: core::int, b: core::int}) → core::int}(b: #t29, a: #t30){({a: core::int, b: core::int}) → core::int});
}
static method callGetter(self::Class c) → dynamic {
  self::expect(0, c.{self::Class::getter1a}{core::Function}());
  self::expect(0, c.{self::Class::getter1b}{() → core::int}(){() → 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}{(core::int) → core::int}(#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}{(core::int, core::int) → core::int}(#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}{(core::int, [core::int]) → core::int}(#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}{(core::int, [core::int]) → core::int}(#t39, #t40){(core::int, [core::int]) → core::int});
  self::expect(0, c.{self::Class::getter5}{([core::int, core::int]) → core::int}(){([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}{([core::int, core::int]) → core::int}(#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}{([core::int, core::int]) → core::int}(#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}{(core::int, {b: core::int}) → core::int}(#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}{(core::int, {b: core::int}) → core::int}(#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}(){({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: core::int, b: core::int}) → core::int}(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}{({a: core::int, b: core::int}) → core::int}(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: core::int, b: core::int}) → core::int}(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}{({a: core::int, b: core::int}) → core::int}(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 = static-tearoff self::method1
  #C2 = static-tearoff self::method2
  #C3 = static-tearoff self::method3
  #C4 = static-tearoff self::method4
  #C5 = static-tearoff self::method5
  #C6 = static-tearoff self::method6
  #C7 = static-tearoff self::method7
  #C8 = 0
}
