// $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 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);
}

