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