OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [go/] [printer/] [testdata/] [declarations.input] - Rev 747

Compare with Previous | Blame | View Log

// 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 imports

import "io"

import (
        _ "io"
)

import _ "io"

import (
        "io"
        "io"
        "io"
)

import (
        "io"
        aLongRename "io"

        b "io"
)

import (
       "unrenamed"
       renamed "renameMe"
       . "io"
       _ "io"
       "io"
       . "os"
)

// no newlines between consecutive single imports, but
// respect extra line breaks in the source (at most one empty line)
import _ "io"
import _ "io"
import _ "io"

import _ "os"
import _ "os"
import _ "os"


import _ "fmt"
import _ "fmt"
import _ "fmt"

import "foo"  // a comment
import "bar"  // a comment

import (
        _ "foo"
        // a comment
        "bar"
        "foo"  // a comment
        "bar"  // a comment
)

// comments + renames
import (
       "unrenamed" // a comment
       renamed "renameMe"
       . "io" /* a comment */
       _ "io/ioutil" // a comment
       "io" // testing alignment
       . "os"
       // a comment
)

// a case that caused problems in the past (comment placement)
import (
        . "fmt"
        "io"
        "malloc"        // for the malloc count test only
        "math"
        "strings"
        "testing"
)

// more import examples
import (
        "xxx"
        "much longer name" // comment
        "short name" // comment
)

import (
        _ "xxx"
        "much longer name" // comment
)

import (
        mymath "math"
        "/foo/bar/long_package_path" // a comment
)

import (
        "package_a" // comment
        "package_b"
        my_better_c "package_c" // comment
        "package_d" // comment
        my_e "package_e" // comment

        "package_a"    // comment
        "package_bb"
        "package_ccc"  // comment
        "package_dddd" // comment
)

// at least one empty line between declarations of different kind
import _ "io"
var _ int

// at least one empty line between declarations of the same kind
// if there is associated documentation (was issue 2570)
type T1 struct{}
// T2 comment
type T2 struct {
} // should be a two-line struct


// T3 comment
type T2 struct {


} // should be a two-line struct


// printing of constant literals
const (
        _ = "foobar"
        _ = "a۰۱۸"
        _ = "foo६४"
        _ = "bar9876"
        _ = 0
        _ = 1
        _ = 123456789012345678890
        _ = 01234567
        _ = 0xcafebabe
        _ = 0.
        _ = .0
        _ = 3.14159265
        _ = 1e0
        _ = 1e+100
        _ = 1e-100
        _ = 2.71828e-1000
        _ = 0i
        _ = 1i
        _ = 012345678901234567889i
        _ = 123456789012345678890i
        _ = 0.i
        _ = .0i
        _ = 3.14159265i
        _ = 1e0i
        _ = 1e+100i
        _ = 1e-100i
        _ = 2.71828e-1000i
        _ = 'a'
        _ = '\000'
        _ = '\xFF'
        _ = '\uff16'
        _ = '\U0000ff16'
        _ = `foobar`
        _ = `foo
---
---
bar`
)


func _() {
        type _ int
        type _ *int
        type _ []int
        type _ map[string]int
        type _ chan int
        type _ func() int

        var _ int
        var _ *int
        var _ []int
        var _ map[string]int
        var _ chan int
        var _ func() int

        type _ struct{}
        type _ *struct{}
        type _ []struct{}
        type _ map[string]struct{}
        type _ chan struct{}
        type _ func() struct{}

        type _ interface{}
        type _ *interface{}
        type _ []interface{}
        type _ map[string]interface{}
        type _ chan interface{}
        type _ func() interface{}

        var _ struct{}
        var _ *struct{}
        var _ []struct{}
        var _ map[string]struct{}
        var _ chan struct{}
        var _ func() struct{}

        var _ interface{}
        var _ *interface{}
        var _ []interface{}
        var _ map[string]interface{}
        var _ chan interface{}
        var _ func() interface{}
}


// don't lose blank lines in grouped declarations
const (
        _ int = 0
        _ float = 1

        _ string = "foo"

        _ = iota
        _
        
        // a comment
        _

        _
)


type (
        _ int
        _ struct {}
        
        _ interface{}
        
        // a comment
        _ map[string]int
)


var (
        _ int = 0
        _ float = 1

        _ string = "foo"

        _ bool
        
        // a comment
        _ bool
)


// don't lose blank lines in this struct
type _ struct {
        String struct {
                Str, Len int
        }
        Slice struct {
                Array, Len, Cap int
        }
        Eface struct {
                Typ, Ptr int
        }

        UncommonType struct {
                Name, PkgPath int
        }
        CommonType struct {
                Size, Hash, Alg, Align, FieldAlign, String, UncommonType int
        }
        Type struct {
                Typ, Ptr int
        }
        StructField struct {
                Name, PkgPath, Typ, Tag, Offset int
        }
        StructType struct {
                Fields int
        }
        PtrType struct {
                Elem int
        }
        SliceType struct {
                Elem int
        }
        ArrayType struct {
                Elem, Len int
        }

        Stktop struct {
                Stackguard, Stackbase, Gobuf int
        }
        Gobuf struct {
                Sp, Pc, G int
        }
        G struct {
                Stackbase, Sched, Status, Alllink int
        }
}


// no blank lines in empty structs and interfaces, but leave 1- or 2-line layout alone
type _ struct{            }
type _ struct {

}

type _ interface{            }
type _ interface {

}


// no tabs for single or ungrouped decls
func _() {
        const xxxxxx = 0
        type x int
        var xxx int
        var yyyy float = 3.14
        var zzzzz = "bar"

        const (
                xxxxxx = 0
        )
        type (
                x int
        )
        var (
                xxx int
        )
        var (
                yyyy float = 3.14
        )
        var (
                zzzzz = "bar"
        )
}

// tabs for multiple or grouped decls
func _() {
        // no entry has a type
        const (
                zzzzzz = 1
                z = 2
                zzz = 3
        )
        // some entries have a type
        const (
                xxxxxx = 1
                x = 2
                xxx = 3
                yyyyyyyy float = iota
                yyyy = "bar"
                yyy
                yy = 2
        )
}

func _() {
        // no entry has a type
        var (
                zzzzzz = 1
                z = 2
                zzz = 3
        )
        // no entry has a value
        var (
                _ int
                _ float
                _ string

                _ int  // comment
                _ float  // comment
                _ string  // comment
        )
        // some entries have a type
        var (
                xxxxxx int
                x float
                xxx string
                yyyyyyyy int = 1234
                y float = 3.14
                yyyy = "bar"
                yyy string = "foo"
        )
        // mixed entries - all comments should be aligned
        var (
                a, b, c int
                x = 10
                d int  // comment
                y = 20  // comment
                f, ff, fff, ffff int = 0, 1, 2, 3  // comment
        )
        // respect original line breaks
        var _ = []T {
                T{0x20, "Telugu"},
        }
        var _ = []T {
                // respect original line breaks
                T{0x20, "Telugu"},
        }
}

func _() {
        type (
                xxxxxx int
                x float
                xxx string
                xxxxx []x
                xx struct{}
                xxxxxxx struct {
                        _, _ int
                        _ float
                }
                xxxx chan<- string
        )
}

// alignment of "=" in consecutive lines (extended example from issue 1414)
const (
        umax uint                  = ^uint(0) // maximum value for a uint
        bpu  = 1 << (5 + umax>>63)            // bits per uint
        foo
        bar  = -1
)

// typical enum
const (
        a MyType = iota
        abcd
        b
        c
        def
)

// excerpt from godoc.go
var (
        goroot = flag.String("goroot", runtime.GOROOT(), "Go root directory")
        testDir = flag.String("testdir", "", "Go root subdirectory - for testing only (faster startups)")
        pkgPath = flag.String("path", "", "additional package directories (colon-separated)")
        filter = flag.String("filter", "", "filter file containing permitted package directory paths")
        filterMin = flag.Int("filter_minutes", 0, "filter file update interval in minutes; disabled if <= 0")
        filterDelay delayTime // actual filter update interval in minutes; usually filterDelay == filterMin, but filterDelay may back off exponentially
)


// formatting of structs
type _ struct{}

type _ struct{ /* this comment should be visible */ }

type _ struct{
        // this comment should be visible and properly indented
}

type _ struct {  // this comment must not change indentation
        f int
        f, ff, fff, ffff int
}

type _ struct {
        string
}

type _ struct {
        string  // comment
}

type _ struct {
        string "tag"
}

type _ struct {
        string "tag"  // comment
}

type _ struct {
        f int
}

type _ struct {
        f int  // comment
}

type _ struct {
        f int "tag"
}

type _ struct {
        f int "tag"  // comment
}

type _ struct {
        bool
        a, b, c int
        int "tag"
        ES // comment
        float "tag"  // comment
        f int  // comment
        f, ff, fff, ffff int  // comment
        g float "tag"
        h float "tag"  // comment
}

type _ struct { a, b,
c, d int  // this line should be indented
u, v, w, x float // this line should be indented
p, q,
r, s float // this line should be indented
}


// difficult cases
type _ struct {
        bool  // comment
        text []byte  // comment
}


// formatting of interfaces
type EI interface{}

type _ interface {
        EI
}

type _ interface {
        f()
        fffff()
}

type _ interface {
        EI
        f()
        fffffg()
}

type _ interface {  // this comment must not change indentation
        EI  // here's a comment
        f()  // no blank between identifier and ()
        fffff()  // no blank between identifier and ()
        gggggggggggg(x, y, z int) ()  // hurray
}


// formatting of variable declarations
func _() {
        type day struct { n int; short, long string }
        var (
                Sunday = day{ 0, "SUN", "Sunday" }
                Monday = day{ 1, "MON", "Monday" }
                Tuesday = day{ 2, "TUE", "Tuesday" }
                Wednesday = day{ 3, "WED", "Wednesday" }
                Thursday = day{ 4, "THU", "Thursday" }
                Friday = day{ 5, "FRI", "Friday" }
                Saturday = day{ 6, "SAT", "Saturday" }
        )
}


// formatting of multi-line variable declarations
var a1, b1, c1 int  // all on one line

var a2, b2,
c2 int  // this line should be indented

var (a3, b3,
c3, d3 int  // this line should be indented
a4, b4, c4 int  // this line should be indented
)


func _() {
        var privateKey2 = &Block{Type: "RSA PRIVATE KEY",
                                        Headers: map[string]string{},
                                        Bytes: []uint8{0x30, 0x82, 0x1, 0x3a, 0x2, 0x1, 0x0, 0x2,
                        0x41, 0x0, 0xb2, 0x99, 0xf, 0x49, 0xc4, 0x7d, 0xfa, 0x8c,
                        0xd4, 0x0, 0xae, 0x6a, 0x4d, 0x1b, 0x8a, 0x3b, 0x6a, 0x13,
                        0x64, 0x2b, 0x23, 0xf2, 0x8b, 0x0, 0x3b, 0xfb, 0x97, 0x79,
                },
        }
}


func _() {
        var Universe = Scope {
                Names: map[string]*Ident {
                        // basic types
                        "bool": nil,
                        "byte": nil,
                        "int8": nil,
                        "int16": nil,
                        "int32": nil,
                        "int64": nil,
                        "uint8": nil,
                        "uint16": nil,
                        "uint32": nil,
                        "uint64": nil,
                        "float32": nil,
                        "float64": nil,
                        "string": nil,

                        // convenience types
                        "int": nil,
                        "uint": nil,
                        "uintptr": nil,
                        "float": nil,

                        // constants
                        "false": nil,
                        "true": nil,
                        "iota": nil,
                        "nil": nil,

                        // functions
                        "cap": nil,
                        "len": nil,
                        "new": nil,
                        "make": nil,
                        "panic": nil,
                        "panicln": nil,
                        "print": nil,
                        "println": nil,
                },
        }
}


// alignment of map composite entries
var _ = map[int]int{
        // small key sizes: always align even if size ratios are large
        a: a,
        abcdefghabcdefgh: a,
        ab: a,
        abc: a,
        abcdefgabcdefg: a,
        abcd: a,
        abcde: a,
        abcdef: a,

        // mixed key sizes: align when key sizes change within accepted ratio
        abcdefgh: a,
        abcdefghabcdefg: a,
        abcdefghij: a,
        abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij: a, // outlier - do not align with previous line
        abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij: a, // align with previous line

        ab: a, // do not align with previous line
        abcde: a, // align with previous line
}


func _() {
        var _ = T{
                a,      // must introduce trailing comma
        }
}


// formatting of function results
func _() func() {}
func _() func(int) { return nil }
func _() func(int) int { return nil }
func _() func(int) func(int) func() { return nil }


// formatting of consecutive single-line functions
func _() {}
func _() {}
func _() {}

func _() {}  // an empty line before this function
func _() {}
func _() {}

func _() { f(1, 2, 3) }
func _(x int) int { y := x; return y+1 }
func _() int { type T struct{}; var x T; return x }

// these must remain multi-line since they are multi-line in the source
func _() {
        f(1, 2, 3)
}
func _(x int) int {
        y := x; return y+1
}
func _() int {
        type T struct{}; var x T; return x
}


// making function declarations safe for new semicolon rules
func _() { /* multi-line func because of comment */ }

func _() {
/* multi-line func because block is on multiple lines */ }


// ellipsis parameters
func _(...int)
func _(...*int)
func _(...[]int)
func _(...struct{})
func _(bool, ...interface{})
func _(bool, ...func())
func _(bool, ...func(...int))
func _(bool, ...map[string]int)
func _(bool, ...chan int)

func _(b bool, x ...int)
func _(b bool, x ...*int)
func _(b bool, x ...[]int)
func _(b bool, x ...struct{})
func _(x ...interface{})
func _(x ...func())
func _(x ...func(...int))
func _(x ...map[string]int)
func _(x ...chan int)


// these parameter lists must remain multi-line since they are multi-line in the source
func _(bool,
int) {
}
func _(x bool,
y int) {
}
func _(x,
y bool) {
}
func _(bool, // comment
int) {
}
func _(x bool, // comment
y int) {
}
func _(x, // comment
y bool) {
}
func _(bool, // comment
// comment
int) {
}
func _(x bool, // comment
// comment
y int) {
}
func _(x, // comment
// comment
y bool) {
}
func _(bool,
// comment
int) {
}
func _(x bool,
// comment
y int) {
}
func _(x,
// comment
y bool) {
}
func _(x, // comment
y,// comment
z bool) {
}
func _(x, // comment
        y,// comment
        z bool) {
}
func _(x int,   // comment
        y float,        // comment
        z bool) {
}


// properly indent multi-line signatures
func ManageStatus(in <-chan *Status, req <-chan Request,
stat chan<- *TargetInfo,
TargetHistorySize int) {
}

func MultiLineSignature0(
a, b, c int,
) {}

func MultiLineSignature1(
a, b, c int,
u, v, w float,
) {}

func MultiLineSignature2(
a, b,
c int,
) {}

func MultiLineSignature3(
a, b,
c int, u, v,
w float,
                x ...int) {}

func MultiLineSignature4(
a, b, c int,
u, v,
w float,
                x ...int) {}

func MultiLineSignature5(
a, b, c int,
u, v, w float,
p, q,
r string,
                x ...int) {}

// make sure it also works for methods in interfaces
type _ interface {
MultiLineSignature0(
a, b, c int,
)

MultiLineSignature1(
a, b, c int,
u, v, w float,
)

MultiLineSignature2(
a, b,
c int,
)

MultiLineSignature3(
a, b,
c int, u, v,
w float,
                x ...int)

MultiLineSignature4(
a, b, c int,
u, v,
w float,
                x ...int)

MultiLineSignature5(
a, b, c int,
u, v, w float,
p, q,
r string,
                x ...int)
}

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.