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)