// 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 The static type of e is determined as follows:
 * • If d is a class, type alias or type parameter the static type of e is Type.
 * • If d is a local variable or formal parameter the static type of e is the
 *   type of the variable id, unless id is known to have some type T, in which
 *   case the static type of e is T, provided that T is more specic than any
 *   other type S such that v is known to have type S.
 * • If d is a static method, top-level function or local function the static
 *   type of e the function type defined by d.
 * • If d is the declaration of a static variable, static getter or static
 *   setter declared in class C, the static type of e the static type of the
 *   getter invocation C.id.
 * • If d is the declaration of a library variable, top-level getter or
 *   top-level setter, the static type of e is the static type of the top level
 *   getter invocation id.
 * • Otherwise, if e occurs inside a top level or static function (be it
 *   function, method, getter, or setter) or variable initializer, the static
 *   type of e is dynamic.
 * • Otherwise, the static type of e is the type of the property extraction
 *   this.id.
 * @description Checks that if d is the declaration of a static variable or
 * static getter declared in class C, the static type of e the static type of
 * the getter invocation C.id.
 * @static-clean
 * @author ilya
 */

class C {
  static int x = 0;
  static int get y => 1;

  static test () {
    int i;
    i = x;
    i = y;
  }
}

main() {
  C.test();
}
