blob: 0eb278333ab77573fb7353617e1f927dadb756ef [file] [log] [blame]
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::•()
;
}
class GenericClass<T extends core::Object* = dynamic> extends core::Object {
synthetic constructor •() self::GenericClass<self::GenericClass::T*>*
: 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;
}
extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
set setter = self::GenericExtension|set#setter;
}
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 GenericExtension|set#setter<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|set#setter::T*>* #this, self::GenericExtension|set#setter::T* value) → void {}
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::•());
self::GenericClass<core::int*>* genericClass = new self::GenericClass::•<core::int*>();
self::expect(1, let final self::GenericClass<core::int*>* #t134 = genericClass in let final core::int* #t135 = 1 in let final void #t136 = self::GenericExtension|set#setter<core::int*>(#t134, #t135) in #t135);
}
static method expect(dynamic expected, dynamic actual) dynamic {
if(!expected.{core::Object::==}(actual)) {
throw "Mismatch: expected=${expected}, actual=${actual}";
}
}