Files
sdk/pkg/front_end/testcases/nnbd/issue42429.dart
T
Dmitry Stefantsov cf8887bd7e [cfe] Update the conversion algorithm for checking super-bounded types
The update is specified in the following:
https://github.com/dart-lang/language/pull/1133

Change-Id: I2850b1acf7c94b8174c21cf899c9b926a03d9cc8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175726
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
2021-01-08 11:58:32 +00:00

67 lines
2.3 KiB
Dart

// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
class A<T extends num> {}
typedef FArgument<X extends num> = Function(X);
typedef FReturn<X extends num> = X Function();
typedef FBoth<X extends num> = X Function(X);
typedef FNowhere<X extends num> = Function();
foo() {
A<Object> aObject; // Error.
A<num?> aNumNullable; // Error.
A<int?> aIntNullable; // Error.
A<Null> aNull; // Error.
FArgument<Object> fArgumentObject; // Error.
FArgument<num?> fArgumentNumNullable; // Error.
FArgument<int?> fArgumentIntNullable; // Error.
FArgument<Null> fArgumentNull; // Error.
FReturn<Object> fReturnObject; // Error.
FReturn<num?> fReturnNumNullable; // Error.
FReturn<int?> fReturnIntNullable; // Error.
FReturn<Null> fReturnNull; // Error.
FBoth<Object> fBothObject; // Error.
FBoth<num?> fBothNumNullable; // Error.
FBoth<int?> fBothIntNullable; // Error.
FBoth<Null> fBothNull; // Error.
FNowhere<Object> fNowhereObject; // Error.
FNowhere<num?> fNowhereNumNullable; // Error.
FNowhere<int?> fNowhereIntNullable; // Error.
FNowhere<Null> fNowhereNull; // Error.
FArgument<Object?> fArgumentObjectNullable; // Error.
FArgument<dynamic> fArgumentDynamic; // Error.
FArgument<void> fArgumentVoid; // Error.
A<Object?> aObjectNullable; // Ok.
A<dynamic> aDynamic; // Ok.
A<void> aVoid; // Ok.
A<num> aNum; // Ok.
A<int> aInt; // Ok.
A<Never> aNever; // Ok.
FArgument<num> fArgumentNum; // Ok.
FArgument<int> fArgumentInt; // Ok.
FArgument<Never> fArgumentNever; // Ok.
FReturn<Object?> fReturnObjectNullable; // Ok.
FReturn<dynamic> fReturnDynamic; // Ok.
FReturn<void> fReturnVoid; // Ok.
FReturn<num> fReturnNum; // Ok.
FReturn<int> fReturnInt; // Ok.
FReturn<Never> fReturnNever; // Ok.
FBoth<Object?> fBothObjectNullable; // Ok.
FBoth<dynamic> fBothDynamic; // Ok.
FBoth<void> fBothVoid; // Ok.
FBoth<num> fBothNum; // Ok.
FBoth<int> fBothInt; // Ok.
FBoth<Never> fBothNever; // Ok.
FNowhere<Object?> fNowhereObjectNullable; // Ok.
FNowhere<dynamic> fNowhereDynamic; // Ok.
FNowhere<void> fNowhereVoid; // Ok.
FNowhere<num> fNowhereNum; // Ok.
FNowhere<int> fNowhereInt; // Ok.
FNowhere<Never> fNowhereNever; // Ok.
}
main() {}