blob: e55a858cc75bacf2be0b3833a81acd9a7b493456 [file] [log] [blame]
library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/issue54553.dart:8:7: Error: Can't implement 'A?' because it's nullable.
// Try removing the question mark.
// class B implements A? {} // Error.
// ^
//
// pkg/front_end/testcases/general/issue54553.dart:10:49: Error: Can't use a typedef denoting a type variable as a constructor, nor for a static member access.
// extension type EIAliasNullable(A? _) implements F<A?> {} // Error.
// ^
// pkg/front_end/testcases/general/issue54553.dart:9:11: Context: This is the type variable ultimately denoted.
// typedef F<T> = T;
// ^
//
// pkg/front_end/testcases/general/issue54553.dart:5:46: Error: Can't implement 'int?' because it's nullable.
// Try removing the question mark.
// extension type EINullable(int? _) implements int? {} // Error.
// ^
//
// pkg/front_end/testcases/general/issue54553.dart:10:49: Error: The type 'F<A?>' which is an alias of 'A?' can't be implemented by an extension type because it is nullable.
// - 'A' is from 'pkg/front_end/testcases/general/issue54553.dart'.
// extension type EIAliasNullable(A? _) implements F<A?> {} // Error.
// ^
// pkg/front_end/testcases/general/issue54553.dart:9:9: Context: The issue arises via this type alias.
// typedef F<T> = T;
// ^
//
import self as self;
import "dart:core" as core;
typedef F<T extends core::Object? = dynamic> = T%;
class A extends core::Object {
synthetic constructor •() self::A
: super core::Object::•()
;
}
class B extends core::Object implements self::A {
synthetic constructor •() self::B
: super core::Object::•()
;
}
extension type EINullable(core::int? _) {
abstract extension-type-member representation-field get _() core::int?;
constructor = self::EINullable|constructor#;
constructor tearoff = self::EINullable|constructor#_#new#tearOff;
}
extension type EIAliasNullable(self::A? _) {
abstract extension-type-member representation-field get _() self::A?;
constructor = self::EIAliasNullable|constructor#;
constructor tearoff = self::EIAliasNullable|constructor#_#new#tearOff;
}
static extension-type-member method EINullable|constructor#(core::int? _) → self::EINullable% /* erasure=core::int?, declared=! */ {
lowered final self::EINullable% /* erasure=core::int?, declared=! */ #this = _;
return #this;
}
static extension-type-member method EINullable|constructor#_#new#tearOff(core::int? _) → self::EINullable% /* erasure=core::int?, declared=! */
return self::EINullable|constructor#(_);
static extension-type-member method EIAliasNullable|constructor#(self::A? _) → self::EIAliasNullable% /* erasure=self::A?, declared=! */ {
lowered final self::EIAliasNullable% /* erasure=self::A?, declared=! */ #this = _;
return #this;
}
static extension-type-member method EIAliasNullable|constructor#_#new#tearOff(self::A? _) → self::EIAliasNullable% /* erasure=self::A?, declared=! */
return self::EIAliasNullable|constructor#(_);