43 lines
		
	
	
		
			643 B
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			643 B
		
	
	
	
		
			Go
		
	
	
	
// +build ignore
 | 
						|
 | 
						|
// This is a slice of the fmt package.
 | 
						|
 | 
						|
package main
 | 
						|
 | 
						|
type pp struct {
 | 
						|
	field interface{}
 | 
						|
}
 | 
						|
 | 
						|
func newPrinter() *pp {
 | 
						|
	return new(pp)
 | 
						|
}
 | 
						|
 | 
						|
func Fprintln(a ...interface{}) {
 | 
						|
	p := newPrinter()
 | 
						|
	p.doPrint(a, true, true)
 | 
						|
}
 | 
						|
 | 
						|
func Println(a ...interface{}) {
 | 
						|
	Fprintln(a...)
 | 
						|
}
 | 
						|
 | 
						|
func (p *pp) doPrint(a []interface{}, addspace, addnewline bool) {
 | 
						|
	print(a[0]) // @types S | string
 | 
						|
	stringer := a[0].(interface {
 | 
						|
		String() string
 | 
						|
	})
 | 
						|
 | 
						|
	stringer.String()
 | 
						|
	print(stringer) // @types S
 | 
						|
}
 | 
						|
 | 
						|
type S int
 | 
						|
 | 
						|
func (S) String() string { return "" }
 | 
						|
 | 
						|
func main() {
 | 
						|
	Println("Hello, World!", S(0))
 | 
						|
}
 | 
						|
 | 
						|
// @calls (*main.pp).doPrint -> (main.S).String
 |