// 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 A constructor name always begins with the name of its immediately
/// enclosing class, and may optionally be followed by a dot and an identifier
/// id. It is a compile-time error if the name of a constructor is not a
/// constructor name.
/// A constructor declaration may conflict with static member declarations
/// (10.11).
/// Let C be a class. It is a compile-time error if C declares a
///  • constructor named C.n and a static member with basename n.
///
/// @description Checks that it is not a compile-error when a constructor's id
/// is the name of an instance field in the same class.
/// @author kaigorodov


class C {
  var foo;
  C.foo();
}

main() {
  new C.foo();
}
