blob: 70df5d405312fa9a3c24b1ce25a5c5eed32d9cc6 [file] [log] [blame]
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>
}