| library; |
| // |
| // Problems in library: |
| // |
| // pkg/front_end/testcases/extension_types/external.dart:42:29: Error: Inferred type argument 'int' doesn't conform to the bound 'B' of the type variable 'T' on 'T Function<T extends B>(T)'. |
| // Try specifying type arguments explicitly so that they conform to the bounds. |
| // int Function(int) f3 = b2.genericMethod; |
| // ^ |
| // |
| import self as self; |
| import "dart:core" as core; |
| |
| abstract class A extends core::Object { |
| synthetic constructor •() → self::A |
| : super core::Object::•() |
| ; |
| } |
| extension type B(self::A a) { |
| abstract extension-type-member representation-field get a() → self::A; |
| get field = self::B|get#field; |
| set field = self::B|set#field; |
| method method = self::B|method; |
| method tearoff method = self::B|get#method; |
| method genericMethod = self::B|genericMethod; |
| method tearoff genericMethod = self::B|get#genericMethod; |
| get getter = self::B|get#getter; |
| static get staticField = get self::B|staticField; |
| static set staticField = set self::B|staticField; |
| static method staticMethod = self::B|staticMethod; |
| static method staticGenericMethod = self::B|staticGenericMethod; |
| static get staticGetter = get self::B|staticGetter; |
| set setter = self::B|set#setter; |
| static set staticSetter = set self::B|staticSetter; |
| constructor _ = self::B|constructor#_; |
| constructor tearoff _ = self::B|constructor#_#_#tearOff; |
| constructor • = self::B|constructor#; |
| constructor tearoff • = self::B|constructor#_#new#tearOff; |
| constructor named = self::B|constructor#named; |
| constructor tearoff named = self::B|constructor#_#named#tearOff; |
| } |
| static extension-type-member method B|constructor#_(self::A a) → self::B% /* erasure=self::A, declared=! */ { |
| lowered final self::B% /* erasure=self::A, declared=! */ #this = a; |
| return #this; |
| } |
| static extension-type-member method B|constructor#_#_#tearOff(self::A a) → self::B% /* erasure=self::A, declared=! */ |
| return self::B|constructor#_(a); |
| external static extension-type-member method B|constructor#(self::A a) → self::B% /* erasure=self::A, declared=! */; |
| static extension-type-member method B|constructor#_#new#tearOff(self::A a) → self::B% /* erasure=self::A, declared=! */ |
| return self::B|constructor#(a); |
| external static extension-type-member method B|constructor#named(core::int i) → self::B% /* erasure=self::A, declared=! */; |
| static extension-type-member method B|constructor#_#named#tearOff(core::int i) → self::B% /* erasure=self::A, declared=! */ |
| return self::B|constructor#named(i); |
| external static extension-type-member method B|get#field(lowered self::A #this) → self::A; |
| external static extension-type-member method B|set#field(lowered self::A #this, synthesized self::A #externalFieldValue) → void; |
| external static extension-type-member method B|method(lowered final self::B% /* erasure=self::A, declared=! */ #this) → self::A; |
| static extension-type-member method B|get#method(lowered final self::B% /* erasure=self::A, declared=! */ #this) → () → self::A |
| return () → self::A => self::B|method(#this); |
| external static extension-type-member method B|genericMethod<T extends self::B% /* erasure=self::A, declared=! */>(lowered final self::B% /* erasure=self::A, declared=! */ #this, self::B|genericMethod::T% t) → self::B|genericMethod::T%; |
| static extension-type-member method B|get#genericMethod(lowered final self::B% /* erasure=self::A, declared=! */ #this) → <T extends self::B% /* erasure=self::A, declared=! */>(T%) → T% |
| return <T extends self::B% /* erasure=self::A, declared=! */>(T% t) → T% => self::B|genericMethod<T%>(#this, t); |
| external static extension-type-member method B|get#getter(lowered final self::B% /* erasure=self::A, declared=! */ #this) → self::B% /* erasure=self::A, declared=! */; |
| external static extension-type-member method B|set#setter(lowered final self::B% /* erasure=self::A, declared=! */ #this, self::B% /* erasure=self::A, declared=! */ b) → void; |
| external static extension-type-member get B|staticField() → self::A; |
| external static extension-type-member set B|staticField(synthesized self::A #externalFieldValue) → void; |
| external static extension-type-member method B|staticMethod() → self::A; |
| external static extension-type-member method B|staticGenericMethod<T extends core::Object? = dynamic>(self::B|staticGenericMethod::T% t) → self::B|staticGenericMethod::T%; |
| external static extension-type-member get B|staticGetter() → self::B% /* erasure=self::A, declared=! */; |
| external static extension-type-member set B|staticSetter(self::B% /* erasure=self::A, declared=! */ b) → void; |
| static method method(self::A a) → void { |
| self::B% /* erasure=self::A, declared=! */ b1 = self::B|constructor#(a); |
| self::B% /* erasure=self::A, declared=! */ b2 = self::B|constructor#named(0); |
| a = self::B|get#field(b1); |
| self::B|set#field(b1, a); |
| a = self::B|method(b1); |
| () → self::A f1 = self::B|get#method(b1); |
| b2 = self::B|genericMethod<self::B% /* erasure=self::A, declared=! */>(b2, b2); |
| <T extends self::B% /* erasure=self::A, declared=! */>(T%) → T% f2 = self::B|get#genericMethod(b2); |
| (core::int) → core::int f3 = self::B|get#genericMethod(b2)<core::int>; |
| b1 = self::B|get#getter(b2); |
| self::B|set#setter(b1, b2); |
| a = self::B|staticField; |
| self::B|staticField = a; |
| a = self::B|staticMethod(); |
| () → self::A f4 = #C1; |
| b2 = self::B|staticGenericMethod<self::B% /* erasure=self::A, declared=! */>(b2); |
| <T extends core::Object? = dynamic>(T%) → T% f5 = #C2; |
| (core::String) → core::String f6 = #C3; |
| b1 = self::B|staticGetter; |
| self::B|staticSetter = b2; |
| } |
| |
| constants { |
| #C1 = static-tearoff self::B|staticMethod |
| #C2 = static-tearoff self::B|staticGenericMethod |
| #C3 = instantiation #C2 <core::String> |
| } |