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