// Copyright (c) 2017, 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.

import 'dart:async';

/*element: main:[null]*/
main() {
  awaitOfFuture();
  awaitOfInt();
  awaitForOfStream();
}

////////////////////////////////////////////////////////////////////////////////
// Await of Future.value.
////////////////////////////////////////////////////////////////////////////////

/*element: _method1:[null]*/
_method1(

    /*strong.[null|subclass=JSInt]*/
    o) {}

/*element: awaitOfFuture:[exact=_Future]*/
awaitOfFuture() async {
  var future = new Future.value(0);
  var local = await future;
  _method1(local);
}

////////////////////////////////////////////////////////////////////////////////
// Await of int.
////////////////////////////////////////////////////////////////////////////////

/*element: _method2:[null]*/
_method2(

    /*strong.[null|subclass=JSInt]*/
    o) {}

/*element: awaitOfInt:[exact=_Future]*/
awaitOfInt() async {
  var local = await 0;
  _method2(local);
}

////////////////////////////////////////////////////////////////////////////////
// Await for of Stream.fromIterable.
////////////////////////////////////////////////////////////////////////////////

/*element: _method3:[null]*/
_method3(
    /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/ o) {}

/*element: _method4:[null]*/
_method4(

    /*strong.[null|subclass=JSInt]*/
    o) {}

/*element: awaitForOfStream:[exact=_Future]*/
awaitForOfStream() async {
  var list = [0];
  _method3(list);
  var stream = new Stream.fromIterable(list);
  /*current: [exact=_StreamIterator]*/
  /*moveNext: [exact=_StreamIterator]*/
  await for (var local in stream) {
    _method4(local);
  }
}
