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}());
  self::expect(0, c.{self::Class::field1b}(){() → 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}(#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}(#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}(#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}(#t9, #t10){(core::int, [core::int]) → core::int});
  self::expect(0, c.{self::Class::field5}(){([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}(#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}(#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}(#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}(#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});
  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){({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}(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: #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}(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}());
  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 = 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
}

Extra constant evaluation status:
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:7:45 -> IntConstant(-1)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:130:10 -> IntConstant(-42)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:131:10 -> IntConstant(-11)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:133:10 -> IntConstant(-11)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:136:10 -> IntConstant(-11)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:138:10 -> IntConstant(-11)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:141:10 -> IntConstant(-23)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:142:10 -> IntConstant(-11)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:143:10 -> IntConstant(-11)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:149:10 -> IntConstant(-42)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:150:10 -> IntConstant(-11)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:152:10 -> IntConstant(-11)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:155:10 -> IntConstant(-11)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:157:10 -> IntConstant(-11)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:160:10 -> IntConstant(-23)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:161:10 -> IntConstant(-11)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:162:10 -> IntConstant(-11)
Extra constant evaluation: evaluated: 322, effectively constant: 17
