blob: e72cb30800a2bfa0a44dc36fb46223f963d1bc0f [file] [log] [blame]
library;
import self as self;
import "dart:core" as core;
extension type I(core::int i) {
abstract extension-type-member representation-field get i() core::int;
constructor _ = self::I|constructor#_;
constructor tearoff _ = self::I|constructor#_#_#tearOff;
static factory = self::I|constructor#;
static factory tearoff = self::I|constructor#_#new#tearOff;
}
extension type J(core::int i) {
abstract extension-type-member representation-field get i() core::int;
constructor _ = self::J|constructor#_;
constructor tearoff _ = self::J|constructor#_#_#tearOff;
static factory = self::J|constructor#;
static factory tearoff = self::J|constructor#_#new#tearOff;
}
extension type K<T extends core::Object? = dynamic>(T% i) {
abstract extension-type-member representation-field get i() T%;
constructor _ = self::K|constructor#_;
constructor tearoff _ = self::K|constructor#_#_#tearOff;
static factory = self::K|constructor#;
static factory tearoff = self::K|constructor#_#new#tearOff;
}
static extension-type-member method I|constructor#_(core::int i) → self::I% /* erasure=core::int, declared=! */ {
lowered final self::I% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member method I|constructor#_#_#tearOff(core::int i) → self::I% /* erasure=core::int, declared=! */
return self::I|constructor#_(i);
static extension-type-member method I|constructor#() → self::I% /* erasure=core::int, declared=! */
return 0 as self::I% /* erasure=core::int, declared=! */;
static extension-type-member method I|constructor#_#new#tearOff() → self::I% /* erasure=core::int, declared=! */
return self::I|constructor#();
static extension-type-member method J|constructor#_(core::int i) → self::J% /* erasure=core::int, declared=! */ {
lowered final self::J% /* erasure=core::int, declared=! */ #this = i;
return #this;
}
static extension-type-member method J|constructor#_#_#tearOff(core::int i) → self::J% /* erasure=core::int, declared=! */
return self::J|constructor#_(i);
static extension-type-member method J|constructor#(core::int i) → self::J% /* erasure=core::int, declared=! */
return self::J|constructor#_(i);
static extension-type-member method J|constructor#_#new#tearOff(core::int i) → self::J% /* erasure=core::int, declared=! */
return self::J|constructor#(i);
static extension-type-member method K|constructor#_<T extends core::Object? = dynamic>(self::K|constructor#_::T% i) → self::K<self::K|constructor#_::T%>% /* erasure=self::K|constructor#_::T%, declared=! */ {
lowered final self::K<self::K|constructor#_::T%>% /* erasure=self::K|constructor#_::T%, declared=! */ #this = i;
return #this;
}
static extension-type-member method K|constructor#_#_#tearOff<T extends core::Object? = dynamic>(self::K|constructor#_#_#tearOff::T% i) → self::K<self::K|constructor#_#_#tearOff::T%>% /* erasure=self::K|constructor#_#_#tearOff::T%, declared=! */
return self::K|constructor#_<self::K|constructor#_#_#tearOff::T%>(i);
static extension-type-member method K|constructor#<T extends core::Object? = dynamic>(self::K|constructor#::T% i) → self::K<self::K|constructor#::T%>% /* erasure=self::K|constructor#::T%, declared=! */
return self::K|constructor#_<self::K|constructor#::T%>(i);
static extension-type-member method K|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::K|constructor#_#new#tearOff::T% i) → self::K<self::K|constructor#_#new#tearOff::T%>% /* erasure=self::K|constructor#_#new#tearOff::T%, declared=! */
return self::K|constructor#<self::K|constructor#_#new#tearOff::T%>(i);
static method main() dynamic {
self::expect(0, self::I|constructor#());
self::expect(0, #C1(){() → self::I% /* erasure=core::int, declared=! */});
self::expect(42, self::J|constructor#(42));
self::expect(87, self::J|constructor#(87));
self::expect(123, #C2(123){(core::int) → self::J% /* erasure=core::int, declared=! */});
self::expect("foo", self::K|constructor#<core::String>("foo"));
self::expect("bar", self::K|constructor#<core::String>("bar"));
self::expect("baz", #C3<core::String>("baz"){(core::String) → self::K<core::String>% /* erasure=core::String, declared=! */});
self::expect("boz", #C4("boz"){(core::String) → self::K<core::String>% /* erasure=core::String, declared=! */});
}
static method expect(dynamic expected, dynamic actual) dynamic {
if(!(expected =={core::Object::==}{(core::Object) core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
constants {
#C1 = static-tearoff self::I|constructor#_#new#tearOff
#C2 = static-tearoff self::J|constructor#_#new#tearOff
#C3 = static-tearoff self::K|constructor#_#new#tearOff
#C4 = instantiation #C3 <core::String>
}