// $G $D/$F.go && $L $F.$A && ./$A.out

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

func caller(f func(int, int) int, a, b int, c chan int) {
	c <- f(a,b)
}
	
func gocall(f func(int, int) int, a, b int) int {
	c := make(chan int);
	go caller(f, a, b, c);
	return <-c;
}

func call(f func(int, int) int, a, b int) int {
	return f(a, b)
}

func call1(f func(int, int) int, a, b int) int {
	return call(f, a, b)
}

var f func(int, int) int

func add(x, y int) int {
	return x + y
}

func fn() (func(int, int) int) {
	return f
}

var fc func(int, int, chan int)

func addc(x, y int, c chan int) {
	c <- x+y
}

func fnc() (func(int, int, chan int)) {
	return fc
}

func three(x int) {
	if x != 3 {
		panic("wrong val", x)
	}
}

var notmain func()

func emptyresults() () {}
func noresults() {}

var nothing func()

func main() {
	three(call(add, 1, 2));
	three(call1(add, 1, 2));
	f = add;
	three(call(f, 1, 2));
	three(call1(f, 1, 2));
	three(call(fn(), 1, 2));
	three(call1(fn(), 1, 2));
	three(call(func(a,b int) int {return a+b}, 1, 2));
	three(call1(func(a,b int) int {return a+b}, 1, 2));

	fc = addc;
	c := make(chan int);
	go addc(1, 2, c);
	three(<-c);
	go fc(1, 2, c);
	three(<-c);
	go fnc()(1, 2, c);
	three(<-c);
	go func(a, b int, c chan int){c <- a+b}(1, 2, c);
	three(<-c);

	emptyresults();
	noresults();
	nothing = emptyresults;
	nothing();
	nothing = noresults;
	nothing();
}

