| Index: pkg/kernel/lib/transformations/continuation.dart
|
| diff --git a/pkg/kernel/lib/transformations/continuation.dart b/pkg/kernel/lib/transformations/continuation.dart
|
| index 2ba5d0620bbfb81cc7c8ffc56da454bcce1a1f6e..5d958404725dc1fb2a05bf1de41249edb4f5f818 100644
|
| --- a/pkg/kernel/lib/transformations/continuation.dart
|
| +++ b/pkg/kernel/lib/transformations/continuation.dart
|
| @@ -794,6 +794,10 @@ class AsyncFunctionRewriter extends AsyncRewriterBase {
|
| }
|
| }
|
| }
|
| + // In an "Future<FooBar> foo() async {}" function the body can either return
|
| + // a "FooBar" or a "Future<FooBar>" => a "FutureOr<FooBar>".
|
| + returnType =
|
| + new InterfaceType(helper.futureOrClass, <DartType>[returnType]);
|
| var completerTypeArguments = <DartType>[returnType];
|
| var completerType =
|
| new InterfaceType(helper.completerClass, completerTypeArguments);
|
| @@ -871,6 +875,7 @@ class HelperNodes {
|
| final Library coreLibrary;
|
| final Class iteratorClass;
|
| final Class futureClass;
|
| + final Class futureOrClass;
|
| final Class completerClass;
|
| final Procedure printProcedure;
|
| final Procedure completerConstructor;
|
| @@ -888,6 +893,7 @@ class HelperNodes {
|
| this.coreLibrary,
|
| this.iteratorClass,
|
| this.futureClass,
|
| + this.futureOrClass,
|
| this.completerClass,
|
| this.printProcedure,
|
| this.completerConstructor,
|
| @@ -907,6 +913,7 @@ class HelperNodes {
|
| coreTypes.getLibrary('dart:core'),
|
| coreTypes.getClass('dart:core', 'Iterator'),
|
| coreTypes.getClass('dart:async', 'Future'),
|
| + coreTypes.getClass('dart:async', 'FutureOr'),
|
| coreTypes.getClass('dart:async', 'Completer'),
|
| coreTypes.getTopLevelMember('dart:core', 'print'),
|
| coreTypes.getMember('dart:async', 'Completer', 'sync'),
|
|
|