blob: 0bc41bec3c8e716fcdb1930e719be7cad670edad [file] [log] [blame]
library;
import self as self;
import "dart:core" as core;
class Class extends core::Object {
synthetic constructor •() self::Class*
: super core::Object::•()
;
abstract member-signature get _identityHashCode() core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) core::bool*; -> core::Object::_simpleInstanceOf
abstract member-signature method _simpleInstanceOfTrue(dynamic type) core::bool*; -> core::Object::_simpleInstanceOfTrue
abstract member-signature method _simpleInstanceOfFalse(dynamic type) core::bool*; -> core::Object::_simpleInstanceOfFalse
abstract member-signature operator ==(dynamic other) core::bool*; -> core::Object::==
abstract member-signature get hashCode() core::int*; -> core::Object::hashCode
abstract member-signature method toString() core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() core::Type*; -> core::Object::runtimeType
}
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>(final self::Extension|method1::T* #this) → self::Extension|method1::T*
return #this;
static method Extension|get#method1<T extends core::Object* = dynamic>(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*>(final self::BoundExtension|method2::T* #this) → self::BoundExtension|method2::T*
return #this;
static method BoundExtension|get#method2<T extends self::Class* = self::Class*>(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 self::SubClass*) {
return self::Extension|method1<self::SubClass*>(t1{self::test1::T* & self::SubClass* /* '*' & '*' = '*' */});
}
return new self::Class::•();
}
static method test2<T extends self::Class* = self::Class*>(self::test2::T* t2) dynamic {
if(self::test2::T*.{core::Type::==}(self::SubClass*)) {
self::SubClass* subClass = self::BoundExtension|method2<self::Class*>(t2) as{TypeError} self::SubClass*;
}
}
static method test3<T extends core::Object* = dynamic>(self::test3::T* t3) dynamic {
if(t3 is self::SubClass*) {
self::SubClass* subClass = self::BoundExtension|method2<self::SubClass*>(t3{self::test3::T* & self::SubClass* /* '*' & '*' = '*' */});
}
}
static method main() dynamic {}
Extra constant evaluation status:
Evaluated: TypeLiteral @ org-dartlang-testcase:///type_variable_bound.dart:27:12 -> TypeLiteralConstant(SubClass*)
Extra constant evaluation: evaluated: 23, effectively constant: 1