// Copyright (c) 2014, 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';

import 'package:expect/expect.dart';

get await => 4;

// For functions that are declared with the async modifier we treat await as
// keyword.

test0() async {
  var x = await 7;
  Expect.equals(7, x);
  var await = 1;
  //  ^^^^^
  // [analyzer] SYNTACTIC_ERROR.ASYNC_KEYWORD_USED_AS_IDENTIFIER
  // [cfe] 'await' can't be used as an identifier in 'async', 'async*', or 'sync*' methods.
}

test1() async {
  var x = await 9;
  Expect.equals(9, x);
  var y = await;
  //           ^
  // [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
  // [cfe] Expected an identifier, but got ';'.
}

// For functions that are not declared with the async modifier we allow await to
// be used as an identifier.

test2() {
  var y = await;
  Expect.equals(4, y);
  var x = await 1;
  //      ^^^^^
  // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
  // [cfe] Expected ';' after this.
}

test3() {
  var await = 3;
  Expect.equals(3, await);
  var x = await 1;
  //      ^^^^^
  // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
  // [cfe] Expected ';' after this.
}

main() {
  test0();
  test1();
  test2();
  test3();
}
