var ErrNotMangledName = errors.New("not a C++ mangled name")
ErrNotMangledName is returned by CheckedDemangle if the string does not appear to be a C++ symbol name.
func ASTToString(a AST, options ...Option) string
ASTToString returns the demangled name of the AST.
func Filter(name string, options ...Option) string
Filter demangles a C++ symbol name, returning the human-readable C++ name. If any error occurs during demangling, the input string is returned.
func ToString(name string, options ...Option) (string, error)
ToString demangles a C++ symbol name, returning human-readable C++ name or an error. If the name does not appear to be a C++ symbol name at all, the error will be ErrNotMangledName.
type AST interface { // Traverse each element of an AST. If the function returns // false, traversal of children of that element is skipped. Traverse(func(AST) bool) // Copy an AST with possible transformations. // If the skip function returns true, no copy is required. // If the copy function returns nil, no copy is required. // Otherwise the AST returned by copy is used in a copy of the full AST. // Copy itself returns either a copy or nil. Copy(copy func(AST) AST, skip func(AST) bool) AST // Implement the fmt.GoStringer interface. GoString() string // contains filtered or unexported methods }
AST is an abstract syntax tree representing a C++ declaration. This is sufficient for the demangler but is by no means a general C++ AST.
func ToAST(name string, options ...Option) (AST, error)
ToAST demangles a C++ symbol name into an abstract syntax tree representing the symbol. If the NoParams option is passed, and the name has a function type, the parameter types are not demangled. If the name does not appear to be a C++ symbol name at all, the error will be ErrNotMangledName.
type ArgumentPack struct { Args []AST }
ArgumentPack is an argument pack.
func (ap *ArgumentPack) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (ap *ArgumentPack) GoString() string
func (ap *ArgumentPack) Traverse(fn func(AST) bool)
type ArrayType struct { Dimension AST Element AST }
ArrayType is an array type.
func (at *ArrayType) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (at *ArrayType) GoString() string
func (at *ArrayType) Traverse(fn func(AST) bool)
type Binary struct { Op AST Left AST Right AST }
Binary is a binary operation in an expression.
func (b *Binary) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (b *Binary) GoString() string
func (b *Binary) Traverse(fn func(AST) bool)
type BuiltinType struct { Name string }
BuiltinType is a builtin type, like "int".
func (bt *BuiltinType) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (bt *BuiltinType) GoString() string
func (bt *BuiltinType) Traverse(fn func(AST) bool)
type Cast struct { To AST }
Cast is a type cast.
func (c *Cast) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (c *Cast) GoString() string
func (c *Cast) Traverse(fn func(AST) bool)
type Clone struct { Base AST Suffix string }
Clone is a clone of a function, with a distinguishing suffix.
func (c *Clone) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (c *Clone) GoString() string
func (c *Clone) Traverse(fn func(AST) bool)
type Closure struct { Types []AST Num int }
Closure is a closure, or lambda expression.
func (cl *Closure) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (cl *Closure) GoString() string
func (cl *Closure) Traverse(fn func(AST) bool)
type ComplexType struct { Base AST }
ComplexType is a complex type.
func (ct *ComplexType) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (ct *ComplexType) GoString() string
func (ct *ComplexType) Traverse(fn func(AST) bool)
type Constructor struct { Name AST }
Constructor is a constructor.
func (c *Constructor) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (c *Constructor) GoString() string
func (c *Constructor) Traverse(fn func(AST) bool)
type Decltype struct { Expr AST }
Decltype is the decltype operator.
func (dt *Decltype) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (dt *Decltype) GoString() string
func (dt *Decltype) Traverse(fn func(AST) bool)
type DefaultArg struct { Num int Arg AST }
DefaultArg holds a default argument for a local name.
func (da *DefaultArg) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (da *DefaultArg) GoString() string
func (da *DefaultArg) Traverse(fn func(AST) bool)
type Destructor struct { Name AST }
Destructor is a destructor.
func (d *Destructor) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (d *Destructor) GoString() string
func (d *Destructor) Traverse(fn func(AST) bool)
type ExprList struct { Exprs []AST }
ExprList is a list of expressions, typically arguments to a function call in an expression.
func (el *ExprList) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (el *ExprList) GoString() string
func (el *ExprList) Traverse(fn func(AST) bool)
type FixedType struct { Base AST Accum bool Sat bool }
FixedType is a fixed numeric type of unknown size.
func (ft *FixedType) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (ft *FixedType) GoString() string
func (ft *FixedType) Traverse(fn func(AST) bool)
type Fold struct { Left bool Op AST Arg1 AST Arg2 AST }
Fold is a C++17 fold-expression. Arg2 is nil for a unary operator.
func (f *Fold) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (f *Fold) GoString() string
func (f *Fold) Traverse(fn func(AST) bool)
type FunctionParam struct { Index int }
FunctionParam is a parameter of a function, used for last-specified return type in a closure.
func (fp *FunctionParam) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (fp *FunctionParam) GoString() string
func (fp *FunctionParam) Traverse(fn func(AST) bool)
type FunctionType struct { Return AST Args []AST }
FunctionType is a function type. The Return field may be nil for cases where the return type is not part of the mangled name.
func (ft *FunctionType) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (ft *FunctionType) GoString() string
func (ft *FunctionType) Traverse(fn func(AST) bool)
type GlobalCDtor struct { Ctor bool Key AST }
GlobalCDtor is a global constructor or destructor.
func (gcd *GlobalCDtor) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (gcd *GlobalCDtor) GoString() string
func (gcd *GlobalCDtor) Traverse(fn func(AST) bool)
type ImaginaryType struct { Base AST }
ImaginaryType is an imaginary type.
func (it *ImaginaryType) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (it *ImaginaryType) GoString() string
func (it *ImaginaryType) Traverse(fn func(AST) bool)
type InitializerList struct { Type AST Exprs AST }
InitializerList is an initializer list: an optional type with a list of expressions.
func (il *InitializerList) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (il *InitializerList) GoString() string
func (il *InitializerList) Traverse(fn func(AST) bool)
type Literal struct { Type AST Val string Neg bool }
Literal is a literal in an expression.
func (l *Literal) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (l *Literal) GoString() string
func (l *Literal) Traverse(fn func(AST) bool)
type MethodWithQualifiers struct { Method AST Qualifiers Qualifiers RefQualifier string // "" or "&" or "&&" }
MethodWithQualifiers is a method with qualifiers.
func (mwq *MethodWithQualifiers) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (mwq *MethodWithQualifiers) GoString() string
func (mwq *MethodWithQualifiers) Traverse(fn func(AST) bool)
type Name struct { Name string }
Name is an unqualified name.
func (n *Name) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (n *Name) GoString() string
func (n *Name) Traverse(fn func(AST) bool)
type New struct { Op AST Place AST Type AST Init AST }
New is a use of operator new in an expression.
func (n *New) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (n *New) GoString() string
func (n *New) Traverse(fn func(AST) bool)
type Nullary struct { Op AST }
Nullary is an operator in an expression with no arguments, such as throw.
func (n *Nullary) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (n *Nullary) GoString() string
func (n *Nullary) Traverse(fn func(AST) bool)
type Operator struct { Name string }
Operator is an operator.
func (op *Operator) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (op *Operator) GoString() string
func (op *Operator) Traverse(fn func(AST) bool)
type Option int
Option is the type of demangler options.
const ( // The NoParams option disables demangling of function parameters. NoParams Option = iota // The NoTemplateParams option disables demangling of template parameters. NoTemplateParams // The NoClones option disables inclusion of clone suffixes. // NoParams implies NoClones. NoClones // The Verbose option turns on more verbose demangling. Verbose )
type PackExpansion struct { Base AST Pack *ArgumentPack }
PackExpansion is a pack expansion. The Pack field may be nil.
func (pe *PackExpansion) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (pe *PackExpansion) GoString() string
func (pe *PackExpansion) Traverse(fn func(AST) bool)
type PointerType struct { Base AST }
PointerType is a pointer type.
func (pt *PointerType) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (pt *PointerType) GoString() string
func (pt *PointerType) Traverse(fn func(AST) bool)
type PtrMem struct { Class AST Member AST }
PtrMem is a pointer-to-member expression.
func (pm *PtrMem) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (pm *PtrMem) GoString() string
func (pm *PtrMem) Traverse(fn func(AST) bool)
type Qualified struct { Scope AST Name AST // The LocalName field is true if this is parsed as a // <local-name>. We shouldn't really need this, but in some // cases (for the unary sizeof operator) the standard // demangler prints a local name slightly differently. We // keep track of this for compatibility. LocalName bool // A full local name encoding }
Qualified is a name in a scope.
func (q *Qualified) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (q *Qualified) GoString() string
func (q *Qualified) Traverse(fn func(AST) bool)
type Qualifiers []string
Qualifiers is an ordered list of type qualifiers.
type ReferenceType struct { Base AST }
ReferenceType is a reference type.
func (rt *ReferenceType) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (rt *ReferenceType) GoString() string
func (rt *ReferenceType) Traverse(fn func(AST) bool)
type RvalueReferenceType struct { Base AST }
RvalueReferenceType is an rvalue reference type.
func (rt *RvalueReferenceType) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (rt *RvalueReferenceType) GoString() string
func (rt *RvalueReferenceType) Traverse(fn func(AST) bool)
type SizeofArgs struct { Args []AST }
SizeofArgs is the size of a captured template parameter pack from an alias template.
func (sa *SizeofArgs) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (sa *SizeofArgs) GoString() string
func (sa *SizeofArgs) Traverse(fn func(AST) bool)
type SizeofPack struct { Pack *ArgumentPack }
SizeofPack is the sizeof operator applied to an argument pack.
func (sp *SizeofPack) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (sp *SizeofPack) GoString() string
func (sp *SizeofPack) Traverse(fn func(AST) bool)
type Special struct { Prefix string Val AST }
Special is a special symbol, printed as a prefix plus another value.
func (s *Special) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (s *Special) GoString() string
func (s *Special) Traverse(fn func(AST) bool)
type Special2 struct { Prefix string Val1 AST Middle string Val2 AST }
Special2 is like special, but uses two values.
func (s *Special2) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (s *Special2) GoString() string
func (s *Special2) Traverse(fn func(AST) bool)
type TaggedName struct { Name AST Tag AST }
TaggedName is a name with an ABI tag.
func (t *TaggedName) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (t *TaggedName) GoString() string
func (t *TaggedName) Traverse(fn func(AST) bool)
type Template struct { Name AST Args []AST }
Template is a template with arguments.
func (t *Template) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (t *Template) GoString() string
func (t *Template) Traverse(fn func(AST) bool)
type TemplateParam struct { Index int Template *Template }
TemplateParam is a template parameter. The Template field is filled in while parsing the demangled string. We don't normally see these while printing--they are replaced by the simplify function.
func (tp *TemplateParam) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (tp *TemplateParam) GoString() string
func (tp *TemplateParam) Traverse(fn func(AST) bool)
type Trinary struct { Op AST First AST Second AST Third AST }
Trinary is the ?: trinary operation in an expression.
func (t *Trinary) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (t *Trinary) GoString() string
func (t *Trinary) Traverse(fn func(AST) bool)
type TypeWithQualifiers struct { Base AST Qualifiers Qualifiers }
TypeWithQualifiers is a type with standard qualifiers.
func (twq *TypeWithQualifiers) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (twq *TypeWithQualifiers) GoString() string
func (twq *TypeWithQualifiers) Traverse(fn func(AST) bool)
type Typed struct { Name AST Type AST }
Typed is a typed name.
func (t *Typed) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (t *Typed) GoString() string
func (t *Typed) Traverse(fn func(AST) bool)
type Unary struct { Op AST Expr AST Suffix bool // true for ++ -- when used as postfix SizeofType bool // true for sizeof (type) }
Unary is a unary operation in an expression.
func (u *Unary) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (u *Unary) GoString() string
func (u *Unary) Traverse(fn func(AST) bool)
type UnnamedType struct { Num int }
UnnamedType is an unnamed type, that just has an index.
func (ut *UnnamedType) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (ut *UnnamedType) GoString() string
func (ut *UnnamedType) Traverse(fn func(AST) bool)
type VectorType struct { Dimension AST Base AST }
VectorType is a vector type.
func (vt *VectorType) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (vt *VectorType) GoString() string
func (vt *VectorType) Traverse(fn func(AST) bool)
type VendorQualifier struct { Qualifier AST Type AST }
VendorQualifier is a type qualified by a vendor-specific qualifier.
func (vq *VendorQualifier) Copy(fn func(AST) AST, skip func(AST) bool) AST
func (vq *VendorQualifier) GoString() string
func (vq *VendorQualifier) Traverse(fn func(AST) bool)