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

var c = make(chan int);

func check(a []int) {
	for i := 0; i < len(a); i++ {
		n := <-c;
		if n != a[i] {
			panicln("want", a[i], "got", n, "at", i);
		}
	}
}

func f() {
	var i, j int;

	i = 1;
	j = 2;
	f := func() {
		c <- i;
		i = 4;
		g := func() {
			c <- i;
			c <- j;
		};
		g();
		c <- i;
	};
	j = 5;
	f();
}

// Accumulator generator
func accum(n int) (func(int) int) {
	return func(i int) int {
		n += i;
		return n;
	}
}

func g(a, b func(int) int) {
	c <- a(2);
	c <- b(3);
	c <- a(4);
	c <- b(5);
}

func h() {
	var x8 byte = 100;
	var x64 int64 = 200;

	c <- int(x8);
	c <- int(x64);
	f := func(z int) {
		g := func() {
			c <- int(x8);
			c <- int(x64);
			c <- z;
		};
		g();
		c <- int(x8);
		c <- int(x64);
		c <- int(z);
	};
	x8 = 101;
	x64 = 201;
	f(500);
}


func main() {
	go f();
	check([]int{1,4,5,4});

	a := accum(0);
	b := accum(1);
	go g(a, b);
	check([]int{2,4,6,9});

	go h();
	check([]int{100,200,101,201,500,101,201,500});
}
