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

// This is test0.go.

package Test0

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) {
  p.x, p.y = x, y
}

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;
  for {}
  for {};
  for j := 0; j < i; j++ {
    if i == 0 {
    } else i = 0;
    var x float
  }
  foo:  // a label
  switch {
  case i < y:
    fallthrough;
  case i < j:
  case i == 0, i == 1, i == j:
    i++; i++;
    goto foo;
  default:
    i = -+-+i;
    break
  }
}
