// 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 new expression invokes a constructor.
/// newExpression:
///   new type ('.' identifier)? arguments
/// ;
/// @description Checks that various valid new expressions don't
/// produce compile-time errors.
/// @author msyabro


class A {
  A() {}
  A.anotherConstructor(p1, p2) {}
}

class B {
  B(p1) {}
  B.b({p1, p2}) {}
}

class C {
  C.$_$(p1, p2, [p3 = 1]) {}
}

class D {
  const D();
}

main() {
  new A();
  new A.anotherConstructor(1, 2);

  new B(new A());
  new B.b(p2: "", p1: null);

  new C.$_$(new A() == new B(1), ()=>1);

  new D();
}
