// 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 classDefinition:
///   metadata abstract? class identifier typeParameters? (superclass mixins?)? 
/// interfaces? ‘{’ (metadata classMemberDefinition)* ‘}’ |
///   metadata abstract? class mixinApplicationClass
/// ;
/// .  .  .
/// classMemberDefinition:
///   declaration ';' |
///   methodSignature functionBody
/// ;
/// methodSignature:
///   constructorSignature initializers? |
///   factoryConstructorSignature |
///   static? functionSignature |
///   static? getterSignature |
///   static? setterSignature |
///   operatorSignature
/// ;
/// @description Checks that various class member method definitions that are 
/// valid according to this syntax do not cause any errors and such class can 
/// be instantiated. 
/// @author msyabro


abstract class I  {
  factory I() = A;
}

class A implements I {
  A() {}
  A.B() {}
  A.C(): _x = 1 {}

  static f() {}
  get x {}
  set x(var v) {}
  operator ==(dynamic other) => true;

  var _x;
}

class B {
  B(): y = 1 {}
  var y;
}

main() {
  A a = new A.B();
  B b = new B();
  I i = new I();
}
