// $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;
  for {}
  for {};
  for j := 0; j < i; j++ {
    if i == 0 {
    } else i = 0;
    var x float;
  }
  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() {
}
