blob: c216317defefb98e1b361fd4f37c1745e7944d0d [file] [log] [blame]
library;
import self as self;
import "dart:core" as core;
class Class extends core::Object {
field core::int* field1 = 42;
field core::int* field2 = 87;
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
}
extension Extension1 on self::Class* {
get field = self::Extension1|get#field;
method method = self::Extension1|method;
tearoff method = self::Extension1|get#method;
method genericMethod = self::Extension1|genericMethod;
tearoff genericMethod = self::Extension1|get#genericMethod;
set field = self::Extension1|set#field;
}
extension Extension2 on self::Class* {
get field = self::Extension2|get#field;
method method = self::Extension2|method;
tearoff method = self::Extension2|get#method;
method genericMethod = self::Extension2|genericMethod;
tearoff genericMethod = self::Extension2|get#genericMethod;
set field = self::Extension2|set#field;
}
static method Extension1|get#field(lowered final self::Class* #this) → core::int*
return #this.{self::Class::field1};
static method Extension1|set#field(lowered final self::Class* #this, core::int* value) → void {
#this.{self::Class::field1} = value;
}
static method Extension1|method(lowered final self::Class* #this) → core::int*
return #this.{self::Class::field1};
static method Extension1|get#method(lowered final self::Class* #this) → () →* core::int*
return () core::int* => self::Extension1|method(#this);
static method Extension1|genericMethod<T extends core::num* = core::num*>(lowered final self::Class* #this, self::Extension1|genericMethod::T* t) → core::int*
return #this.{self::Class::field1}.{core::num::+}(t) as{TypeError} core::int*;
static method Extension1|get#genericMethod(lowered final self::Class* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
return <T extends core::num* = core::num*>(T* t) core::int* => self::Extension1|genericMethod<T*>(#this, t);
static method Extension2|get#field(lowered final self::Class* #this) → core::int*
return #this.{self::Class::field2};
static method Extension2|set#field(lowered final self::Class* #this, core::int* value) → void {
#this.{self::Class::field2} = value;
}
static method Extension2|method(lowered final self::Class* #this) → core::int*
return #this.{self::Class::field2};
static method Extension2|get#method(lowered final self::Class* #this) → () →* core::int*
return () core::int* => self::Extension2|method(#this);
static method Extension2|genericMethod<T extends core::num* = core::num*>(lowered final self::Class* #this, self::Extension2|genericMethod::T* t) → core::int*
return #this.{self::Class::field2}.{core::num::+}(t) as{TypeError} core::int*;
static method Extension2|get#genericMethod(lowered final self::Class* #this) → <T extends core::num* = core::num*>(T*) →* core::int*
return <T extends core::num* = core::num*>(T* t) core::int* => self::Extension2|genericMethod<T*>(#this, t);
static method main() dynamic {
self::Class* c = new self::Class::•();
self::expect(42, self::Extension1|get#field(c));
self::expect(87, self::Extension2|get#field(c));
self::expect(42, self::Extension1|method(c));
self::expect(87, self::Extension2|method(c));
() →* core::int* tearOff1 = self::Extension1|get#method(c);
() →* core::int* tearOff2 = self::Extension2|get#method(c);
self::expect(42, tearOff1.call());
self::expect(87, tearOff2.call());
self::expect(52, self::Extension1|genericMethod<core::int*>(c, 10));
self::expect(97, self::Extension2|genericMethod<core::int*>(c, 10));
self::expect(52, self::Extension1|genericMethod<core::num*>(c, 10));
self::expect(97, self::Extension2|genericMethod<core::num*>(c, 10));
<T extends core::num* = core::num*>(T*) →* core::int* genericTearOff1 = self::Extension1|get#genericMethod(c);
<T extends core::num* = core::num*>(T*) →* core::int* genericTearOff2 = self::Extension2|get#genericMethod(c);
self::expect(52, genericTearOff1.call<core::int*>(10));
self::expect(97, genericTearOff2.call<core::int*>(10));
self::expect(52, genericTearOff1.call<core::num*>(10));
self::expect(97, genericTearOff2.call<core::num*>(10));
self::expect(23, let final self::Class* #t1 = c in let final core::int* #t2 = 23 in let final void #t3 = self::Extension1|set#field(#t1, #t2) in #t2);
self::expect(67, let final self::Class* #t4 = c in let final core::int* #t5 = 67 in let final void #t6 = self::Extension2|set#field(#t4, #t5) in #t5);
self::expect(23, self::Extension1|get#field(c));
self::expect(67, self::Extension2|get#field(c));
}
static method expect(dynamic expected, dynamic actual) dynamic {
if(!expected.{core::Object::==}(actual)) {
throw "Mismatch: expected=${expected}, actual=${actual}";
}
}