blob: bb758a45c008d2ca63751296187231dcad87538a [file] [log] [blame]
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:19:15: Error: A value of type 'T' can't be returned from a function with return type 'Class'.
// - 'Class' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
// return t1.method1();
// ^
//
// pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:26:28: Error: A value of type 'T' can't be assigned to a variable of type 'SubClass'.
// - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
// SubClass subClass = t2.method2();
// ^
//
// pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:32:28: Error: The method 'method2' isn't defined for the class 'SubClass'.
// - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
// Try correcting the name to the name of an existing method, or defining a method named 'method2'.
// SubClass subClass = t3.method2();
// ^^^^^^^
//
import self as self;
import "dart:core" as core;
class Class extends core::Object {
synthetic constructor •() self::Class
: super core::Object::•()
;
}
class SubClass extends self::Class {
synthetic constructor •() self::SubClass
: super self::Class::•()
;
}
extension Extension<T extends core::Object? = dynamic> on T% {
method method1 = self::Extension|method1;
tearoff method1 = self::Extension|get#method1;
}
extension BoundExtension<T extends self::Class = self::Class> on T {
method method2 = self::BoundExtension|method2;
tearoff method2 = self::BoundExtension|get#method2;
}
static method Extension|method1<T extends core::Object? = dynamic>(lowered final self::Extension|method1::T% #this) → self::Extension|method1::T%
return #this;
static method Extension|get#method1<T extends core::Object? = dynamic>(lowered final self::Extension|get#method1::T% #this) → () → self::Extension|get#method1::T%
return () self::Extension|get#method1::T% => self::Extension|method1<self::Extension|get#method1::T%>(#this);
static method BoundExtension|method2<T extends self::Class = self::Class>(lowered final self::BoundExtension|method2::T #this) → self::BoundExtension|method2::T
return #this;
static method BoundExtension|get#method2<T extends self::Class = self::Class>(lowered final self::BoundExtension|get#method2::T #this) → () → self::BoundExtension|get#method2::T
return () self::BoundExtension|get#method2::T => self::BoundExtension|method2<self::BoundExtension|get#method2::T>(#this);
static method test1<T extends core::Object? = dynamic>(self::test1::T% t1) self::Class {
if(t1 is{ForNonNullableByDefault} self::SubClass) {
return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:19:15: Error: A value of type 'T' can't be returned from a function with return type 'Class'.
- 'Class' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
return t1.method1();
^" in self::Extension|method1<self::test1::T%>(t1{self::test1::T% & self::SubClass /* '%' & '!' = '!' */}) as{TypeError,ForNonNullableByDefault} self::Class;
}
return new self::Class::•();
}
static method test2<T extends self::Class = self::Class>(self::test2::T t2) → dynamic {
if(self::test2::T.{core::Type::==}(#C1)) {
self::SubClass subClass = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:26:28: Error: A value of type 'T' can't be assigned to a variable of type 'SubClass'.
- 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
SubClass subClass = t2.method2();
^" in self::BoundExtension|method2<self::test2::T>(t2) as{TypeError,ForNonNullableByDefault} self::SubClass;
}
}
static method test3<T extends core::Object? = dynamic>(self::test3::T% t3) → dynamic {
if(t3 is{ForNonNullableByDefault} self::SubClass) {
self::SubClass subClass = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:32:28: Error: The method 'method2' isn't defined for the class 'SubClass'.
- 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
Try correcting the name to the name of an existing method, or defining a method named 'method2'.
SubClass subClass = t3.method2();
^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::SubClass;
}
}
static method main() → dynamic {}
constants {
#C1 = TypeLiteralConstant(self::SubClass*)
}