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

/**
 * @assertion An identifier expression consists of a single identifier; it
 * provides access to an object via an unqualified name.
 * BUILT_IN_IDENTIFIER:
 *   abstract |
 *   as |
 *   deferred |
 *   dynamic |
 *   export |
 *   external |
 *   factory |
 *   get |
 *   implements |
 *   import |
 *   library |
 *   operator |
 *   part |
 *   set |
 *   static |
 *   typedef
 * ;
 * @description Checks that built-in identifiers can be used to name variables.
 * @author msyabro
 * @reviewer kaigorodov
 */

class A {
  static int? static;
}

main() {
  var abstract;
  abstract;
  var as;
  as;
  var deferred;
  deferred;
  var dynamic;
  dynamic;
  String? export;
  export;
  var external;
  external;
  var factory;
  factory;
  int? get;
  get;
  String? implements;
  implements;
  int? import;
  import;
  double? library;
  library;
  int? operator;
  operator;
  double? part;
  part;
  var set;
  set;
  int? static;
  static;
  Function? typedef;
  typedef;
  A.static;
}
