| // Copyright (c) 2018, 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. |
| |
| // @dart = 2.9 |
| |
| import 'dart:async'; |
| |
| void vv = null; |
| dynamic vd = null; |
| Object vo = null; |
| Null vn = null; |
| int vi = null; |
| Future<void> fvv = null; |
| Future<dynamic> fvd = null; |
| Future<Object> fvo = null; |
| Future<Null> fvn = null; |
| Future<int> fvi = null; |
| FutureOr<void> fovv = null; |
| FutureOr<dynamic> fovd = null; |
| FutureOr<Object> fovo = null; |
| FutureOr<Null> fovn = null; |
| FutureOr<int> fovi = null; |
| |
| /* Test the cases where expression bodied functions are more permissive |
| * than block bodied functions (places where they behave the same |
| * are tested below). |
| |
| An asynchronous expression bodied function with return type `T` and return |
| expression `e` has a valid return if: |
| * `flatten(T)` is `void` |
| * or `return e;` is a valid return for an equivalent block bodied function |
| with return type `T` as defined below. |
| */ |
| |
| void async_int_to_void_e() async => vi; |
| Future<void> async_int_to_Future_void__e() async => vi; |
| FutureOr<void> async_int_to_FutureOr_void__e() async => vi; |
| void async_Object_to_void_e() async => vo; |
| Future<void> async_Object_to_Future_void__e() async => vo; |
| FutureOr<void> async_Object_to_FutureOr_void__e() async => vo; |
| void async_Future_int__to_void_e() async => fvi; |
| Future<void> async_Future_int__to_Future_void__e() async => fvi; |
| FutureOr<void> async_Future_int__to_FutureOr_void__e() async => fvi; |
| void async_FutureOr_int__to_void_e() async => fovi; |
| Future<void> async_FutureOr_int__to_Future_void__e() async => fovi; |
| FutureOr<void> async_FutureOr_int__to_FutureOr_void__e() async => fovi; |
| void async_Future_Object__to_void_e() async => fvo; |
| Future<void> async_Future_Object__to_Future_void__e() async => fvo; |
| FutureOr<void> async_Future_Object__to_FutureOr_void__e() async => fvo; |
| void async_FutureOr_Object__to_void_e() async => fovo; |
| Future<void> async_FutureOr_Object__to_Future_void__e() async => fovo; |
| FutureOr<void> async_FutureOr_Object__to_FutureOr_void__e() async => fovo; |
| |
| /* Test the cases that apply only to block bodied functions |
| */ |
| |
| /* |
| * `return;` is a valid return if any of the following are true: |
| * `flatten(T)` is `void` |
| * `flatten(T)` is `dynamic` |
| * `flatten(T)` is `Null`. |
| */ |
| Future<void> async_empty_to_Future_void_() async { |
| return; |
| } |
| |
| Future<dynamic> async_empty_to_Future_dynamic_() async { |
| return; |
| } |
| |
| Future<Null> async_empty_to_Future_Null_() async { |
| return; |
| } |
| |
| FutureOr<void> async_empty_to_FutureOr_void_() async { |
| return; |
| } |
| |
| FutureOr<dynamic> async_empty_to_FutureOr_dynamic_() async { |
| return; |
| } |
| |
| FutureOr<Null> async_empty_to_FutureOr_Null_() async { |
| return; |
| } |
| |
| void async_empty_to_void() async { |
| return; |
| } |
| |
| dynamic async_empty_to_dynamic() async { |
| return; |
| } |
| |
| /* Test the cases that apply to both expression bodied and block bodied |
| * functions |
| */ |
| |
| /* |
| * `return exp;` where `exp` has static type `S` is a valid return if: |
| * `flatten(S)` is `void` |
| * and `flatten(T)` is `void`, `dynamic` or `Null` |
| */ |
| Future<void> async_void_to_Future_void__e() async => vv; |
| Future<void> async_void_to_Future_void_() async { |
| return vv; |
| } |
| |
| Future<void> async_Future_void__to_Future_void__e() async => fvv; |
| Future<void> async_Future_void__to_Future_void_() async { |
| return fvv; |
| } |
| |
| Future<void> async_FutureOr_void__to_Future_void__e() async => fovv; |
| Future<void> async_FutureOr_void__to_Future_void_() async { |
| return fovv; |
| } |
| |
| Future<dynamic> async_void_to_Future_dynamic__e() async => vv; |
| Future<dynamic> async_void_to_Future_dynamic_() async { |
| return vv; |
| } |
| |
| Future<dynamic> async_Future_void__to_Future_dynamic__e() async => fvv; |
| Future<dynamic> async_Future_void__to_Future_dynamic_() async { |
| return fvv; |
| } |
| |
| Future<dynamic> async_FutureOr_void__to_Future_dynamic__e() async => fovv; |
| Future<dynamic> async_FutureOr_void__to_Future_dynamic_() async { |
| return fovv; |
| } |
| |
| Future<Null> async_void_to_Future_Null__e() async => vv; |
| Future<Null> async_void_to_Future_Null_() async { |
| return vv; |
| } |
| |
| Future<Null> async_Future_void__to_Future_Null__e() async => fvv; |
| Future<Null> async_Future_void__to_Future_Null_() async { |
| return fvv; |
| } |
| |
| Future<Null> async_FutureOr_void__to_Future_Null__e() async => fovv; |
| Future<Null> async_FutureOr_void__to_Future_Null_() async { |
| return fovv; |
| } |
| |
| FutureOr<void> async_void_to_FutureOr_void__e() async => vv; |
| FutureOr<void> async_void_to_FutureOr_void_() async { |
| return vv; |
| } |
| |
| FutureOr<void> async_Future_void__to_FutureOr_void__e() async => fvv; |
| FutureOr<void> async_Future_void__to_FutureOr_void_() async { |
| return fvv; |
| } |
| |
| FutureOr<void> async_FutureOr_void__to_FutureOr_void__e() async => fovv; |
| FutureOr<void> async_FutureOr_void__to_FutureOr_void_() async { |
| return fovv; |
| } |
| |
| FutureOr<dynamic> async_void_to_FutureOr_dynamic__e() async => vv; |
| FutureOr<dynamic> async_void_to_FutureOr_dynamic_() async { |
| return vv; |
| } |
| |
| FutureOr<dynamic> async_Future_void__to_FutureOr_dynamic__e() async => fvv; |
| FutureOr<dynamic> async_Future_void__to_FutureOr_dynamic_() async { |
| return fvv; |
| } |
| |
| FutureOr<dynamic> async_FutureOr_void__to_FutureOr_dynamic__e() async => fovv; |
| FutureOr<dynamic> async_FutureOr_void__to_FutureOr_dynamic_() async { |
| return fovv; |
| } |
| |
| FutureOr<Null> async_void_to_FutureOr_Null__e() async => vv; |
| FutureOr<Null> async_void_to_FutureOr_Null_() async { |
| return vv; |
| } |
| |
| FutureOr<Null> async_Future_void__to_FutureOr_Null__e() async => fvv; |
| FutureOr<Null> async_Future_void__to_FutureOr_Null_() async { |
| return fvv; |
| } |
| |
| FutureOr<Null> async_FutureOr_void__to_FutureOr_Null__e() async => fovv; |
| FutureOr<Null> async_FutureOr_void__to_FutureOr_Null_() async { |
| return fovv; |
| } |
| |
| void async_void_to_void_e() async => vv; |
| void async_void_to_void() async { |
| return vv; |
| } |
| |
| void async_Future_void__to_void_e() async => fvv; |
| void async_Future_void__to_void() async { |
| return fvv; |
| } |
| |
| void async_FutureOr_void__to_void_e() async => fovv; |
| void async_FutureOr_void__to_void() async { |
| return fovv; |
| } |
| |
| dynamic async_void_to_dynamic_e() async => vv; |
| dynamic async_void_to_dynamic() async { |
| return vv; |
| } |
| |
| dynamic async_Future_void__to_dynamic_e() async => fvv; |
| dynamic async_Future_void__to_dynamic() async { |
| return fvv; |
| } |
| |
| dynamic async_FutureOr_void__to_dynamic_e() async => fovv; |
| dynamic async_FutureOr_void__to_dynamic() async { |
| return fovv; |
| } |
| |
| /* |
| * `return exp;` where `exp` has static type `S` is a valid return if: |
| * `flatten(T)` is `void` |
| * and `flatten(S)` is `void`, `dynamic` or `Null` |
| */ |
| void async_Future_dynamic__to_void_e() async => fvd; |
| void async_Future_dynamic__to_void() async { |
| return fvd; |
| } |
| |
| Future<void> async_Future_dynamic__to_Future_void__e() async => fvd; |
| Future<void> async_Future_dynamic__to_Future_void_() async { |
| return fvd; |
| } |
| |
| FutureOr<void> async_Future_dynamic__to_FutureOr_void__e() async => fvd; |
| FutureOr<void> async_Future_dynamic__to_FutureOr_void_() async { |
| return fvd; |
| } |
| |
| void async_Future_Null__to_void_e() async => fvn; |
| void async_Future_Null__to_void() async { |
| return fvn; |
| } |
| |
| Future<void> async_Future_Null__to_Future_void__e() async => fvn; |
| Future<void> async_Future_Null__to_Future_void_() async { |
| return fvn; |
| } |
| |
| FutureOr<void> async_Future_Null__to_FutureOr_void__e() async => fvn; |
| FutureOr<void> async_Future_Null__to_FutureOr_void_() async { |
| return fvn; |
| } |
| |
| void async_FutureOr_dynamic__to_void_e() async => fovd; |
| void async_FutureOr_dynamic__to_void() async { |
| return fovd; |
| } |
| |
| Future<void> async_FutureOr_dynamic__to_Future_void__e() async => fovd; |
| Future<void> async_FutureOr_dynamic__to_Future_void_() async { |
| return fovd; |
| } |
| |
| FutureOr<void> async_FutureOr_dynamic__to_FutureOr_void__e() async => fovd; |
| FutureOr<void> async_FutureOr_dynamic__to_FutureOr_void_() async { |
| return fovd; |
| } |
| |
| void async_FutureOr_Null__to_void_e() async => fovn; |
| void async_FutureOr_Null__to_void() async { |
| return fovn; |
| } |
| |
| Future<void> async_FutureOr_Null__to_Future_void__e() async => fovn; |
| Future<void> async_FutureOr_Null__to_Future_void_() async { |
| return fovn; |
| } |
| |
| FutureOr<void> async_FutureOr_Null__to_FutureOr_void__e() async => fovn; |
| FutureOr<void> async_FutureOr_Null__to_FutureOr_void_() async { |
| return fovn; |
| } |
| |
| void async_dynamic_to_void_e() async => vd; |
| void async_dynamic_to_void() async { |
| return vd; |
| } |
| |
| Future<void> async_dynamic_to_Future_void__e() async => vd; |
| Future<void> async_dynamic_to_Future_void_() async { |
| return vd; |
| } |
| |
| FutureOr<void> async_dynamic_to_FutureOr_void__e() async => vd; |
| FutureOr<void> async_dynamic_to_FutureOr_void_() async { |
| return vd; |
| } |
| |
| void async_Null_to_void_e() async => vn; |
| void async_Null_to_void() async { |
| return vn; |
| } |
| |
| Future<void> async_Null_to_Future_void__e() async => vn; |
| Future<void> async_Null_to_Future_void_() async { |
| return vn; |
| } |
| |
| FutureOr<void> async_Null_to_FutureOr_void__e() async => vn; |
| FutureOr<void> async_Null_to_FutureOr_void_() async { |
| return vn; |
| } |
| |
| /* |
| * `return exp;` where `exp` has static type `S` is a valid return if: |
| * `T` is not `void` |
| * and `flatten(S)` is not `void` |
| * and `Future<flatten(S)>` is assignable to `T` |
| */ |
| Future<int> async_int_to_Future_int__e() async => vi; |
| Future<int> async_int_to_Future_int_() async { |
| return vi; |
| } |
| |
| Future<int> async_Object_to_Future_int__e() async => vo; |
| Future<int> async_Object_to_Future_int_() async { |
| return vo; |
| } |
| |
| Future<int> async_FutureOr_int__to_Future_int__e() async => fovi; |
| Future<int> async_FutureOr_int__to_Future_int_() async { |
| return fovi; |
| } |
| |
| Future<int> async_Future_int__to_Future_int__e() async => fvi; |
| Future<int> async_Future_int__to_Future_int_() async { |
| return fvi; |
| } |
| |
| Future<void> async_int_to_Future_void_() async { |
| return vi; |
| } |
| |
| Future<void> async_Object_to_Future_void_() async { |
| return vo; |
| } |
| |
| Future<void> async_FutureOr_int__to_Future_void_() async { |
| return fovi; |
| } |
| |
| Future<void> async_Future_int__to_Future_void_() async { |
| return fvi; |
| } |
| |
| FutureOr<void> async_int_to_FutureOr_void_() async { |
| return vi; |
| } |
| |
| FutureOr<void> async_Object_to_FutureOr_void_() async { |
| return vo; |
| } |
| |
| FutureOr<void> async_FutureOr_int__to_FutureOr_void_() async { |
| return fovi; |
| } |
| |
| FutureOr<void> async_Future_int__to_FutureOr_void_() async { |
| return fvi; |
| } |
| |
| void main() { |
| async_int_to_void_e(); |
| async_int_to_Future_void__e(); |
| async_int_to_FutureOr_void__e(); |
| async_Object_to_void_e(); |
| async_Object_to_Future_void__e(); |
| async_Object_to_FutureOr_void__e(); |
| async_Future_int__to_void_e(); |
| async_Future_int__to_Future_void__e(); |
| async_Future_int__to_FutureOr_void__e(); |
| async_FutureOr_int__to_void_e(); |
| async_FutureOr_int__to_Future_void__e(); |
| async_FutureOr_int__to_FutureOr_void__e(); |
| async_Future_Object__to_void_e(); |
| async_Future_Object__to_Future_void__e(); |
| async_Future_Object__to_FutureOr_void__e(); |
| async_FutureOr_Object__to_void_e(); |
| async_FutureOr_Object__to_Future_void__e(); |
| async_FutureOr_Object__to_FutureOr_void__e(); |
| async_empty_to_Future_void_(); |
| async_empty_to_Future_dynamic_(); |
| async_empty_to_Future_Null_(); |
| async_empty_to_FutureOr_void_(); |
| async_empty_to_FutureOr_dynamic_(); |
| async_empty_to_FutureOr_Null_(); |
| async_empty_to_void(); |
| async_empty_to_dynamic(); |
| async_void_to_Future_void__e(); |
| async_void_to_Future_void_(); |
| async_Future_void__to_Future_void__e(); |
| async_Future_void__to_Future_void_(); |
| async_FutureOr_void__to_Future_void__e(); |
| async_FutureOr_void__to_Future_void_(); |
| async_void_to_Future_dynamic__e(); |
| async_void_to_Future_dynamic_(); |
| async_Future_void__to_Future_dynamic__e(); |
| async_Future_void__to_Future_dynamic_(); |
| async_FutureOr_void__to_Future_dynamic__e(); |
| async_FutureOr_void__to_Future_dynamic_(); |
| async_void_to_Future_Null__e(); |
| async_void_to_Future_Null_(); |
| async_Future_void__to_Future_Null__e(); |
| async_Future_void__to_Future_Null_(); |
| async_FutureOr_void__to_Future_Null__e(); |
| async_FutureOr_void__to_Future_Null_(); |
| async_void_to_FutureOr_void__e(); |
| async_void_to_FutureOr_void_(); |
| async_Future_void__to_FutureOr_void__e(); |
| async_Future_void__to_FutureOr_void_(); |
| async_FutureOr_void__to_FutureOr_void__e(); |
| async_FutureOr_void__to_FutureOr_void_(); |
| async_void_to_FutureOr_dynamic__e(); |
| async_void_to_FutureOr_dynamic_(); |
| async_Future_void__to_FutureOr_dynamic__e(); |
| async_Future_void__to_FutureOr_dynamic_(); |
| async_FutureOr_void__to_FutureOr_dynamic__e(); |
| async_FutureOr_void__to_FutureOr_dynamic_(); |
| async_void_to_FutureOr_Null__e(); |
| async_void_to_FutureOr_Null_(); |
| async_Future_void__to_FutureOr_Null__e(); |
| async_Future_void__to_FutureOr_Null_(); |
| async_FutureOr_void__to_FutureOr_Null__e(); |
| async_FutureOr_void__to_FutureOr_Null_(); |
| async_void_to_void_e(); |
| async_void_to_void(); |
| async_Future_void__to_void_e(); |
| async_Future_void__to_void(); |
| async_FutureOr_void__to_void_e(); |
| async_FutureOr_void__to_void(); |
| async_void_to_dynamic_e(); |
| async_void_to_dynamic(); |
| async_Future_void__to_dynamic_e(); |
| async_Future_void__to_dynamic(); |
| async_FutureOr_void__to_dynamic_e(); |
| async_FutureOr_void__to_dynamic(); |
| async_Future_dynamic__to_void_e(); |
| async_Future_dynamic__to_void(); |
| async_Future_dynamic__to_Future_void__e(); |
| async_Future_dynamic__to_Future_void_(); |
| async_Future_dynamic__to_FutureOr_void__e(); |
| async_Future_dynamic__to_FutureOr_void_(); |
| async_Future_Null__to_void_e(); |
| async_Future_Null__to_void(); |
| async_Future_Null__to_Future_void__e(); |
| async_Future_Null__to_Future_void_(); |
| async_Future_Null__to_FutureOr_void__e(); |
| async_Future_Null__to_FutureOr_void_(); |
| async_FutureOr_dynamic__to_void_e(); |
| async_FutureOr_dynamic__to_void(); |
| async_FutureOr_dynamic__to_Future_void__e(); |
| async_FutureOr_dynamic__to_Future_void_(); |
| async_FutureOr_dynamic__to_FutureOr_void__e(); |
| async_FutureOr_dynamic__to_FutureOr_void_(); |
| async_FutureOr_Null__to_void_e(); |
| async_FutureOr_Null__to_void(); |
| async_FutureOr_Null__to_Future_void__e(); |
| async_FutureOr_Null__to_Future_void_(); |
| async_FutureOr_Null__to_FutureOr_void__e(); |
| async_FutureOr_Null__to_FutureOr_void_(); |
| async_dynamic_to_void_e(); |
| async_dynamic_to_void(); |
| async_dynamic_to_Future_void__e(); |
| async_dynamic_to_Future_void_(); |
| async_dynamic_to_FutureOr_void__e(); |
| async_dynamic_to_FutureOr_void_(); |
| async_Null_to_void_e(); |
| async_Null_to_void(); |
| async_Null_to_Future_void__e(); |
| async_Null_to_Future_void_(); |
| async_Null_to_FutureOr_void__e(); |
| async_Null_to_FutureOr_void_(); |
| async_int_to_Future_int__e(); |
| async_int_to_Future_int_(); |
| async_Object_to_Future_int__e(); |
| async_Object_to_Future_int_(); |
| async_FutureOr_int__to_Future_int__e(); |
| async_FutureOr_int__to_Future_int_(); |
| async_Future_int__to_Future_int__e(); |
| async_Future_int__to_Future_int_(); |
| async_int_to_Future_void__e(); |
| async_int_to_Future_void_(); |
| async_Object_to_Future_void__e(); |
| async_Object_to_Future_void_(); |
| async_FutureOr_int__to_Future_void__e(); |
| async_FutureOr_int__to_Future_void_(); |
| async_Future_int__to_Future_void__e(); |
| async_Future_int__to_Future_void_(); |
| async_int_to_FutureOr_void__e(); |
| async_int_to_FutureOr_void_(); |
| async_Object_to_FutureOr_void__e(); |
| async_Object_to_FutureOr_void_(); |
| async_FutureOr_int__to_FutureOr_void__e(); |
| async_FutureOr_int__to_FutureOr_void_(); |
| async_Future_int__to_FutureOr_void__e(); |
| async_Future_int__to_FutureOr_void_(); |
| } |