gotools/internal/refactor/inline/testdata/method.txtar

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)
}