code: 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]
  }
docs: // Print an AST.