// 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.
// VMOptions=--checked
//
// Dart test program for testing optional named parameters in type tests.

main() {
  Function anyFunction;
  void acceptFunNumOptBool(void funNumOptBool(num n, {bool b})) { };
  void funNum(num n) { };
  void funNumBool(num n, bool b) { };
  void funNumOptBool(num n, {bool b: true}) { };
  void funNumOptBoolX(num n, {bool x: true}) { };
  anyFunction = funNum;
  anyFunction = funNumBool;
  anyFunction = funNumOptBool;
  anyFunction = funNumOptBoolX;
  acceptFunNumOptBool(funNumOptBool);
  acceptFunNumOptBool(funNum);  /// 01: runtime error
  acceptFunNumOptBool(funNumBool);  /// 02: static type warning, runtime error
  acceptFunNumOptBool(funNumOptBoolX);  /// 03: static type warning, runtime error
}
