blob: e483e9c7007f60fedae360537a66fb031e20e180 [file] [log] [blame]
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class Class extends core::Object {
field core::int field;
field core::int? nullableField = null;
constructor •(core::int field) self::Class
: self::Class::field = field, 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 simpleNullableSetter = self::Extension|get#simpleNullableSetter;
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 simpleNullableSetter = self::Extension|set#simpleNullableSetter;
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#simpleNullableSetter(lowered final self::Class #this) → core::int?
return #this.{self::Class::nullableField}{core::int?};
static method Extension|set#simpleNullableSetter(lowered final self::Class #this, core::int? value) → void {
#this.{self::Class::nullableField} = 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,ForNonNullableByDefault} core::bool ?{dynamic} value{dynamic}.unary-() : value;
}
#this.{self::Class::field} = abs(value){(dynamic) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
}
static method Extension|testInternal(lowered final self::Class #this) → dynamic {
self::expect(1.{core::int::unary-}(){() core::int}, #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::•(1.{core::int::unary-}(){() core::int});
self::test(c, c);
}
static method test(self::Class c, self::Class? cn) dynamic {
self::expect(1.{core::int::unary-}(){() core::int}, 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 = cn in #t43 == null ?{core::int?} null : #t43{self::Class}.{self::Class::field}{core::int});
self::expect(1, let final self::Class? #t44 = cn in #t44 == null ?{core::int?} null : let final core::int #t45 = 1 in let final void #t46 = self::Extension|set#simpleSetter(#t44{self::Class}, #t45) in #t45);
self::Extension|set#simpleSetter(c, 2);
self::expect(2, let final self::Class? #t47 = cn in #t47 == null ?{core::int?} null : #t47{self::Class}.{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 = cn in #t51 == null ?{core::int?} null : #t51{self::Class}.{self::Class::field}{core::int});
self::expect(2, let final self::Class? #t52 = cn in #t52 == null ?{core::int?} null : let final core::int #t53 = 2 in let final void #t54 = self::Extension|set#mutatingSetter(#t52{self::Class}, #t53) in #t53);
self::expect(3, let final self::Class? #t55 = cn in #t55 == null ?{core::int?} null : #t55{self::Class}.{self::Class::field}{core::int});
self::Extension|set#mutatingSetter(c, 4);
self::expect(5, let final self::Class? #t56 = cn in #t56 == null ?{core::int?} null : #t56{self::Class}.{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 = cn in #t60 == null ?{core::int?} null : #t60{self::Class}.{self::Class::field}{core::int});
let final self::Class? #t61 = cn in #t61 == null ?{core::int?} null : self::Extension|set#setterWithReturn(#t61{self::Class}, 1);
self::expect(1, let final self::Class? #t62 = cn in #t62 == null ?{core::int?} null : #t62{self::Class}.{self::Class::field}{core::int});
let final self::Class? #t63 = cn in #t63 == null ?{core::int?} null : self::Extension|set#setterWithReturn(#t63{self::Class}, 2.{core::int::unary-}(){() → core::int});
self::expect(2, let final self::Class? #t64 = cn in #t64 == null ?{core::int?} null : #t64{self::Class}.{self::Class::field}{core::int});
self::expect(3, let final self::Class? #t65 = cn in #t65 == null ?{core::int?} null : let final core::int #t66 = 3 in let final void #t67 = self::Extension|set#setterWithReturn(#t65{self::Class}, #t66) in #t66);
self::expect(3, let final self::Class? #t68 = cn in #t68 == null ?{core::int?} null : #t68{self::Class}.{self::Class::field}{core::int});
self::expect(4.{core::int::unary-}(){() core::int}, let final self::Class? #t69 = cn 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{self::Class}, #t70) in #t70);
self::expect(4, let final self::Class? #t72 = cn in #t72 == null ?{core::int?} null : #t72{self::Class}.{self::Class::field}{core::int});
self::Extension|set#setterWithReturn(c, 5);
self::expect(5, let final self::Class? #t73 = cn in #t73 == null ?{core::int?} null : #t73{self::Class}.{self::Class::field}{core::int});
self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}(){() → core::int});
self::expect(6, let final self::Class? #t74 = cn in #t74 == null ?{core::int?} null : #t74{self::Class}.{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 = cn in #t78 == null ?{core::int?} null : #t78{self::Class}.{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 = cn in #t82 == null ?{core::int?} null : #t82{self::Class}.{self::Class::field}{core::int});
let final self::Class? #t83 = cn in #t83 == null ?{core::int?} null : self::Extension|set#setterWithClosure(#t83{self::Class}, 1);
self::expect(1, let final self::Class? #t84 = cn in #t84 == null ?{core::int?} null : #t84{self::Class}.{self::Class::field}{core::int});
let final self::Class? #t85 = cn in #t85 == null ?{core::int?} null : self::Extension|set#setterWithClosure(#t85{self::Class}, 2.{core::int::unary-}(){() → core::int});
self::expect(2, let final self::Class? #t86 = cn in #t86 == null ?{core::int?} null : #t86{self::Class}.{self::Class::field}{core::int});
self::expect(3, let final self::Class? #t87 = cn in #t87 == null ?{core::int?} null : let final core::int #t88 = 3 in let final void #t89 = self::Extension|set#setterWithClosure(#t87{self::Class}, #t88) in #t88);
self::expect(3, let final self::Class? #t90 = cn in #t90 == null ?{core::int?} null : #t90{self::Class}.{self::Class::field}{core::int});
self::expect(4.{core::int::unary-}(){() core::int}, let final self::Class? #t91 = cn 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{self::Class}, #t92) in #t92);
self::expect(4, let final self::Class? #t94 = cn in #t94 == null ?{core::int?} null : #t94{self::Class}.{self::Class::field}{core::int});
self::Extension|set#setterWithClosure(c, 5);
self::expect(5, let final self::Class? #t95 = cn in #t95 == null ?{core::int?} null : #t95{self::Class}.{self::Class::field}{core::int});
self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}(){() → core::int});
self::expect(6, let final self::Class? #t96 = cn in #t96 == null ?{core::int?} null : #t96{self::Class}.{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 = cn in #t100 == null ?{core::int?} null : #t100{self::Class}.{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 = cn in #t104 == null ?{core::int?} null : #t104{self::Class}.{self::Class::field}{core::int});
c.{self::Class::nullableField} = null;
let final self::Class #t105 = c in self::Extension|get#simpleNullableSetter(#t105) == null ?{core::int} self::Extension|set#simpleNullableSetter(#t105, 1) : null;
self::expect(1, c.{self::Class::nullableField}{core::int?});
self::expect(1, let final self::Class #t106 = c in let final core::int? #t107 = self::Extension|get#simpleNullableSetter(#t106) in #t107 == null ?{core::int} let final core::int #t108 = 2 in let final void #t109 = self::Extension|set#simpleNullableSetter(#t106, #t108) in #t108 : #t107{core::int});
c.{self::Class::nullableField} = null;
self::expect(2, let final self::Class #t110 = c in let final core::int? #t111 = self::Extension|get#simpleNullableSetter(#t110) in #t111 == null ?{core::int} let final core::int #t112 = 2 in let final void #t113 = self::Extension|set#simpleNullableSetter(#t110, #t112) in #t112 : #t111{core::int});
let final self::Class? #t114 = cn in #t114 == null ?{Null} null : #t114{self::Class}.{self::Class::nullableField} = null;
let final self::Class? #t115 = cn in #t115 == null ?{core::int?} null : self::Extension|get#simpleNullableSetter(#t115) == null ?{core::int} self::Extension|set#simpleNullableSetter(#t115, 1) : null;
self::expect(1, let final self::Class? #t116 = cn in #t116 == null ?{core::int?} null : #t116{self::Class}.{self::Class::nullableField}{core::int?});
self::expect(1, let final self::Class? #t117 = cn in #t117 == null ?{core::int?} null : let final core::int? #t118 = self::Extension|get#simpleNullableSetter(#t117) in #t118 == null ?{core::int} let final core::int #t119 = 2 in let final void #t120 = self::Extension|set#simpleNullableSetter(#t117, #t119) in #t119 : #t118{core::int});
let final self::Class? #t121 = cn in #t121 == null ?{Null} null : #t121{self::Class}.{self::Class::nullableField} = null;
self::expect(2, let final self::Class? #t122 = cn in #t122 == null ?{core::int?} null : let final core::int? #t123 = self::Extension|get#simpleNullableSetter(#t122) in #t123 == null ?{core::int} let final core::int #t124 = 2 in let final void #t125 = self::Extension|set#simpleNullableSetter(#t122, #t124) in #t124 : #t123{core::int});
self::Extension|testInternal(new self::Class::•(1.{core::int::unary-}(){() core::int}));
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}";
}
}