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

type C struct {
	a	int;
	x	func(p *C)int;
}

func (this *C) f()int {
	return this.a;
}

func
main() {
	var v int;
	var c *C;

	c = new(C);
	c.a = 6;
	c.x = g;

	v = g(c);
	if v != 6 { panic(v); }

	v = c.x(c);
	if v != 6 { panic(v); }

	v = c.f();
	if v != 6 { panic(v); }
}

func g(p *C)int {
	var v int;

	v = p.a;
	if v != 6 { panic(v); }
	return p.a;
}
