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