github.com/dannin/go@v0.0.0-20161031215817-d35dfd405eaa/src/go/types/testdata/aliasdecl.src (about) 1 // Copyright 2016 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package aliasdecl 6 7 import ( 8 "flag" 9 "fmt" // use at most once (to test "imported but not used" error) 10 "go/build" 11 . "go/build" 12 "io" 13 "math" 14 "unsafe" 15 ) 16 17 // helper 18 var before struct { 19 f int 20 } 21 22 // aliases must refer to package-qualified identifiers 23 type _ => _ /* ERROR "_ is not a package-qualified identifier" */ 24 type t1 => _ /* ERROR "_ is not a package-qualified identifier" */ 25 26 const _ => iota /* ERROR "iota is not a package-qualified identifier" */ 27 type _ => int /* ERROR "int is not a package-qualified identifier" */ 28 29 const c => iota /* ERROR "iota is not a package-qualified identifier" */ 30 type t2 => int /* ERROR "int is not a package-qualified identifier" */ 31 32 // dot-imported identifiers are not qualified identifiers 33 // TODO(gri) fix error printing - should not print a qualified identifier... 34 var _ => Default /* ERROR "Default is not a package-qualified identifier" */ 35 36 // qualified identifiers must start with a package 37 var _ => before /* ERROR "before.f is not a package-qualified identifier" */ .f 38 func _ => before /* ERROR "before.f is not a package-qualified identifier" */ .f 39 var _ => after /* ERROR "after.m is not a package-qualified identifier" */ .m 40 func _ => after /* ERROR "after.m is not a package-qualified identifier" */ .m 41 42 var v1 => before /* ERROR "before.f is not a package-qualified identifier" */ .f 43 func f1 => before /* ERROR "before.f is not a package-qualified identifier" */ .f 44 var v2 => after /* ERROR "after.m is not a package-qualified identifier" */ .m 45 func f2 => after /* ERROR "after.m is not a package-qualified identifier" */ .m 46 47 // TODO(gri) fix error printing - should print correct qualified identifier... 48 var _ => Default /* ERROR "Default.ARCH is not a package-qualified identifier" */ .ARCH 49 var _ Context // use dot-imported package go/build 50 51 // aliases may not refer to package unsafe 52 type ptr => unsafe /* ERROR "refers to package unsafe" */ .Pointer 53 func size => unsafe /* ERROR "refers to package unsafe" */ .Sizeof 54 55 // aliases must refer to entities of the same kind 56 const _ => math.Pi 57 const pi => math.Pi 58 const pi1 => math /* ERROR "math.Sin.* is not a constant" */ .Sin 59 60 type _ => io.Writer 61 type writer => io.Writer 62 type writer1 => math /* ERROR "math.Sin.* is not a type" */ .Sin 63 64 var _ => build.Default 65 var def => build.Default 66 var def1 => build /* ERROR "build.Import.* is not a variable" */ .Import 67 68 func _ => math.Sin 69 func sin => math.Sin 70 func sin1 => math /* ERROR "math.Pi.* is not a function" */ .Pi 71 72 // using an incorrectly declared alias should not lead to more errors 73 const _ = pi1 74 type _ writer1 75 var _ def1 = 0 76 var _ = sin1 77 78 // aliases may not be called init 79 func init /* ERROR "cannot declare init" */ => flag.Parse 80 func _ => flag.Parse // use package flag 81 82 // alias reference to a package marks package as used 83 func _ => fmt.Println 84 85 // re-exported aliases 86 const Pi => math.Pi 87 88 type Writer => io.Writer 89 90 var Def => build.Default 91 92 func Sin => math.Sin 93 94 // const aliases may appear in "iota" context 95 // (this verifies a type-checker internal assertion) 96 const ( 97 _ = iota 98 pi2 => math.Pi 99 ) 100 101 // type aliases denote identical types 102 type myPackage => build.Package 103 104 var pkg myPackage 105 var _ build.Package = pkg // valid assignment 106 var _ *build.Package = &pkg // valid assignment 107 108 // helper 109 type after struct{} 110 111 func (after) m() {}