1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
Test of inlining a method call.
The call to (*T).g0 implicitly takes the address &x, and
the call to T.h implictly dereferences the argument *ptr.
The f1/g1 methods have parameters, exercising the
splicing of the receiver into the parameter list.
Notice that the unnamed parameters become named.
-- go.mod --
module testdata
go 1.12
-- a/f0.go --
package a
type T int
func (recv T) f0() { println(recv) }
func _(x T) {
x.f0() //@ inline(re"f0", f0)
}
-- f0 --
package a
type T int
func (recv T) f0() { println(recv) }
func _(x T) {
println(x) //@ inline(re"f0", f0)
}
-- a/g0.go --
package a
func (recv *T) g0() { println(recv) }
func _(x T) {
x.g0() //@ inline(re"g0", g0)
}
-- g0 --
package a
func (recv *T) g0() { println(recv) }
func _(x T) {
println(&x) //@ inline(re"g0", g0)
}
-- a/f1.go --
package a
func (recv T) f1(int, int) { println(recv) }
func _(x T) {
x.f1(1, 2) //@ inline(re"f1", f1)
}
-- f1 --
package a
func (recv T) f1(int, int) { println(recv) }
func _(x T) {
println(x) //@ inline(re"f1", f1)
}
-- a/g1.go --
package a
func (recv *T) g1(int, int) { println(recv) }
func _(x T) {
x.g1(1, 2) //@ inline(re"g1", g1)
}
-- g1 --
package a
func (recv *T) g1(int, int) { println(recv) }
func _(x T) {
println(&x) //@ inline(re"g1", g1)
}
-- a/h.go --
package a
func (T) h() int { return 1 }
func _() {
var ptr *T
ptr.h() //@ inline(re"h", h)
}
-- h --
package a
func (T) h() int { return 1 }
func _() {
var ptr *T
var _ T = *ptr
_ = 1 //@ inline(re"h", h)
}
-- a/i.go --
package a
func (T) i() int { return 1 }
func _() {
(*T).i(nil) //@ inline(re"i", i)
}
-- i --
package a
func (T) i() int { return 1 }
func _() {
_ = 1 //@ inline(re"i", i)
}
|