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

const
	a_const = 0

const (
	pi = /* the usual */ 3.14159265358979323;
	e = 2.718281828;
	mask1 int = 1 << iota;
	mask2 = 1 << iota;
	mask3 = 1 << iota;
	mask4 = 1 << iota;
)

type (
	Empty interface {};
	Point struct {
		x, y int;
	};
	Point2 Point
)

func (p *Point) Initialize(x, y int) *Point {
	p.x, p.y = x, y;
	return p;
}

func (p *Point) Distance() int {
	return p.x * p.x + p.y * p.y;
}

var (
	x1 int;
	x2 int;
	u, v, w float
)

func foo() {}

func min(x, y int) int {
	if x < y { return x; }
	return y;
}

func swap(x, y int) (u, v int) {
	u = y;
	v = x;
	return;
}

func control_structs() {
	var p *Point = new(Point).Initialize(2, 3);
	i := p.Distance();
	var f float = 0.3;
	_ = f;
	for {}
	for {};
	for j := 0; j < i; j++ {
		if i == 0 {
		} else i = 0;
		var x float;
		_ = x;
	}
	foo:	// a label
	var j int;
	switch y := 0; true {
	case i < y:
		fallthrough;
	case i < j:
	case i == 0, i == 1, i == j:
		i++; i++;
		goto foo;
	default:
		i = -+-+i;
		break;
	}
}

func main() {
}
