// 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.

// @dart = 2.9

// The identifiers listed below are mentioned in the grammar, but none of
// them is a reserved word or a built-in identifier. Such an identifier can
// be used just like all other identifiers, with a few exceptions. Here are
// said 'known' identifiers:
//
//   `async`, `await`, `hide`, `of`, `on`, `show`, `sync`, `yield`
//
// This test contains various declarations of entities whose name is one of
// these known identifiers.

// Top level.

var async; //# 01: ok
var await; //# 01: continued
var hide; //# 01: continued
var of; //# 01: continued
var on; //# 01: continued
var show; //# 01: continued
var sync; //# 01: continued
var yield; //# 01: continued

int async; //# 02: ok
int await; //# 02: continued
int hide; //# 02: continued
int of; //# 02: continued
int on; //# 02: continued
int show; //# 02: continued
int sync; //# 02: continued
int yield; //# 02: continued

final String async = ""; //# 03: ok
final String await = ""; //# 03: continued
final String hide = ""; //# 03: continued
final String of = ""; //# 03: continued
final String on = ""; //# 03: continued
final String show = ""; //# 03: continued
final String sync = ""; //# 03: continued
final String yield = ""; //# 03: continued

const async = null; //# 04: ok
const await = null; //# 04: continued
const hide = null; //# 04: continued
const of = null; //# 04: continued
const on = null; //# 04: continued
const show = null; //# 04: continued
const sync = null; //# 04: continued
const yield = null; //# 04: continued

void async() {} //# 05: ok
void await() {} //# 05: continued
void hide() {} //# 05: continued
void of() {} //# 05: continued
void on() {} //# 05: continued
void show() {} //# 05: continued
void sync() {} //# 05: continued
void yield() {} //# 05: continued

void f1(async, await, hide, of, on, show, sync, yield) {}
void f2([async, await, hide, of, on, show, sync, yield]) {}
void f3({async, await, hide, of, on, show, sync, yield}) {}

void f4(
  int async,
  int await,
  int hide,
  int of,
  int on,
  int show,
  int sync,
  int yield,
) {}

void f5([
  int async,
  int await,
  int hide,
  int of,
  int on,
  int show,
  int sync,
  int yield,
]) {}

void f6({
  int async,
  int await,
  int hide,
  int of,
  int on,
  int show,
  int sync,
  int yield,
}) {}

class A {
  var async; //# 01: continued
  var await; //# 01: continued
  var hide; //# 01: continued
  var of; //# 01: continued
  var on; //# 01: continued
  var show; //# 01: continued
  var sync; //# 01: continued
  var yield; //# 01: continued

  num async; //# 02: continued
  num await; //# 02: continued
  num hide; //# 02: continued
  num of; //# 02: continued
  num on; //# 02: continued
  num show; //# 02: continued
  num sync; //# 02: continued
  num yield; //# 02: continued

  final String async = ""; //# 03: continued
  final String await = ""; //# 03: continued
  final String hide = ""; //# 03: continued
  final String of = ""; //# 03: continued
  final String on = ""; //# 03: continued
  final String show = ""; //# 03: continued
  final String sync = ""; //# 03: continued
  final String yield = ""; //# 03: continued

  String get async => ""; //# 04: continued
  String get await => ""; //# 04: continued
  String get hide => ""; //# 04: continued
  String get of => ""; //# 04: continued
  String get on => ""; //# 04: continued
  String get show => ""; //# 04: continued
  String get sync => ""; //# 04: continued
  String get yield => ""; //# 04: continued

  void async() {} //# 05: ok
  void await() {} //# 05: continued
  void hide() {} //# 05: continued
  void of() {} //# 05: continued
  void on() {} //# 05: continued
  void show() {} //# 05: continued
  void sync() {} //# 05: continued
  void yield() {} //# 05: continued

  A();

  A.c1( //# 01: continued
    this.async, //# 01: continued
    this.await, //# 01: continued
    this.hide, //# 01: continued
    this.of, //# 01: continued
    this.on, //# 01: continued
    this.show, //# 01: continued
    this.sync, //# 01: continued
    this.yield, //# 01: continued
  ) {} //# 01: continued

  A.c2([ //# 01: continued
    this.async, //# 01: continued
    this.await, //# 01: continued
    this.hide, //# 01: continued
    this.of, //# 01: continued
    this.on, //# 01: continued
    this.show, //# 01: continued
    this.sync, //# 01: continued
    this.yield, //# 01: continued
  ]) {} //# 01: continued

  A.c3({ //# 01: continued
    this.async, //# 01: continued
    this.await, //# 01: continued
    this.hide, //# 01: continued
    this.of, //# 01: continued
    this.on, //# 01: continued
    this.show, //# 01: continued
    this.sync, //# 01: continued
    this.yield, //# 01: continued
  }) {} //# 01: continued

  A.c4( //# 02: continued
    int this.async, //# 02: continued
    int this.await, //# 02: continued
    int this.hide, //# 02: continued
    int this.of, //# 02: continued
    int this.on, //# 02: continued
    int this.show, //# 02: continued
    int this.sync, //# 02: continued
    int this.yield, //# 02: continued
  ) {} //# 02: continued

  A.c5([ //# 02: continued
    int this.async, //# 02: continued
    int this.await, //# 02: continued
    int this.hide, //# 02: continued
    int this.of, //# 02: continued
    int this.on, //# 02: continued
    int this.show, //# 02: continued
    int this.sync, //# 02: continued
    int this.yield, //# 02: continued
  ]) {} //# 02: continued

  A.c6({ //# 02: continued
    int this.async, //# 02: continued
    int this.await, //# 02: continued
    int this.hide, //# 02: continued
    int this.of, //# 02: continued
    int this.on, //# 02: continued
    int this.show, //# 02: continued
    int this.sync, //# 02: continued
    int this.yield, //# 02: continued
  }) {} //# 02: continued

  void method1(
    covariant int async,
    covariant int await,
    covariant int hide,
    covariant int of,
    covariant int on,
    covariant int show,
    covariant int sync,
    covariant int yield,
  ) {}

  void method2([
    covariant int async,
    covariant int await,
    covariant int hide,
    covariant int of,
    covariant int on,
    covariant int show,
    covariant int sync,
    covariant int yield,
  ]) {}

  void method3({
    covariant int async,
    covariant int await,
    covariant int hide,
    covariant int of,
    covariant int on,
    covariant int show,
    covariant int sync,
    covariant int yield,
  }) {}
}

class B {
  static var async; //# 01: continued
  static var await; //# 01: continued
  static var hide; //# 01: continued
  static var of; //# 01: continued
  static var on; //# 01: continued
  static var show; //# 01: continued
  static var sync; //# 01: continued
  static var yield; //# 01: continued

  static num async; //# 02: continued
  static num await; //# 02: continued
  static num hide; //# 02: continued
  static num of; //# 02: continued
  static num on; //# 02: continued
  static num show; //# 02: continued
  static num sync; //# 02: continued
  static num yield; //# 02: continued

  static final String async = ""; //# 03: continued
  static final String await = ""; //# 03: continued
  static final String hide = ""; //# 03: continued
  static final String of = ""; //# 03: continued
  static final String on = ""; //# 03: continued
  static final String show = ""; //# 03: continued
  static final String sync = ""; //# 03: continued
  static final String yield = ""; //# 03: continued

  static const async = null; //# 04: continued
  static const await = null; //# 04: continued
  static const hide = null; //# 04: continued
  static const of = null; //# 04: continued
  static const on = null; //# 04: continued
  static const show = null; //# 04: continued
  static const sync = null; //# 04: continued
  static const yield = null; //# 04: continued

  static get async => null; //# 05: continued
  static get await => null; //# 05: continued
  static get hide => null; //# 05: continued
  static get of => null; //# 05: continued
  static get on => null; //# 05: continued
  static get show => null; //# 05: continued
  static get sync => null; //# 05: continued
  static get yield => null; //# 05: continued
}

main() {
  /* //# none: ok

  // Except none: Use a top-level declaration.
  var top_async = async;
  var top_await = await;
  var top_hide = hide;
  var top_of = of;
  var top_on = on;
  var top_show = show;
  var top_sync = sync;
  var top_yield = yield;

  // Except none: Use an instance member of A.
  A a = new A();
  var instance_async = a.async;
  var instance_await = a.await;
  var instance_hide = a.hide;
  var instance_of = a.of;
  var instance_on = a.on;
  var instance_show = a.show;
  var instance_sync = a.sync;
  var instance_yield = a.yield;

  // Except none: Use a static member of B.

  var static_async = B.async;
  var static_await = B.await;
  var static_hide = B.hide;
  var static_of = B.of;
  var static_on = B.on;
  var static_show = B.show;
  var static_sync = B.sync;
  var static_yield = B.yield;

  */ //# none: continued

  var a1 = new A.c1(1, 1, 1, 1, 1, 1, 1, 1); //# 01: continued
  var a2 = new A.c2(); //# 01: continued
  var a3 = new A.c3( //# 01: continued
    async: 1, //# 01: continued
    await: 1, //# 01: continued
    hide: 1, //# 01: continued
    of: 1, //# 01: continued
    on: 1, //# 01: continued
    show: 1, //# 01: continued
    sync: 1, //# 01: continued
    yield: 1, //# 01: continued
  ); //# 01: continued

  var a4 = new A.c4(1, 1, 1, 1, 1, 1, 1, 1); //# 02: continued
  var a5 = new A.c5(); //# 02: continued
  var a6 = new A.c6( //# 02: continued
    async: 1, //# 02: continued
    await: 1, //# 02: continued
    hide: 1, //# 02: continued
    of: 1, //# 02: continued
    on: 1, //# 02: continued
    show: 1, //# 02: continued
    sync: 1, //# 02: continued
    yield: 1, //# 02: continued
  ); //# 02: continued

  var aa = new A();
  aa.method1(1, 1, 1, 1, 1, 1, 1, 1);
  aa.method2();
  aa.method3(
    async: 1,
    await: 1,
    hide: 1,
    of: 1,
    on: 1,
    show: 1,
    sync: 1,
    yield: 1,
  );
}
