1// +build ignore
2
3// This is a slice of the fmt package.
4
5package main
6
7type pp struct {
8	field interface{}
9}
10
11func newPrinter() *pp {
12	return new(pp)
13}
14
15func Fprintln(a ...interface{}) {
16	p := newPrinter()
17	p.doPrint(a, true, true)
18}
19
20func Println(a ...interface{}) {
21	Fprintln(a...)
22}
23
24func (p *pp) doPrint(a []interface{}, addspace, addnewline bool) {
25	print(a[0]) // @types S | string
26	stringer := a[0].(interface {
27		String() string
28	})
29
30	stringer.String()
31	print(stringer) // @types S
32}
33
34type S int
35
36func (S) String() string { return "" }
37
38func main() {
39	Println("Hello, World!", S(0))
40}
41
42// @calls (*main.pp).doPrint -> (main.S).String
43