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

class Class extends core::Object {
  field core::int* field = null;
  synthetic constructor •() → self::Class*
    : super core::Object::•()
    ;
}
extension Extension on self::Class* {
  get simpleSetter = self::Extension|get#simpleSetter;
  get mutatingSetter = self::Extension|get#mutatingSetter;
  get setterWithReturn = self::Extension|get#setterWithReturn;
  get setterWithClosure = self::Extension|get#setterWithClosure;
  method testInternal = self::Extension|testInternal;
  tearoff testInternal = self::Extension|get#testInternal;
  set simpleSetter = self::Extension|set#simpleSetter;
  set mutatingSetter = self::Extension|set#mutatingSetter;
  set setterWithReturn = self::Extension|set#setterWithReturn;
  set setterWithClosure = self::Extension|set#setterWithClosure;
}
static method Extension|get#simpleSetter(final self::Class* #this) → core::int*
  return #this.{self::Class::field};
static method Extension|set#simpleSetter(final self::Class* #this, core::int* value) → void {
  #this.{self::Class::field} = value;
}
static method Extension|get#mutatingSetter(final self::Class* #this) → core::int*
  return #this.{self::Class::field};
static method Extension|set#mutatingSetter(final self::Class* #this, core::int* value) → void {
  value = value.{core::num::+}(1);
  #this.{self::Class::field} = value;
}
static method Extension|get#setterWithReturn(final self::Class* #this) → core::int*
  return #this.{self::Class::field};
static method Extension|set#setterWithReturn(final self::Class* #this, core::int* value) → void {
  if(value.{core::num::<}(0)) {
    #this.{self::Class::field} = value.{core::int::unary-}();
    return;
  }
  #this.{self::Class::field} = value;
}
static method Extension|get#setterWithClosure(final self::Class* #this) → core::int*
  return #this.{self::Class::field};
static method Extension|set#setterWithClosure(final self::Class* #this, core::int* value) → void {
  function abs(dynamic value) → dynamic {
    return value.<(0) as{TypeError} core::bool* ?{dynamic} value.unary-() : value;
  }
  #this.{self::Class::field} = abs.call(value) as{TypeError} core::int*;
}
static method Extension|testInternal(final self::Class* #this) → dynamic {
  self::expect(null, #this.{self::Class::field});
  self::Extension|set#simpleSetter(#this, 0);
  self::expect(0, #this.{self::Class::field});
  self::expect(1, let final core::int* #t1 = 1 in let final void #t2 = self::Extension|set#simpleSetter(#this, #t1) in #t1);
  self::Extension|set#mutatingSetter(#this, 0);
  self::expect(1, #this.{self::Class::field});
  self::expect(2, let final core::int* #t3 = 2 in let final void #t4 = self::Extension|set#mutatingSetter(#this, #t3) in #t3);
  self::expect(3, #this.{self::Class::field});
  self::Extension|set#setterWithReturn(#this, 1);
  self::expect(1, #this.{self::Class::field});
  self::Extension|set#setterWithReturn(#this, 2.{core::int::unary-}());
  self::expect(2, #this.{self::Class::field});
  self::expect(3, let final core::int* #t5 = 3 in let final void #t6 = self::Extension|set#setterWithReturn(#this, #t5) in #t5);
  self::expect(3, #this.{self::Class::field});
  self::expect(4.{core::int::unary-}(), let final core::int* #t7 = 4.{core::int::unary-}() in let final void #t8 = self::Extension|set#setterWithReturn(#this, #t7) in #t7);
  self::expect(4, #this.{self::Class::field});
  self::Extension|set#setterWithClosure(#this, 1);
  self::expect(1, #this.{self::Class::field});
  self::Extension|set#setterWithClosure(#this, 2.{core::int::unary-}());
  self::expect(2, #this.{self::Class::field});
  self::expect(3, let final core::int* #t9 = 3 in let final void #t10 = self::Extension|set#setterWithClosure(#this, #t9) in #t9);
  self::expect(3, #this.{self::Class::field});
  self::expect(4.{core::int::unary-}(), let final core::int* #t11 = 4.{core::int::unary-}() in let final void #t12 = self::Extension|set#setterWithClosure(#this, #t11) in #t11);
  self::expect(4, #this.{self::Class::field});
}
static method Extension|get#testInternal(final self::Class* #this) → () →* dynamic
  return () → dynamic => self::Extension|testInternal(#this);
static method main() → dynamic {
  self::Class* c = new self::Class::•();
  self::expect(null, c.{self::Class::field});
  self::Extension|set#simpleSetter(c, 0);
  self::expect(0, c.{self::Class::field});
  self::expect(1, let final self::Class* #t13 = c in let final core::int* #t14 = 1 in let final void #t15 = self::Extension|set#simpleSetter(#t13, #t14) in #t14);
  self::Extension|set#simpleSetter(c, 2);
  self::expect(2, c.{self::Class::field});
  self::expect(3, let final self::Class* #t16 = c in let final core::int* #t17 = 3 in let final void #t18 = self::Extension|set#simpleSetter(#t16, #t17) in #t17);
  self::Extension|set#mutatingSetter(c, 0);
  self::expect(1, c.{self::Class::field});
  self::expect(2, let final self::Class* #t19 = c in let final core::int* #t20 = 2 in let final void #t21 = self::Extension|set#mutatingSetter(#t19, #t20) in #t20);
  self::expect(3, c.{self::Class::field});
  self::Extension|set#mutatingSetter(c, 4);
  self::expect(5, c.{self::Class::field});
  self::expect(6, let final self::Class* #t22 = c in let final core::int* #t23 = 6 in let final void #t24 = self::Extension|set#mutatingSetter(#t22, #t23) in #t23);
  self::expect(7, c.{self::Class::field});
  self::Extension|set#setterWithReturn(c, 1);
  self::expect(1, c.{self::Class::field});
  self::Extension|set#setterWithReturn(c, 2.{core::int::unary-}());
  self::expect(2, c.{self::Class::field});
  self::expect(3, let final self::Class* #t25 = c in let final core::int* #t26 = 3 in let final void #t27 = self::Extension|set#setterWithReturn(#t25, #t26) in #t26);
  self::expect(3, c.{self::Class::field});
  self::expect(4.{core::int::unary-}(), let final self::Class* #t28 = c in let final core::int* #t29 = 4.{core::int::unary-}() in let final void #t30 = self::Extension|set#setterWithReturn(#t28, #t29) in #t29);
  self::expect(4, c.{self::Class::field});
  self::Extension|set#setterWithReturn(c, 5);
  self::expect(5, c.{self::Class::field});
  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}());
  self::expect(6, c.{self::Class::field});
  self::expect(7, let final self::Class* #t31 = c in let final core::int* #t32 = 7 in let final void #t33 = self::Extension|set#setterWithReturn(#t31, #t32) in #t32);
  self::expect(7, c.{self::Class::field});
  self::expect(8.{core::int::unary-}(), let final self::Class* #t34 = c in let final core::int* #t35 = 8.{core::int::unary-}() in let final void #t36 = self::Extension|set#setterWithReturn(#t34, #t35) in #t35);
  self::expect(8, c.{self::Class::field});
  self::Extension|set#setterWithClosure(c, 1);
  self::expect(1, c.{self::Class::field});
  self::Extension|set#setterWithClosure(c, 2.{core::int::unary-}());
  self::expect(2, c.{self::Class::field});
  self::expect(3, let final self::Class* #t37 = c in let final core::int* #t38 = 3 in let final void #t39 = self::Extension|set#setterWithClosure(#t37, #t38) in #t38);
  self::expect(3, c.{self::Class::field});
  self::expect(4.{core::int::unary-}(), let final self::Class* #t40 = c in let final core::int* #t41 = 4.{core::int::unary-}() in let final void #t42 = self::Extension|set#setterWithClosure(#t40, #t41) in #t41);
  self::expect(4, c.{self::Class::field});
  self::Extension|set#setterWithClosure(c, 5);
  self::expect(5, c.{self::Class::field});
  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}());
  self::expect(6, c.{self::Class::field});
  self::expect(7, let final self::Class* #t43 = c in let final core::int* #t44 = 7 in let final void #t45 = self::Extension|set#setterWithClosure(#t43, #t44) in #t44);
  self::expect(7, c.{self::Class::field});
  self::expect(8.{core::int::unary-}(), let final self::Class* #t46 = c in let final core::int* #t47 = 8.{core::int::unary-}() in let final void #t48 = self::Extension|set#setterWithClosure(#t46, #t47) in #t47);
  self::expect(8, c.{self::Class::field});
  self::Extension|set#simpleSetter(c, 0);
  self::expect(0, let final self::Class* #t49 = c in #t49.{core::Object::==}(null) ?{core::int*} null : #t49.{self::Class::field});
  self::expect(1, let final self::Class* #t50 = c in #t50.{core::Object::==}(null) ?{core::int*} null : let final core::int* #t51 = 1 in let final void #t52 = self::Extension|set#simpleSetter(#t50, #t51) in #t51);
  self::Extension|set#simpleSetter(c, 2);
  self::expect(2, let final self::Class* #t53 = c in #t53.{core::Object::==}(null) ?{core::int*} null : #t53.{self::Class::field});
  self::expect(3, let final self::Class* #t54 = c in let final core::int* #t55 = 3 in let final void #t56 = self::Extension|set#simpleSetter(#t54, #t55) in #t55);
  self::Extension|set#mutatingSetter(c, 0);
  self::expect(1, let final self::Class* #t57 = c in #t57.{core::Object::==}(null) ?{core::int*} null : #t57.{self::Class::field});
  self::expect(2, let final self::Class* #t58 = c in #t58.{core::Object::==}(null) ?{core::int*} null : let final core::int* #t59 = 2 in let final void #t60 = self::Extension|set#mutatingSetter(#t58, #t59) in #t59);
  self::expect(3, let final self::Class* #t61 = c in #t61.{core::Object::==}(null) ?{core::int*} null : #t61.{self::Class::field});
  self::Extension|set#mutatingSetter(c, 4);
  self::expect(5, let final self::Class* #t62 = c in #t62.{core::Object::==}(null) ?{core::int*} null : #t62.{self::Class::field});
  self::expect(6, let final self::Class* #t63 = c in let final core::int* #t64 = 6 in let final void #t65 = self::Extension|set#mutatingSetter(#t63, #t64) in #t64);
  self::expect(7, let final self::Class* #t66 = c in #t66.{core::Object::==}(null) ?{core::int*} null : #t66.{self::Class::field});
  let final self::Class* #t67 = c in #t67.{core::Object::==}(null) ?{core::int*} null : self::Extension|set#setterWithReturn(#t67, 1);
  self::expect(1, let final self::Class* #t68 = c in #t68.{core::Object::==}(null) ?{core::int*} null : #t68.{self::Class::field});
  let final self::Class* #t69 = c in #t69.{core::Object::==}(null) ?{core::int*} null : self::Extension|set#setterWithReturn(#t69, 2.{core::int::unary-}());
  self::expect(2, let final self::Class* #t70 = c in #t70.{core::Object::==}(null) ?{core::int*} null : #t70.{self::Class::field});
  self::expect(3, let final self::Class* #t71 = c in #t71.{core::Object::==}(null) ?{core::int*} null : let final core::int* #t72 = 3 in let final void #t73 = self::Extension|set#setterWithReturn(#t71, #t72) in #t72);
  self::expect(3, let final self::Class* #t74 = c in #t74.{core::Object::==}(null) ?{core::int*} null : #t74.{self::Class::field});
  self::expect(4.{core::int::unary-}(), let final self::Class* #t75 = c in #t75.{core::Object::==}(null) ?{core::int*} null : let final core::int* #t76 = 4.{core::int::unary-}() in let final void #t77 = self::Extension|set#setterWithReturn(#t75, #t76) in #t76);
  self::expect(4, let final self::Class* #t78 = c in #t78.{core::Object::==}(null) ?{core::int*} null : #t78.{self::Class::field});
  self::Extension|set#setterWithReturn(c, 5);
  self::expect(5, let final self::Class* #t79 = c in #t79.{core::Object::==}(null) ?{core::int*} null : #t79.{self::Class::field});
  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}());
  self::expect(6, let final self::Class* #t80 = c in #t80.{core::Object::==}(null) ?{core::int*} null : #t80.{self::Class::field});
  self::expect(7, let final self::Class* #t81 = c in let final core::int* #t82 = 7 in let final void #t83 = self::Extension|set#setterWithReturn(#t81, #t82) in #t82);
  self::expect(7, let final self::Class* #t84 = c in #t84.{core::Object::==}(null) ?{core::int*} null : #t84.{self::Class::field});
  self::expect(8.{core::int::unary-}(), let final self::Class* #t85 = c in let final core::int* #t86 = 8.{core::int::unary-}() in let final void #t87 = self::Extension|set#setterWithReturn(#t85, #t86) in #t86);
  self::expect(8, let final self::Class* #t88 = c in #t88.{core::Object::==}(null) ?{core::int*} null : #t88.{self::Class::field});
  let final self::Class* #t89 = c in #t89.{core::Object::==}(null) ?{core::int*} null : self::Extension|set#setterWithClosure(#t89, 1);
  self::expect(1, let final self::Class* #t90 = c in #t90.{core::Object::==}(null) ?{core::int*} null : #t90.{self::Class::field});
  let final self::Class* #t91 = c in #t91.{core::Object::==}(null) ?{core::int*} null : self::Extension|set#setterWithClosure(#t91, 2.{core::int::unary-}());
  self::expect(2, let final self::Class* #t92 = c in #t92.{core::Object::==}(null) ?{core::int*} null : #t92.{self::Class::field});
  self::expect(3, let final self::Class* #t93 = c in #t93.{core::Object::==}(null) ?{core::int*} null : let final core::int* #t94 = 3 in let final void #t95 = self::Extension|set#setterWithClosure(#t93, #t94) in #t94);
  self::expect(3, let final self::Class* #t96 = c in #t96.{core::Object::==}(null) ?{core::int*} null : #t96.{self::Class::field});
  self::expect(4.{core::int::unary-}(), let final self::Class* #t97 = c in #t97.{core::Object::==}(null) ?{core::int*} null : let final core::int* #t98 = 4.{core::int::unary-}() in let final void #t99 = self::Extension|set#setterWithClosure(#t97, #t98) in #t98);
  self::expect(4, let final self::Class* #t100 = c in #t100.{core::Object::==}(null) ?{core::int*} null : #t100.{self::Class::field});
  self::Extension|set#setterWithClosure(c, 5);
  self::expect(5, let final self::Class* #t101 = c in #t101.{core::Object::==}(null) ?{core::int*} null : #t101.{self::Class::field});
  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}());
  self::expect(6, let final self::Class* #t102 = c in #t102.{core::Object::==}(null) ?{core::int*} null : #t102.{self::Class::field});
  self::expect(7, let final self::Class* #t103 = c in let final core::int* #t104 = 7 in let final void #t105 = self::Extension|set#setterWithClosure(#t103, #t104) in #t104);
  self::expect(7, let final self::Class* #t106 = c in #t106.{core::Object::==}(null) ?{core::int*} null : #t106.{self::Class::field});
  self::expect(8.{core::int::unary-}(), let final self::Class* #t107 = c in let final core::int* #t108 = 8.{core::int::unary-}() in let final void #t109 = self::Extension|set#setterWithClosure(#t107, #t108) in #t108);
  self::expect(8, let final self::Class* #t110 = c in #t110.{core::Object::==}(null) ?{core::int*} null : #t110.{self::Class::field});
  c.{self::Class::field} = null;
  let final self::Class* #t111 = c in self::Extension|get#simpleSetter(#t111).{core::num::==}(null) ?{core::int*} self::Extension|set#simpleSetter(#t111, 1) : null;
  self::expect(1, c.{self::Class::field});
  self::expect(1, let final self::Class* #t112 = c in let final core::int* #t113 = self::Extension|get#simpleSetter(#t112) in #t113.{core::num::==}(null) ?{core::int*} let final self::Class* #t114 = #t112 in let final core::int* #t115 = 2 in let final void #t116 = self::Extension|set#simpleSetter(#t114, #t115) in #t115 : #t113);
  c.{self::Class::field} = null;
  self::expect(2, let final self::Class* #t117 = c in let final core::int* #t118 = self::Extension|get#simpleSetter(#t117) in #t118.{core::num::==}(null) ?{core::int*} let final self::Class* #t119 = #t117 in let final core::int* #t120 = 2 in let final void #t121 = self::Extension|set#simpleSetter(#t119, #t120) in #t120 : #t118);
  let final self::Class* #t122 = c in #t122.{core::Object::==}(null) ?{core::Null?} null : #t122.{self::Class::field} = null;
  let final self::Class* #t123 = c in #t123.{core::Object::==}(null) ?{core::int*} null : self::Extension|get#simpleSetter(#t123).{core::num::==}(null) ?{core::int*} self::Extension|set#simpleSetter(#t123, 1) : null;
  self::expect(1, let final self::Class* #t124 = c in #t124.{core::Object::==}(null) ?{core::int*} null : #t124.{self::Class::field});
  self::expect(1, let final self::Class* #t125 = c in #t125.{core::Object::==}(null) ?{core::int*} null : let final core::int* #t126 = self::Extension|get#simpleSetter(#t125) in #t126.{core::num::==}(null) ?{core::int*} let final core::int* #t127 = 2 in let final void #t128 = self::Extension|set#simpleSetter(#t125, #t127) in #t127 : #t126);
  let final self::Class* #t129 = c in #t129.{core::Object::==}(null) ?{core::Null?} null : #t129.{self::Class::field} = null;
  self::expect(2, let final self::Class* #t130 = c in #t130.{core::Object::==}(null) ?{core::int*} null : let final core::int* #t131 = self::Extension|get#simpleSetter(#t130) in #t131.{core::num::==}(null) ?{core::int*} let final core::int* #t132 = 2 in let final void #t133 = self::Extension|set#simpleSetter(#t130, #t132) in #t132 : #t131);
  self::Extension|testInternal(new self::Class::•());
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!expected.{core::Object::==}(actual)) {
    throw "Mismatch: expected=${expected}, actual=${actual}";
  }
}
