...
Run Format

Text file src/go/types/testdata/decls4.src

Documentation: go/types/testdata

     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	// type aliases
     6	
     7	package decls4
     8	
     9	type (
    10		T0 [10]int
    11		T1 []byte
    12		T2 struct {
    13			x int
    14		}
    15		T3 interface{
    16			m() T2
    17		}
    18		T4 func(int, T0) chan T2
    19	)
    20	
    21	type (
    22		Ai = int
    23		A0 = T0
    24		A1 = T1
    25		A2 = T2
    26		A3 = T3
    27		A4 = T4
    28	
    29		A10 = [10]int
    30		A11 = []byte
    31		A12 = struct {
    32			x int
    33		}
    34		A13 = interface{
    35			m() A2
    36		}
    37		A14 = func(int, A0) chan A2
    38	)
    39	
    40	// check assignment compatibility due to equality of types
    41	var (
    42		xi_ int
    43		ai Ai = xi_
    44	
    45		x0 T0
    46		a0 A0 = x0
    47	
    48		x1 T1
    49		a1 A1 = x1
    50	
    51		x2 T2
    52		a2 A2 = x2
    53	
    54		x3 T3
    55		a3 A3 = x3
    56	
    57		x4 T4
    58		a4 A4 = x4
    59	)
    60	
    61	// alias receiver types
    62	func (Ai /* ERROR "invalid receiver" */) m1() {}
    63	func (T0) m1() {}
    64	func (A0) m1 /* ERROR already declared */ () {}
    65	func (A0) m2 () {}
    66	func (A3 /* ERROR invalid receiver */ ) m1 () {}
    67	func (A10 /* ERROR invalid receiver */ ) m1() {}
    68	
    69	// x0 has methods m1, m2 declared via receiver type names T0 and A0
    70	var _ interface{ m1(); m2() } = x0
    71	
    72	// alias receiver types (test case for issue #23042)
    73	type T struct{}
    74	
    75	var (
    76		_ = T.m
    77		_ = T{}.m
    78		_ interface{m()} = T{}
    79	)
    80	
    81	var (
    82		_ = T.n
    83		_ = T{}.n
    84		_ interface{m(); n()} = T{}
    85	)
    86	
    87	type U = T
    88	func (U) m() {}
    89	
    90	// alias receiver types (long type declaration chains)
    91	type (
    92		V0 = V1
    93		V1 = (V2)
    94		V2 = ((V3))
    95		V3 = T
    96	)
    97	
    98	func (V0) m /* ERROR already declared */ () {}
    99	func (V1) n() {}
   100	
   101	// alias receiver types (invalid due to cycles)
   102	type (
   103		W0 /* ERROR illegal cycle */ = W1
   104		W1 = (W2)
   105		W2 = ((W0))
   106	)
   107	
   108	func (W0) m() {} // no error expected (due to above cycle error)
   109	func (W1) n() {}
   110	
   111	// alias receiver types (invalid due to builtin underlying type)
   112	type (
   113		B0 = B1
   114		B1 = B2
   115		B2 = int
   116	)
   117	
   118	func (B0 /* ERROR invalid receiver */ ) m() {}
   119	func (B1 /* ERROR invalid receiver */ ) n() {}
   120	
   121	// cycles
   122	type (
   123		C2 /* ERROR illegal cycle */ = C2
   124		C3 /* ERROR illegal cycle */ = C4
   125		C4 = C3
   126		C5 struct {
   127			f *C6
   128		}
   129		C6 = C5
   130		C7 /* ERROR illegal cycle */  struct {
   131			f C8
   132		}
   133		C8 = C7
   134	)
   135	
   136	// embedded fields
   137	var (
   138		s0 struct { T0 }
   139		s1 struct { A0 } = s0 /* ERROR cannot use */ // embedded field names are different
   140	)
   141	
   142	// embedding and lookup of fields and methods
   143	func _(s struct{A0}) { s.A0 = x0 }
   144	
   145	type eX struct{xf int}
   146	
   147	func (eX) xm()
   148	
   149	type eY = struct{eX} // field/method set of eY includes xf, xm
   150	
   151	type eZ = *struct{eX} // field/method set of eZ includes xf, xm
   152	
   153	type eA struct {
   154		eX // eX contributes xf, xm to eA
   155	}
   156	
   157	type eA2 struct {
   158		*eX // *eX contributes xf, xm to eA
   159	}
   160	
   161	type eB struct {
   162		eY // eY contributes xf, xm to eB
   163	}
   164	
   165	type eB2 struct {
   166		*eY // *eY contributes xf, xm to eB
   167	}
   168	
   169	type eC struct {
   170		eZ // eZ contributes xf, xm to eC
   171	}
   172	
   173	var (
   174		_ = eA{}.xf
   175		_ = eA{}.xm
   176		_ = eA2{}.xf
   177		_ = eA2{}.xm
   178		_ = eB{}.xf
   179		_ = eB{}.xm
   180		_ = eB2{}.xf
   181		_ = eB2{}.xm
   182		_ = eC{}.xf
   183		_ = eC{}.xm
   184	)
   185	
   186	// ambiguous selectors due to embedding via type aliases
   187	type eD struct {
   188		eY
   189		eZ
   190	}
   191	
   192	var (
   193		_ = eD{}.xf /* ERROR ambiguous selector */
   194		_ = eD{}.xm /* ERROR ambiguous selector */
   195	)
   196	
   197	var (
   198		_ interface{ xm() } = eD /* ERROR missing method xm */ {}
   199	)

View as plain text