...
Run Format

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

Documentation: go/types/testdata

     1	// Copyright 2013 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 methodsets
     6	
     7	type T0 struct {}
     8	
     9	func (T0) v0() {}
    10	func (*T0) p0() {}
    11	
    12	type T1 struct {} // like T0 with different method names
    13	
    14	func (T1) v1() {}
    15	func (*T1) p1() {}
    16	
    17	type T2 interface {
    18		v2()
    19		p2()
    20	}
    21	
    22	type T3 struct {
    23		T0
    24		*T1
    25		T2
    26	}
    27	
    28	// Method expressions
    29	func _() {
    30		var (
    31			_ func(T0) = T0.v0
    32			_ = T0 /* ERROR "not in method set" */ .p0
    33	
    34			_ func (*T0) = (*T0).v0
    35			_ func (*T0) = (*T0).p0
    36	
    37			// T1 is like T0
    38	
    39			_ func(T2) = T2.v2
    40			_ func(T2) = T2.p2
    41	
    42			_ func(T3) = T3.v0
    43			_ func(T3) = T3 /* ERROR "not in method set" */ .p0
    44			_ func(T3) = T3.v1
    45			_ func(T3) = T3.p1
    46			_ func(T3) = T3.v2
    47			_ func(T3) = T3.p2
    48	
    49			_ func(*T3) = (*T3).v0
    50			_ func(*T3) = (*T3).p0
    51			_ func(*T3) = (*T3).v1
    52			_ func(*T3) = (*T3).p1
    53			_ func(*T3) = (*T3).v2
    54			_ func(*T3) = (*T3).p2
    55		)
    56	}
    57	
    58	// Method values with addressable receivers
    59	func _() {
    60		var (
    61			v0 T0
    62			_ func() = v0.v0
    63			_ func() = v0.p0
    64		)
    65	
    66		var (
    67			p0 *T0
    68			_ func() = p0.v0
    69			_ func() = p0.p0
    70		)
    71	
    72		// T1 is like T0
    73	
    74		var (
    75			v2 T2
    76			_ func() = v2.v2
    77			_ func() = v2.p2
    78		)
    79	
    80		var (
    81			v4 T3
    82			_ func() = v4.v0
    83			_ func() = v4.p0
    84			_ func() = v4.v1
    85			_ func() = v4.p1
    86			_ func() = v4.v2
    87			_ func() = v4.p2
    88		)
    89	
    90		var (
    91			p4 *T3
    92			_ func() = p4.v0
    93			_ func() = p4.p0
    94			_ func() = p4.v1
    95			_ func() = p4.p1
    96			_ func() = p4.v2
    97			_ func() = p4.p2
    98		)
    99	}
   100	
   101	// Method calls with addressable receivers
   102	func _() {
   103		var v0 T0
   104		v0.v0()
   105		v0.p0()
   106	
   107		var p0 *T0
   108		p0.v0()
   109		p0.p0()
   110	
   111		// T1 is like T0
   112	
   113		var v2 T2
   114		v2.v2()
   115		v2.p2()
   116	
   117		var v4 T3
   118		v4.v0()
   119		v4.p0()
   120		v4.v1()
   121		v4.p1()
   122		v4.v2()
   123		v4.p2()
   124	
   125		var p4 *T3
   126		p4.v0()
   127		p4.p0()
   128		p4.v1()
   129		p4.p1()
   130		p4.v2()
   131		p4.p2()
   132	}
   133	
   134	// Method values with value receivers
   135	func _() {
   136		var (
   137			_ func() = T0{}.v0
   138			_ func() = T0 /* ERROR "not in method set" */ {}.p0
   139	
   140			_ func() = (&T0{}).v0
   141			_ func() = (&T0{}).p0
   142	
   143			// T1 is like T0
   144	
   145			// no values for T2
   146	
   147			_ func() = T3{}.v0
   148			_ func() = T3 /* ERROR "not in method set" */ {}.p0
   149			_ func() = T3{}.v1
   150			_ func() = T3{}.p1
   151			_ func() = T3{}.v2
   152			_ func() = T3{}.p2
   153	
   154			_ func() = (&T3{}).v0
   155			_ func() = (&T3{}).p0
   156			_ func() = (&T3{}).v1
   157			_ func() = (&T3{}).p1
   158			_ func() = (&T3{}).v2
   159			_ func() = (&T3{}).p2
   160		)
   161	}
   162	
   163	// Method calls with value receivers
   164	func _() {
   165		T0{}.v0()
   166		T0 /* ERROR "not in method set" */ {}.p0()
   167	
   168		(&T0{}).v0()
   169		(&T0{}).p0()
   170	
   171		// T1 is like T0
   172	
   173		// no values for T2
   174	
   175		T3{}.v0()
   176		T3 /* ERROR "not in method set" */ {}.p0()
   177		T3{}.v1()
   178		T3{}.p1()
   179		T3{}.v2()
   180		T3{}.p2()
   181	
   182		(&T3{}).v0()
   183		(&T3{}).p0()
   184		(&T3{}).v1()
   185		(&T3{}).p1()
   186		(&T3{}).v2()
   187		(&T3{}).p2()
   188	}
   189	
   190	// *T has no methods if T is an interface type
   191	func issue5918() {
   192		var (
   193			err error
   194			_ = err.Error()
   195			_ func() string = err.Error
   196			_ func(error) string = error.Error
   197	
   198			perr = &err
   199			_ = perr /* ERROR "no field or method" */ .Error()
   200			_ func() string = perr /* ERROR "no field or method" */ .Error
   201			_ func(*error) string = ( /* ERROR "no field or method" */ *error).Error
   202		)
   203	
   204		type T *interface{ m() int }
   205		var (
   206			x T
   207			_ = (*x).m()
   208			_ = (*x).m
   209	
   210			_ = x /* ERROR "no field or method" */ .m()
   211			_ = x /* ERROR "no field or method" */ .m
   212			_ = T /* ERROR "no field or method" */ .m
   213		)
   214	}

View as plain text