blob: 5feb36c8d2dcb9d7cfed0b928dd50b4e18a91b47 [file] [log] [blame]
library;
import self as self;
import "dart:core" as core;
extension type Class(core::int it) {
abstract extension-type-member representation-field get it() core::int;
constructor = self::Class|constructor#;
constructor tearoff = self::Class|constructor#_#new#tearOff;
constructor named = self::Class|constructor#named;
constructor tearoff named = self::Class|constructor#_#named#tearOff;
}
extension type GenericClass<T extends core::Object? = dynamic>(T% it) {
abstract extension-type-member representation-field get it() T%;
constructor = self::GenericClass|constructor#;
constructor tearoff = self::GenericClass|constructor#_#new#tearOff;
}
static extension-type-member method Class|constructor#(core::int it) → self::Class% /* erasure=core::int, declared=! */ {
lowered final self::Class% /* erasure=core::int, declared=! */ #this = it;
return #this;
}
static extension-type-member method Class|constructor#_#new#tearOff(core::int it) → self::Class% /* erasure=core::int, declared=! */
return self::Class|constructor#(it);
static extension-type-member method Class|constructor#named(core::int it) → self::Class% /* erasure=core::int, declared=! */ {
lowered final self::Class% /* erasure=core::int, declared=! */ #this = it.{core::num::+}(1){(core::num) → core::int};
return #this;
}
static extension-type-member method Class|constructor#_#named#tearOff(core::int it) → self::Class% /* erasure=core::int, declared=! */
return self::Class|constructor#named(it);
static extension-type-member method GenericClass|constructor#<T extends core::Object? = dynamic>(self::GenericClass|constructor#::T% it) → self::GenericClass<self::GenericClass|constructor#::T%>% /* erasure=self::GenericClass|constructor#::T%, declared=! */ {
lowered final self::GenericClass<self::GenericClass|constructor#::T%>% /* erasure=self::GenericClass|constructor#::T%, declared=! */ #this = it;
return #this;
}
static extension-type-member method GenericClass|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass|constructor#_#new#tearOff::T% it) → self::GenericClass<self::GenericClass|constructor#_#new#tearOff::T%>% /* erasure=self::GenericClass|constructor#_#new#tearOff::T%, declared=! */
return self::GenericClass|constructor#<self::GenericClass|constructor#_#new#tearOff::T%>(it);
static method main() dynamic {
self::Class% /* erasure=core::int, declared=! */ a = self::Class|constructor#(3);
self::Class% /* erasure=core::int, declared=! */ b = self::Class|constructor#(4);
self::Class% /* erasure=core::int, declared=! */ b2 = #C1(4){(core::int) → self::Class% /* erasure=core::int, declared=! */};
self::Class% /* erasure=core::int, declared=! */ c = self::Class|constructor#named(5);
self::Class% /* erasure=core::int, declared=! */ c2 = #C2(5){(core::int) → self::Class% /* erasure=core::int, declared=! */};
self::GenericClass<core::String>% /* erasure=core::String, declared=! */ d = self::GenericClass|constructor#<core::String>("foo");
self::GenericClass<core::String>% /* erasure=core::String, declared=! */ d2 = #C4("foo"){(core::String) → self::GenericClass<core::String>% /* erasure=core::String, declared=! */};
self::GenericClass<core::String>% /* erasure=core::String, declared=! */ d3 = #C3<core::String>("foo"){(core::String) → self::GenericClass<core::String>% /* erasure=core::String, declared=! */};
self::GenericClass<core::String>% /* erasure=core::String, declared=! */ e = self::GenericClass|constructor#<core::String>("bar");
self::GenericClass<core::String>% /* erasure=core::String, declared=! */ e2 = #C4("bar"){(core::String) → self::GenericClass<core::String>% /* erasure=core::String, declared=! */};
self::GenericClass<core::String>% /* erasure=core::String, declared=! */ e3 = #C3<core::String>("bar"){(core::String) → self::GenericClass<core::String>% /* erasure=core::String, declared=! */};
self::GenericClass<core::int>% /* erasure=core::int, declared=! */ f = self::GenericClass|constructor#<core::int>(42);
self::GenericClass<core::int>% /* erasure=core::int, declared=! */ f2 = #C5(42){(core::int) → self::GenericClass<core::int>% /* erasure=core::int, declared=! */};
self::GenericClass<core::int>% /* erasure=core::int, declared=! */ f3 = #C3<core::int>(42){(core::int) → self::GenericClass<core::int>% /* erasure=core::int, declared=! */};
self::GenericClass<core::int>% /* erasure=core::int, declared=! */ g = self::GenericClass|constructor#<core::int>(87);
self::GenericClass<core::int>% /* erasure=core::int, declared=! */ g2 = #C3<core::int>(87){(core::int) → self::GenericClass<core::int>% /* erasure=core::int, declared=! */};
self::GenericClass<core::num>% /* erasure=core::num, declared=! */ h = self::GenericClass|constructor#<core::num>(123);
self::GenericClass<core::num>% /* erasure=core::num, declared=! */ h2 = #C3<core::num>(123){(core::num) → self::GenericClass<core::num>% /* erasure=core::num, declared=! */};
self::expect(3, a as{Unchecked} core::int);
self::expect(3, a);
self::expect(4, b as{Unchecked} core::int);
self::expect(4, b);
self::expect(4, b2 as{Unchecked} core::int);
self::expect(4, b2);
self::expect(6, c as{Unchecked} core::int);
self::expect(6, c);
self::expect(6, c2 as{Unchecked} core::int);
self::expect(6, c2);
self::expect("foo", d as{Unchecked} core::String);
self::expect("foo", d);
self::expect("foo", d2 as{Unchecked} core::String);
self::expect("foo", d2);
self::expect("foo", d3 as{Unchecked} core::String);
self::expect("foo", d3);
self::expect("bar", e as{Unchecked} core::String);
self::expect("bar", e);
self::expect("bar", e2 as{Unchecked} core::String);
self::expect("bar", e2);
self::expect("bar", e3 as{Unchecked} core::String);
self::expect("bar", e3);
self::expect(42, f as{Unchecked} core::int);
self::expect(42, f);
self::expect(42, f2 as{Unchecked} core::int);
self::expect(42, f2);
self::expect(42, f3 as{Unchecked} core::int);
self::expect(42, f3);
self::expect(87, g as{Unchecked} core::int);
self::expect(87, g);
self::expect(87, g2 as{Unchecked} core::int);
self::expect(87, g2);
self::expect(123, h as{Unchecked} core::num);
self::expect(123, h);
self::expect(123, h2 as{Unchecked} core::num);
self::expect(123, h2);
}
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::Class|constructor#_#new#tearOff
#C2 = static-tearoff self::Class|constructor#_#named#tearOff
#C3 = static-tearoff self::GenericClass|constructor#_#new#tearOff
#C4 = instantiation #C3 <core::String>
#C5 = instantiation #C3 <core::int>
}