// 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 function declaration statement declares a new local function.
///   localFunctionDeclaration:
///     functionSignature functionBody
///   ;
/// functionSignature:
///   metadata returnType? identifier formalParameterList
/// ;
/// returnType:
///   void |
///   type
/// ;
/// functionBody:
///   async? ‘=>’ expression ‘;’ |
///   (async | async* | sync*)?  block
/// ;
/// block:
///   '{' statements '}'
/// ;
/// @description Checks that various correct function definitions are accepted.
/// @author kaigorodov


main() {
  void func() {}
  void f(void func()) { f(func); }
  ff(void fp()) => f(fp);

  int? funktion(args) { f(func); func(); }

  int f2(int x) { throw ''; }
  func1(var x) {}
  int func2(var x, [var y = 0]) { return x + y; }
  int func3(var x, {var y: 1}) { return x * y; }
  Object? obj() => null;

  fgh(g(h())) {}
  int func4([int x = 0, int y = 0, int z = 0]) {
    return func2(x, y) + func3(y, y: z);
  }
  int foo(Object x, var y) => func4(1, 2, 3);
}

