Documentation ¶
Overview ¶
Package demangle defines functions that demangle GCC/LLVM C++ symbol names. This package recognizes names that were mangled according to the C++ ABI defined at http://codesourcery.com/cxx-abi/.
Most programs will want to call Filter or ToString.
Index ¶
- Variables
- func ASTToString(a AST, options ...Option) string
- func Demangle(name string) string
- func Filter(name string, options ...Option) string
- func MsvcFilter(name string) string
- func ToString(name string, options ...Option) (string, error)
- type AST
- type ArgumentPack
- type ArrayType
- type Binary
- type BuiltinType
- type Cast
- type Clone
- type Closure
- type ComplexType
- type Constructor
- type Decltype
- type DefaultArg
- type Destructor
- type EnableIf
- type ExprList
- type FixedType
- type Fold
- type FunctionParam
- type FunctionType
- type GlobalCDtor
- type ImaginaryType
- type InitializerList
- type LambdaAuto
- type Literal
- type MethodWithQualifiers
- type Name
- type New
- type Nullary
- type Operator
- type Option
- type PackExpansion
- type PointerType
- type PtrMem
- type Qualified
- type Qualifier
- type Qualifiers
- type ReferenceType
- type RvalueReferenceType
- type SizeofArgs
- type SizeofPack
- type Special
- type Special2
- type TaggedName
- type Template
- type TemplateParam
- type Trinary
- type TypeWithQualifiers
- type Typed
- type Unary
- type UnnamedType
- type VectorType
- type VendorQualifier
Constants ¶
This section is empty.
Variables ¶
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.
Functions ¶
func ASTToString ¶
ASTToString returns the demangled name of the AST.
func Filter ¶
Filter demangles a C++ symbol name, returning the human-readable C++ name. If any error occurs during demangling, the input string is returned.
func MsvcFilter ¶
Types ¶
type AST ¶
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. // The Copy method will do the right thing if copy returns nil // for some components of an AST but not others, so a good // copy function will only return non-nil for AST values that // need to change. // 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 ¶
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 ¶
type ArgumentPack struct {
Args []AST
}
ArgumentPack is an argument pack.
func (*ArgumentPack) GoString ¶
func (ap *ArgumentPack) GoString() string
func (*ArgumentPack) Traverse ¶
func (ap *ArgumentPack) Traverse(fn func(AST) bool)
type BuiltinType ¶
type BuiltinType struct {
Name string
}
BuiltinType is a builtin type, like "int".
func (*BuiltinType) GoString ¶
func (bt *BuiltinType) GoString() string
func (*BuiltinType) Traverse ¶
func (bt *BuiltinType) Traverse(fn func(AST) bool)
type ComplexType ¶
type ComplexType struct {
Base AST
}
ComplexType is a complex type.
func (*ComplexType) GoString ¶
func (ct *ComplexType) GoString() string
func (*ComplexType) Traverse ¶
func (ct *ComplexType) Traverse(fn func(AST) bool)
type Constructor ¶
type Constructor struct {
Name AST
}
Constructor is a constructor.
func (*Constructor) GoString ¶
func (c *Constructor) GoString() string
func (*Constructor) Traverse ¶
func (c *Constructor) Traverse(fn func(AST) bool)
type DefaultArg ¶
DefaultArg holds a default argument for a local name.
func (*DefaultArg) GoString ¶
func (da *DefaultArg) GoString() string
func (*DefaultArg) Traverse ¶
func (da *DefaultArg) Traverse(fn func(AST) bool)
type Destructor ¶
type Destructor struct {
Name AST
}
Destructor is a destructor.
func (*Destructor) GoString ¶
func (d *Destructor) GoString() string
func (*Destructor) Traverse ¶
func (d *Destructor) Traverse(fn func(AST) bool)
type ExprList ¶
type ExprList struct {
Exprs []AST
}
ExprList is a list of expressions, typically arguments to a function call in an expression.
type FunctionParam ¶
type FunctionParam struct {
Index int
}
FunctionParam is a parameter of a function, used for last-specified return type in a closure.
func (*FunctionParam) GoString ¶
func (fp *FunctionParam) GoString() string
func (*FunctionParam) Traverse ¶
func (fp *FunctionParam) Traverse(fn func(AST) bool)
type FunctionType ¶
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 (*FunctionType) GoString ¶
func (ft *FunctionType) GoString() string
func (*FunctionType) Traverse ¶
func (ft *FunctionType) Traverse(fn func(AST) bool)
type GlobalCDtor ¶
GlobalCDtor is a global constructor or destructor.
func (*GlobalCDtor) GoString ¶
func (gcd *GlobalCDtor) GoString() string
func (*GlobalCDtor) Traverse ¶
func (gcd *GlobalCDtor) Traverse(fn func(AST) bool)
type ImaginaryType ¶
type ImaginaryType struct {
Base AST
}
ImaginaryType is an imaginary type.
func (*ImaginaryType) GoString ¶
func (it *ImaginaryType) GoString() string
func (*ImaginaryType) Traverse ¶
func (it *ImaginaryType) Traverse(fn func(AST) bool)
type InitializerList ¶
InitializerList is an initializer list: an optional type with a list of expressions.
func (*InitializerList) GoString ¶
func (il *InitializerList) GoString() string
func (*InitializerList) Traverse ¶
func (il *InitializerList) Traverse(fn func(AST) bool)
type LambdaAuto ¶
type LambdaAuto struct {
Index int
}
LambdaAuto is a lambda auto parameter.
func (*LambdaAuto) GoString ¶
func (la *LambdaAuto) GoString() string
func (*LambdaAuto) Traverse ¶
func (la *LambdaAuto) Traverse(fn func(AST) bool)
type MethodWithQualifiers ¶
type MethodWithQualifiers struct { Method AST Qualifiers AST RefQualifier string // "" or "&" or "&&" }
MethodWithQualifiers is a method with qualifiers.
func (*MethodWithQualifiers) GoString ¶
func (mwq *MethodWithQualifiers) GoString() string
func (*MethodWithQualifiers) Traverse ¶
func (mwq *MethodWithQualifiers) Traverse(fn func(AST) bool)
type Nullary ¶
type Nullary struct {
Op AST
}
Nullary is an operator in an expression with no arguments, such as throw.
type Option ¶
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 ¶
type PackExpansion struct { Base AST Pack *ArgumentPack }
PackExpansion is a pack expansion. The Pack field may be nil.
func (*PackExpansion) GoString ¶
func (pe *PackExpansion) GoString() string
func (*PackExpansion) Traverse ¶
func (pe *PackExpansion) Traverse(fn func(AST) bool)
type PointerType ¶
type PointerType struct {
Base AST
}
PointerType is a pointer type.
func (*PointerType) GoString ¶
func (pt *PointerType) GoString() string
func (*PointerType) Traverse ¶
func (pt *PointerType) Traverse(fn func(AST) bool)
type Qualified ¶
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.
type Qualifier ¶
type Qualifier struct { Name string // qualifier name: const, volatile, etc. Exprs []AST // can be non-nil for noexcept and throw }
Qualifier is a single type qualifier.
type Qualifiers ¶
type Qualifiers struct {
Qualifiers []AST
}
Qualifiers is an ordered list of type qualifiers.
func (*Qualifiers) GoString ¶
func (qs *Qualifiers) GoString() string
func (*Qualifiers) Traverse ¶
func (qs *Qualifiers) Traverse(fn func(AST) bool)
type ReferenceType ¶
type ReferenceType struct {
Base AST
}
ReferenceType is a reference type.
func (*ReferenceType) GoString ¶
func (rt *ReferenceType) GoString() string
func (*ReferenceType) Traverse ¶
func (rt *ReferenceType) Traverse(fn func(AST) bool)
type RvalueReferenceType ¶
type RvalueReferenceType struct {
Base AST
}
RvalueReferenceType is an rvalue reference type.
func (*RvalueReferenceType) GoString ¶
func (rt *RvalueReferenceType) GoString() string
func (*RvalueReferenceType) Traverse ¶
func (rt *RvalueReferenceType) Traverse(fn func(AST) bool)
type SizeofArgs ¶
type SizeofArgs struct {
Args []AST
}
SizeofArgs is the size of a captured template parameter pack from an alias template.
func (*SizeofArgs) GoString ¶
func (sa *SizeofArgs) GoString() string
func (*SizeofArgs) Traverse ¶
func (sa *SizeofArgs) Traverse(fn func(AST) bool)
type SizeofPack ¶
type SizeofPack struct {
Pack *ArgumentPack
}
SizeofPack is the sizeof operator applied to an argument pack.
func (*SizeofPack) GoString ¶
func (sp *SizeofPack) GoString() string
func (*SizeofPack) Traverse ¶
func (sp *SizeofPack) Traverse(fn func(AST) bool)
type TaggedName ¶
TaggedName is a name with an ABI tag.
func (*TaggedName) GoString ¶
func (t *TaggedName) GoString() string
func (*TaggedName) Traverse ¶
func (t *TaggedName) Traverse(fn func(AST) bool)
type TemplateParam ¶
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 (*TemplateParam) GoString ¶
func (tp *TemplateParam) GoString() string
func (*TemplateParam) Traverse ¶
func (tp *TemplateParam) Traverse(fn func(AST) bool)
type TypeWithQualifiers ¶
TypeWithQualifiers is a type with standard qualifiers.
func (*TypeWithQualifiers) GoString ¶
func (twq *TypeWithQualifiers) GoString() string
func (*TypeWithQualifiers) Traverse ¶
func (twq *TypeWithQualifiers) Traverse(fn func(AST) bool)
type Unary ¶
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.
type UnnamedType ¶
type UnnamedType struct {
Num int
}
UnnamedType is an unnamed type, that just has an index.
func (*UnnamedType) GoString ¶
func (ut *UnnamedType) GoString() string
func (*UnnamedType) Traverse ¶
func (ut *UnnamedType) Traverse(fn func(AST) bool)
type VectorType ¶
VectorType is a vector type.
func (*VectorType) GoString ¶
func (vt *VectorType) GoString() string
func (*VectorType) Traverse ¶
func (vt *VectorType) Traverse(fn func(AST) bool)
type VendorQualifier ¶
VendorQualifier is a type qualified by a vendor-specific qualifier.
func (*VendorQualifier) GoString ¶
func (vq *VendorQualifier) GoString() string
func (*VendorQualifier) Traverse ¶
func (vq *VendorQualifier) Traverse(fn func(AST) bool)