demangle.go
func simplify(a AST) AST {
	var seen []AST
	skip := func(a AST) bool {
		for _, v := range seen {
			if v == a {
				return true
			}
		}
		seen = append(seen, a)
		return false
	}
	if r := a.Copy(simplifyOne, skip); r != nil {
		return r
	}
	return a
}
func simplify(a AST) AST {
	var seen []AST
	skip := func(a AST) bool {
		for _, v := range seen {
			if v == a {
				return true
			}
		}
		seen = append(seen, a)
		return false
	}
	if r := a.Copy(simplifyOne, skip); r != nil {
		return r
	}
	return a
}
func simplify ( a AST ) AST { var seen [ ] AST skip := func ( a AST ) bool { for _ , v := range seen { if v == a { return true } } seen = append ( seen , a ) return false } if r := a . Copy ( simplifyOne , skip ) ; r != nil { return r } return a }
// simplify replaces template parameters with their expansions, and
// merges qualifiers.
simplify replaces template parameters with their expansions and merges qualifiers .