| library; |
| // |
| // Problems in library: |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:9:28: Error: Type 'X' can't use itself as a bound. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // typedef G1 = void Function<X extends E1<X>>(); // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:23:28: Error: Type 'X' is a bound of itself via 'Y'. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // typedef G2 = void Function<X extends E1<Y>, Y extends X>(); // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:7:10: Error: Type 'X' can't use itself as a bound. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // class A1<X extends E1<X>> {} // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:8:12: Error: Type 'X' can't use itself as a bound. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // typedef F1<X extends E1<X>> = int; // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:10:17: Error: Type 'X' can't use itself as a bound. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // typedef void H1<X extends E1<X>>(); // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:11:16: Error: Type 'X' can't use itself as a bound. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // extension Ext1<X extends E1<X>> on List<X> {} // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:12:12: Error: Type 'X' can't use itself as a bound. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // enum Enum1<X extends E1<X>> { element<Never>(); } // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:13:6: Error: Type 'X' can't use itself as a bound. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // foo1<X extends E1<X>>() {} // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:14:10: Error: Type 'X' can't use itself as a bound. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // mixin M1<X extends E1<X>> on List<num> {} // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:19:20: Error: Type 'X' can't use itself as a bound. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // extension type ET1<X extends E1<X>>(Object? it) {} // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:21:10: Error: Type 'X' is a bound of itself via 'Y'. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // class A2<X extends E1<Y>, Y extends X> {} // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:22:12: Error: Type 'X' is a bound of itself via 'Y'. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // typedef F2<X extends E1<Y>, Y extends X> = int; // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:24:17: Error: Type 'X' is a bound of itself via 'Y'. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // typedef void H2<X extends E1<Y>, Y extends X>(); // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:25:16: Error: Type 'X' is a bound of itself via 'Y'. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // extension Ext2<X extends E1<Y>, Y extends X> on List<X> {} // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:26:12: Error: Type 'X' is a bound of itself via 'Y'. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // enum Enum2<X extends E1<Y>, Y extends X> { element<Never, Never>(); } // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:27:6: Error: Type 'X' is a bound of itself via 'Y'. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // foo2<X extends E1<Y>, Y extends X>() {} // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:28:10: Error: Type 'X' is a bound of itself via 'Y'. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // mixin M2<X extends E1<Y>, Y extends X> on List<num> {} // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/extension_types/issue54097.dart:33:20: Error: Type 'X' is a bound of itself via 'Y'. |
| // Try breaking the cycle by removing at least one of the 'extends' clauses in the cycle. |
| // extension type ET2<X extends E1<Y>, Y extends X>(Object? it) {} // Error. |
| // ^ |
| // |
| import self as self; |
| import "dart:core" as core; |
| |
| typedef F1<unrelated X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */> = core::int; |
| typedef G1 = <X extends invalid-type = dynamic>() → void; |
| typedef H1<unrelated X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */> = () → void; |
| typedef F2<unrelated X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */, unrelated Y extends X% = dynamic> = core::int; |
| typedef G2 = <X extends invalid-type = dynamic, Y extends X% = dynamic>() → void; |
| typedef H2<unrelated X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */, unrelated Y extends X% = dynamic> = () → void; |
| class A1<X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */> extends core::Object { |
| synthetic constructor •() → self::A1<self::A1::X%> |
| ; |
| } |
| class Enum1<X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */> extends core::_Enum /*isEnum*/ { |
| static const field core::List<self::Enum1<self::E1<dynamic>% /* erasure=dynamic, declared=! */>> values = const <self::Enum1<invalid-type>>[self::Enum1::element]; |
| enum-element static const field self::Enum1<Never> element = const self::Enum1::•<Never>(0, "element"); |
| const synthetic constructor •(core::int #index, core::String #name) → self::Enum1<self::Enum1::X%> |
| : super core::_Enum::•(#index, #name) |
| ; |
| method _enumToString() → core::String |
| return "Enum1.${this.{core::_Enum::_name}{core::String}}"; |
| } |
| abstract class M1<X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */> extends core::List<core::num> /*isMixinDeclaration*/ { |
| } |
| class A2<X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */, Y extends self::A2::X% = dynamic> extends core::Object { |
| synthetic constructor •() → self::A2<self::A2::X%, self::A2::Y%> |
| ; |
| } |
| class Enum2<X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */, Y extends self::Enum2::X% = dynamic> extends core::_Enum /*isEnum*/ { |
| static const field core::List<self::Enum2<self::E1<dynamic>% /* erasure=dynamic, declared=! */, dynamic>> values = const <self::Enum2<invalid-type, invalid-type>>[self::Enum2::element]; |
| enum-element static const field self::Enum2<Never, Never> element = const self::Enum2::•<Never, Never>(0, "element"); |
| const synthetic constructor •(core::int #index, core::String #name) → self::Enum2<self::Enum2::X%, self::Enum2::Y%> |
| : super core::_Enum::•(#index, #name) |
| ; |
| method _enumToString() → core::String |
| return "Enum2.${this.{core::_Enum::_name}{core::String}}"; |
| } |
| abstract class M2<X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */, Y extends self::M2::X% = dynamic> extends core::List<core::num> /*isMixinDeclaration*/ { |
| } |
| extension Ext1<X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */> on core::List<X%> { |
| } |
| extension Ext2<X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */, Y extends X% = dynamic> on core::List<X%> { |
| } |
| extension type E1<X extends core::Object? = dynamic>(X% it) { |
| abstract extension-type-member representation-field get it() → X%; |
| constructor • = self::E1|constructor#; |
| constructor tearoff • = self::E1|constructor#_#new#tearOff; |
| } |
| extension type ET1<X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */>(core::Object? it) { |
| abstract extension-type-member representation-field get it() → core::Object?; |
| constructor • = self::ET1|constructor#; |
| constructor tearoff • = self::ET1|constructor#_#new#tearOff; |
| } |
| extension type ET2<X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */, Y extends X% = dynamic>(core::Object? it) { |
| abstract extension-type-member representation-field get it() → core::Object?; |
| constructor • = self::ET2|constructor#; |
| constructor tearoff • = self::ET2|constructor#_#new#tearOff; |
| } |
| static extension-type-member method E1|constructor#<X extends core::Object? = dynamic>(self::E1|constructor#::X% it) → self::E1<self::E1|constructor#::X%>% /* erasure=self::E1|constructor#::X%, declared=! */ |
| ; |
| static extension-type-member method E1|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1|constructor#_#new#tearOff::X% it) → self::E1<self::E1|constructor#_#new#tearOff::X%>% /* erasure=self::E1|constructor#_#new#tearOff::X%, declared=! */ |
| return self::E1|constructor#<self::E1|constructor#_#new#tearOff::X%>(it); |
| static method foo1<X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */>() → dynamic |
| ; |
| static method bar1() → dynamic |
| ; |
| static extension-type-member method ET1|constructor#<X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */>(core::Object? it) → self::ET1<self::ET1|constructor#::X%>% /* erasure=core::Object?, declared=! */ |
| ; |
| static extension-type-member method ET1|constructor#_#new#tearOff<X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */>(core::Object? it) → self::ET1<self::ET1|constructor#_#new#tearOff::X%>% /* erasure=core::Object?, declared=! */ |
| return self::ET1|constructor#<self::ET1|constructor#_#new#tearOff::X%>(it); |
| static method foo2<X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */, Y extends self::foo2::X% = dynamic>() → dynamic |
| ; |
| static method bar2() → dynamic |
| ; |
| static extension-type-member method ET2|constructor#<X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */, Y extends self::ET2|constructor#::X% = dynamic>(core::Object? it) → self::ET2<self::ET2|constructor#::X%, self::ET2|constructor#::Y%>% /* erasure=core::Object?, declared=! */ |
| ; |
| static extension-type-member method ET2|constructor#_#new#tearOff<X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */, Y extends self::ET2|constructor#_#new#tearOff::X% = dynamic>(core::Object? it) → self::ET2<self::ET2|constructor#_#new#tearOff::X%, self::ET2|constructor#_#new#tearOff::Y%>% /* erasure=core::Object?, declared=! */ |
| return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::X%, self::ET2|constructor#_#new#tearOff::Y%>(it); |
| static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#F1#fromEnvironment#tearOff<unrelated X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */>(core::String name, {has-declared-initializer core::int defaultValue}) → core::int |
| return core::int::fromEnvironment(name, defaultValue: defaultValue); |
| static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#F2#fromEnvironment#tearOff<unrelated X extends invalid-type = self::E1<dynamic>% /* erasure=dynamic, declared=! */, unrelated Y extends self::_#F2#fromEnvironment#tearOff::X% = dynamic>(core::String name, {has-declared-initializer core::int defaultValue}) → core::int |
| return core::int::fromEnvironment(name, defaultValue: defaultValue); |
| |
| |
| Extra constant evaluation status: |
| Evaluated: ListLiteral @ org-dartlang-testcase:///issue54097.dart:12:6 -> ListConstant(const <Enum1<<invalid>>>[const Enum1<Never>{_Enum.index: 0, _Enum._name: "element"}]) |
| Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue54097.dart:12:31 -> InstanceConstant(const Enum1<Never>{_Enum.index: 0, _Enum._name: "element"}) |
| Evaluated: ListLiteral @ org-dartlang-testcase:///issue54097.dart:26:6 -> ListConstant(const <Enum2<<invalid>, <invalid>>>[const Enum2<Never, Never>{_Enum.index: 0, _Enum._name: "element"}]) |
| Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue54097.dart:26:44 -> InstanceConstant(const Enum2<Never, Never>{_Enum.index: 0, _Enum._name: "element"}) |
| Extra constant evaluation: evaluated: 26, effectively constant: 4 |