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/.
Index ¶
- Variables
- func ASTToString(a AST, options ...Option) string
- func Filter(name string, options ...Option) 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 ExprList
- type FixedType
- type Fold
- type FunctionParam
- type FunctionType
- type GlobalCDtor
- type ImaginaryType
- type InitializerList
- type Literal
- type MethodWithQualifiers
- type Name
- type New
- type Nullary
- type Operator
- type Option
- type PackExpansion
- type PointerType
- type PtrMem
- type Qualified
- 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.
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.
// 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 ¶
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 MethodWithQualifiers ¶
type MethodWithQualifiers struct {
Method AST
Qualifiers Qualifiers
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 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 ¶
type TypeWithQualifiers struct {
Base AST
Qualifiers Qualifiers
}
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)