blob: dfbaae79f4dfa556bcd87b43a8586459c30d7b17 [file] [log] [blame]
library;
import self as self;
import "dart:core" as core;
import "inherited_representation_field_lib.dart" as inh;
import "org-dartlang-testcase:///inherited_representation_field_lib.dart";
extension type A(core::int a) {
abstract extension-type-member representation-field get a() core::int;
constructor = self::A|constructor#;
constructor tearoff = self::A|constructor#_#new#tearOff;
}
extension type B(core::int b) implements self::A% /* erasure=core::int, declared=! */ {
abstract extension-type-member representation-field get b() core::int;
method methodA = self::B|methodA;
method tearoff methodA = self::B|get#methodA;
method methodB = self::B|methodB;
method tearoff methodB = self::B|get#methodB;
constructor = self::B|constructor#;
constructor tearoff = self::B|constructor#_#new#tearOff;
}
extension type C(core::int _c) {
abstract extension-type-member representation-field get _c() core::int;
constructor = self::C|constructor#;
constructor tearoff = self::C|constructor#_#new#tearOff;
}
extension type E(core::int _e) implements inh::D% /* erasure=core::int, declared=! */ {
abstract extension-type-member representation-field get _e() core::int;
method methodC = self::E|methodC;
method tearoff methodC = self::E|get#methodC;
constructor = self::E|constructor#;
constructor tearoff = self::E|constructor#_#new#tearOff;
}
extension type G<T extends core::Object? = dynamic>(T% g) {
abstract extension-type-member representation-field get g() T%;
constructor = self::G|constructor#;
constructor tearoff = self::G|constructor#_#new#tearOff;
}
extension type H<T extends core::Object? = dynamic>(core::List<T%> h) implements self::G<core::List<T%>>% /* erasure=core::List<T%>, declared=! */ {
abstract extension-type-member representation-field get h() core::List<T%>;
constructor = self::H|constructor#;
constructor tearoff = self::H|constructor#_#new#tearOff;
}
static extension-type-member method A|constructor#(core::int a) → self::A% /* erasure=core::int, declared=! */ {
lowered final self::A% /* erasure=core::int, declared=! */ #this = a;
return #this;
}
static extension-type-member method A|constructor#_#new#tearOff(core::int a) → self::A% /* erasure=core::int, declared=! */
return self::A|constructor#(a);
static extension-type-member method B|constructor#(core::int b) → self::B% /* erasure=core::int, declared=! */ {
lowered final self::B% /* erasure=core::int, declared=! */ #this = b;
return #this;
}
static extension-type-member method B|constructor#_#new#tearOff(core::int b) → self::B% /* erasure=core::int, declared=! */
return self::B|constructor#(b);
static extension-type-member method B|methodA(lowered final self::B% /* erasure=core::int, declared=! */ #this) → dynamic
return #this as{Unchecked} core::int;
static extension-type-member method B|get#methodA(lowered final self::B% /* erasure=core::int, declared=! */ #this) → () → dynamic
return () dynamic => self::B|methodA(#this);
static extension-type-member method B|methodB(lowered final self::B% /* erasure=core::int, declared=! */ #this) → dynamic
return #this as{Unchecked} core::int;
static extension-type-member method B|get#methodB(lowered final self::B% /* erasure=core::int, declared=! */ #this) → () → dynamic
return () dynamic => self::B|methodB(#this);
static extension-type-member method C|constructor#(core::int _c) → self::C% /* erasure=core::int, declared=! */ {
lowered final self::C% /* erasure=core::int, declared=! */ #this = _c;
return #this;
}
static extension-type-member method C|constructor#_#new#tearOff(core::int _c) → self::C% /* erasure=core::int, declared=! */
return self::C|constructor#(_c);
static extension-type-member method E|constructor#(core::int _e) → self::E% /* erasure=core::int, declared=! */ {
lowered final self::E% /* erasure=core::int, declared=! */ #this = _e;
return #this;
}
static extension-type-member method E|constructor#_#new#tearOff(core::int _e) → self::E% /* erasure=core::int, declared=! */
return self::E|constructor#(_e);
static extension-type-member method E|methodC(lowered final self::E% /* erasure=core::int, declared=! */ #this) → dynamic
return #this as{Unchecked} core::int;
static extension-type-member method E|get#methodC(lowered final self::E% /* erasure=core::int, declared=! */ #this) → () → dynamic
return () dynamic => self::E|methodC(#this);
static extension-type-member method G|constructor#<T extends core::Object? = dynamic>(self::G|constructor#::T% g) → self::G<self::G|constructor#::T%>% /* erasure=self::G|constructor#::T%, declared=! */ {
lowered final self::G<self::G|constructor#::T%>% /* erasure=self::G|constructor#::T%, declared=! */ #this = g;
return #this;
}
static extension-type-member method G|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::G|constructor#_#new#tearOff::T% g) → self::G<self::G|constructor#_#new#tearOff::T%>% /* erasure=self::G|constructor#_#new#tearOff::T%, declared=! */
return self::G|constructor#<self::G|constructor#_#new#tearOff::T%>(g);
static extension-type-member method H|constructor#<T extends core::Object? = dynamic>(core::List<self::H|constructor#::T%> h) → self::H<self::H|constructor#::T%>% /* erasure=core::List<self::H|constructor#::T%>, declared=! */ {
lowered final self::H<self::H|constructor#::T%>% /* erasure=core::List<self::H|constructor#::T%>, declared=! */ #this = h;
return #this;
}
static extension-type-member method H|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::H|constructor#_#new#tearOff::T%> h) → self::H<self::H|constructor#_#new#tearOff::T%>% /* erasure=core::List<self::H|constructor#_#new#tearOff::T%>, declared=! */
return self::H|constructor#<self::H|constructor#_#new#tearOff::T%>(h);
static method main() dynamic {
self::A% /* erasure=core::int, declared=! */ a = self::A|constructor#(42);
self::expect(42, a as{Unchecked} core::int);
self::B% /* erasure=core::int, declared=! */ b = self::B|constructor#(87);
self::expect(87, b as{Unchecked} core::int);
self::expect(87, b as{Unchecked} core::int);
self::expect(87, self::B|methodA(b));
self::expect(87, self::B|methodB(b));
self::C% /* erasure=core::int, declared=! */ c = self::C|constructor#(123);
self::expect(123, c as{Unchecked} core::int);
inh::D% /* erasure=core::int, declared=! */ d = inh::D|constructor#(442);
self::expect(442, d as{Unchecked} core::int);
self::E% /* erasure=core::int, declared=! */ e = self::E|constructor#(872);
self::expect(872, e as{Unchecked} core::int);
self::expect(872, e as{Unchecked} core::int);
self::expect(872, self::E|methodC(e));
inh::F% /* erasure=core::int, declared=! */ f = inh::F|constructor#(1023);
self::expect(1023, f as{Unchecked} core::int);
self::expect(1023, f as{Unchecked} core::int);
self::expect(1023, self::E|methodC(f));
self::expect(1023, inh::F|methodD(f));
self::G<core::int>% /* erasure=core::int, declared=! */ g1 = self::G|constructor#<core::int>(72);
core::int g1_g = g1 as{Unchecked} core::int;
core::int g1_alias = g1_g;
self::expect(72, g1 as{Unchecked} core::int);
self::G<core::String>% /* erasure=core::String, declared=! */ g2 = self::G|constructor#<core::String>("72");
core::String g2_g = g2 as{Unchecked} core::String;
core::String g2_alias = g2_g;
self::expect("72", g2 as{Unchecked} core::String);
core::List<core::int> list1 = <core::int>[97];
self::H<core::int>% /* erasure=core::List<core::int>, declared=! */ h1 = self::H|constructor#<core::int>(list1);
core::List<core::int> h1_g = h1 as{Unchecked} core::List<core::int>;
core::List<core::int> h1_g_alias = h1_g;
self::expect(list1, h1 as{Unchecked} core::List<core::int>);
core::List<core::int> h1_h = h1 as{Unchecked} core::List<core::int>;
core::List<core::int> h1_h_alias = h1_h;
self::expect(list1, h1 as{Unchecked} core::List<core::int>);
core::List<core::String> list2 = <core::String>["foo"];
self::H<core::String>% /* erasure=core::List<core::String>, declared=! */ h2 = self::H|constructor#<core::String>(list2);
core::List<core::String> h2_g = h2 as{Unchecked} core::List<core::String>;
core::List<core::String> h2_g_alias = h2_g;
self::expect(list2, h2 as{Unchecked} core::List<core::String>);
core::List<core::String> h2_h = h2 as{Unchecked} core::List<core::String>;
core::List<core::String> h2_h_alias = h2_h;
self::expect(list2, h2 as{Unchecked} core::List<core::String>);
}
static method expect(dynamic expected, dynamic actual) dynamic {
if(!(expected =={core::Object::==}{(core::Object) core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
library;
import self as inh;
import "dart:core" as core;
import "org-dartlang-testcase:///inherited_representation_field.dart";
extension type D(core::int _d) implements #lib1::C% /* erasure=core::int, declared=! */ {
abstract extension-type-member representation-field get _d() core::int;
constructor = inh::D|constructor#;
constructor tearoff = inh::D|constructor#_#new#tearOff;
}
extension type F(core::int _f) implements #lib1::E% /* erasure=core::int, declared=! */ {
abstract extension-type-member representation-field get _f() core::int;
method methodD = inh::F|methodD;
method tearoff methodD = inh::F|get#methodD;
constructor = inh::F|constructor#;
constructor tearoff = inh::F|constructor#_#new#tearOff;
}
static extension-type-member method D|constructor#(core::int _d) → inh::D% /* erasure=core::int, declared=! */ {
lowered final inh::D% /* erasure=core::int, declared=! */ #this = _d;
return #this;
}
static extension-type-member method D|constructor#_#new#tearOff(core::int _d) → inh::D% /* erasure=core::int, declared=! */
return inh::D|constructor#(_d);
static extension-type-member method F|constructor#(core::int _f) → inh::F% /* erasure=core::int, declared=! */ {
lowered final inh::F% /* erasure=core::int, declared=! */ #this = _f;
return #this;
}
static extension-type-member method F|constructor#_#new#tearOff(core::int _f) → inh::F% /* erasure=core::int, declared=! */
return inh::F|constructor#(_f);
static extension-type-member method F|methodD(lowered final inh::F% /* erasure=core::int, declared=! */ #this) → dynamic
return #this as{Unchecked} core::int;
static extension-type-member method F|get#methodD(lowered final inh::F% /* erasure=core::int, declared=! */ #this) → () → dynamic
return () dynamic => inh::F|methodD(#this);