| library; |
| // |
| // Problems in library: |
| // |
| // pkg/front_end/testcases/extension_types/supertype_conflict.dart:9:16: Error: 'C' is a supertype of itself. |
| // extension type C<T>(A<T> it) implements C<T> {} |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/supertype_conflict.dart:13:16: Error: 'E' is a supertype of itself. |
| // extension type E(A<Never> it) implements B<int>, C<String> {} |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/supertype_conflict.dart:11:16: Error: 'D' can't implement both 'A<int>' and 'A<String>' |
| // - 'A' is from 'pkg/front_end/testcases/extension_types/supertype_conflict.dart'. |
| // extension type D(A<Never> it) implements A<int>, B<String> {} |
| // ^ |
| // |
| import self as self; |
| import "dart:core" as core; |
| |
| class A<T extends core::Object? = dynamic> extends core::Object { |
| synthetic constructor •() → self::A<self::A::T%> |
| : super core::Object::•() |
| ; |
| } |
| extension type B<T extends core::Object? = dynamic>(self::A<T%> it) implements self::A<T%> { |
| abstract extension-type-member representation-field get it() → self::A<T%>; |
| constructor • = self::B|constructor#; |
| constructor tearoff • = self::B|constructor#_#new#tearOff; |
| } |
| extension type C<T extends core::Object? = dynamic>(self::A<T%> it) { |
| abstract extension-type-member representation-field get it() → self::A<T%>; |
| constructor • = self::C|constructor#; |
| constructor tearoff • = self::C|constructor#_#new#tearOff; |
| } |
| extension type D(self::A<Never> it) implements self::A<core::int>, self::B<core::String> /* erasure=self::A<core::String> */ { |
| abstract extension-type-member representation-field get it() → self::A<Never>; |
| constructor • = self::D|constructor#; |
| constructor tearoff • = self::D|constructor#_#new#tearOff; |
| } |
| extension type E(self::A<Never> it) { |
| abstract extension-type-member representation-field get it() → self::A<Never>; |
| constructor • = self::E|constructor#; |
| constructor tearoff • = self::E|constructor#_#new#tearOff; |
| } |
| static extension-type-member method B|constructor#<T extends core::Object? = dynamic>(self::A<self::B|constructor#::T%> it) → self::B<self::B|constructor#::T%> /* erasure=self::A<self::B|constructor#::T%> */ { |
| lowered final self::B<self::B|constructor#::T%> /* erasure=self::A<self::B|constructor#::T%> */ #this = it; |
| return #this; |
| } |
| static extension-type-member method B|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::A<self::B|constructor#_#new#tearOff::T%> it) → self::B<self::B|constructor#_#new#tearOff::T%> /* erasure=self::A<self::B|constructor#_#new#tearOff::T%> */ |
| return self::B|constructor#<self::B|constructor#_#new#tearOff::T%>(it); |
| static extension-type-member method C|constructor#<T extends core::Object? = dynamic>(self::A<self::C|constructor#::T%> it) → self::C<self::C|constructor#::T%>% /* erasure=self::A<self::C|constructor#::T%>, declared=! */ { |
| lowered final self::C<self::C|constructor#::T%>% /* erasure=self::A<self::C|constructor#::T%>, declared=! */ #this = it; |
| return #this; |
| } |
| static extension-type-member method C|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::A<self::C|constructor#_#new#tearOff::T%> it) → self::C<self::C|constructor#_#new#tearOff::T%>% /* erasure=self::A<self::C|constructor#_#new#tearOff::T%>, declared=! */ |
| return self::C|constructor#<self::C|constructor#_#new#tearOff::T%>(it); |
| static extension-type-member method D|constructor#(self::A<Never> it) → self::D /* erasure=self::A<Never> */ { |
| lowered final self::D /* erasure=self::A<Never> */ #this = it; |
| return #this; |
| } |
| static extension-type-member method D|constructor#_#new#tearOff(self::A<Never> it) → self::D /* erasure=self::A<Never> */ |
| return self::D|constructor#(it); |
| static extension-type-member method E|constructor#(self::A<Never> it) → self::E% /* erasure=self::A<Never>, declared=! */ { |
| lowered final self::E% /* erasure=self::A<Never>, declared=! */ #this = it; |
| return #this; |
| } |
| static extension-type-member method E|constructor#_#new#tearOff(self::A<Never> it) → self::E% /* erasure=self::A<Never>, declared=! */ |
| return self::E|constructor#(it); |