blob: 10a044e537b11b319a2eda3973d34a5e16131f65 [file] [log] [blame]
library;
//
// Problems in library:
//
// pkg/front_end/testcases/extension_types/issue53123.dart:7:6: Error: Inferred type argument 'V<dynamic>' doesn't conform to the bound 'V<T>' of the type variable 'T' on 'ExtensionType(V<V<dynamic>>)'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// test(V v) {
// ^
// pkg/front_end/testcases/extension_types/issue53123.dart:5:18: Context: This is the type variable whose bound isn't conformed to.
// extension type V<T extends V<T>>(T id) {}
// ^
//
// pkg/front_end/testcases/extension_types/issue53123.dart:8:8: Error: Inferred type argument 'V<dynamic>' doesn't conform to the bound 'V<T>' of the type variable 'T' on 'ExtensionType(V<V<dynamic>>)'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// List<V> l = [v];
// ^
// pkg/front_end/testcases/extension_types/issue53123.dart:5:18: Context: This is the type variable whose bound isn't conformed to.
// extension type V<T extends V<T>>(T id) {}
// ^
//
import self as self;
import "dart:core" as core;
extension type V<T extends self::V<T%> /* = T% */ = self::V<dynamic> /* = dynamic */>(T% id) {
abstract extension-type-member representation-field get id() T%;
constructor = self::V|constructor#;
constructor tearoff = self::V|constructor#_#new#tearOff;
}
static extension-type-member method V|constructor#<T extends self::V<self::V|constructor#::T%> /* = self::V|constructor#::T% */ = self::V<dynamic> /* = dynamic */>(self::V|constructor#::T% id) → self::V<self::V|constructor#::T%> /* = self::V|constructor#::T% */ {
lowered final self::V<self::V|constructor#::T%> /* = self::V|constructor#::T% */ #this = id;
return #this;
}
static extension-type-member method V|constructor#_#new#tearOff<T extends self::V<self::V|constructor#_#new#tearOff::T%>% /* = self::V|constructor#_#new#tearOff::T% */ = self::V<dynamic> /* = dynamic */>(self::V|constructor#_#new#tearOff::T% id) → self::V<self::V|constructor#_#new#tearOff::T%>% /* = self::V|constructor#_#new#tearOff::T% */
return self::V|constructor#<self::V|constructor#_#new#tearOff::T%>(id);
static method test(self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */ v) dynamic {
core::List<self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */> l = <self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */>[v];
}