ast.go
func (ps *printState) print(a AST) {
	c := 0
	for _, v := range ps.printing {
		if v == a {
			// We permit the type to appear once, and
			// return without printing anything if we see
			// it twice.  This is for a case like
			// _Z6outer2IsEPFilES1_, where the
			// substitution is printed differently the
			// second time because the set of inner types
			// is different.
			c++
			if c > 1 {
				return
			}
		}
	}
	ps.printing = append(ps.printing, a)

	a.print(ps)

	ps.printing = ps.printing[:len(ps.printing)-1]
}
func (ps *printState) print(a AST) {
	c := 0
	for _, v := range ps.printing {
		if v == a {
			// We permit the type to appear once, and
			// return without printing anything if we see
			// it twice.  This is for a case like
			// _Z6outer2IsEPFilES1_, where the
			// substitution is printed differently the
			// second time because the set of inner types
			// is different.
			c++
			if c > 1 {
				return
			}
		}
	}
	ps.printing = append(ps.printing, a)

	a.print(ps)

	ps.printing = ps.printing[:len(ps.printing)-1]
}
func ( ps * printState ) print ( a AST ) { c := 0 for _ , v := range ps . printing { if v == a { // We permit the type to appear once, and // return without printing anything if we see // it twice.  This is for a case like // _Z6outer2IsEPFilES1_, where the // substitution is printed differently the // second time because the set of inner types // is different. c ++ if c > 1 { return } } } ps . printing = append ( ps . printing , a ) a . print ( ps ) ps . printing = ps . printing [ : len ( ps . printing ) - 1 ] }
// Print an AST.
Print an AST .