// 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.

// @dart = 2.9

/// @assertion Functions include function declarations, methods, getters,
/// setters, constructors and function literals.
/// All functions have a signature and a body.
/// functionSignature:
///   metadata returnType? identifier formalParameterList
/// ;
/// returnType: void | type
/// ;
/// functionBody:
///   async? '=>' expression ';' | (async | async* | sync*)? block
/// ;
/// block:
///   '{' statements '}'
/// ;
///
/// @description Checks that returnType is optional
///
/// @author msyabro
/// @reviewer kaigorodov
/// @reviewer iefremov

import "../../Utils/expect.dart";

func(int x) => x + x + 1;
proc() {}

class A {
  f() {return () {return 20;};}
  g(int arg) {return arg + arg;}
  h(int arg) => f()() + g(arg);
}

main() {
  f() {}
  g() => 1;

  // now call every function to force the compiler to parse it
  Expect.equals(5, func(2));
  proc();
  Expect.equals(20, new A().f()());
  Expect.equals(10, new A().g(5));
  Expect.equals(22, new A().h(1));
  f();
  Expect.equals(1, g());
}
