MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / DemangleNestedName

Method DemangleNestedName

demangler/gnu3/demangle_gnu3.cpp:1677–1814  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1675
1676
1677TypeBuilder DemangleGNU3::DemangleNestedName()
1678{
1679 /*
1680 This can be either a qualified name like: "foo::bar::bas"
1681 or it can be a qualified type like: "foo::bar::bas & const" thus we return either
1682 a name or a type.
1683
1684 <nested-name> ::= N [<CV-qualifiers>] [<ref-qualifier>] <prefix> <unqualified-name> E
1685 ::= N [<CV-qualifiers>] [<ref-qualifier>] <template-prefix> <template-args> E
1686
1687 <prefix> ::= <unqualified-name> # global class or namespace
1688 ::= <prefix> <unqualified-name> # nested class or namespace
1689 ::= <template-prefix> <template-args> # class template specialization
1690 ::= <template-param> # template type parameter
1691 ::= <decltype> # decltype qualifier
1692 ::= <prefix> <data-member-prefix> # initializer of a data member
1693 ::= <substitution>
1694
1695 <template-prefix> ::= <template unqualified-name> # global template
1696 ::= <prefix> <template unqualified-name> # nested template
1697 ::= <template-param> # template template parameter
1698 ::= <substitution>
1699
1700 <unqualified-name> ::= <operator-name>
1701 ::= <ctor-dtor-name>
1702 ::= <source-name>
1703 ::= <unnamed-type-name>
1704
1705 <source-name> ::= <positive length number> <identifier>
1706 <identifier> ::= <unqualified source code identifier>
1707 */
1708
1709 indent();
1710 MyLogDebug("%s:: '%s'\n", __FUNCTION__, m_reader.GetRaw().c_str());
1711 TypeBuilder type = TypeBuilder::NamedType(NamedTypeReference::GenerateAutoDemangledTypeReference(
1712 UnknownNamedTypeClass, QualifiedName()));
1713 bool cnst = false, vltl = false, rstrct = false;
1714 bool ref = false;
1715 bool rvalueRef = false;
1716 bool substitute = true;
1717 TypeBuilder newType;
1718 bool base = false;
1719 bool isTemplate = false;
1720 bool hasB = false;
1721 //[<CV-qualifiers>]
1722 DemangleCVQualifiers(cnst, vltl, rstrct);
1723
1724 //[<ref-qualifier>]
1725 if (m_reader.Peek() == 'R')
1726 {
1727 m_reader.Consume();
1728 ref = true;
1729 }
1730 else if (m_reader.Peek() == 'O')
1731 {
1732 m_reader.Consume();
1733 ref = true;
1734 rvalueRef = true;

Callers

nothing calls this directly

Calls 15

MyLogDebugFunction · 0.85
ExtendTypeNameFunction · 0.85
GetTemplateStringFunction · 0.85
c_strMethod · 0.80
UnReadMethod · 0.80
StringSizeMethod · 0.80
GetTypeReferenceClassMethod · 0.80
GetNamedTypeReferenceMethod · 0.80
DemangleExceptionClass · 0.70
QualifiedNameClass · 0.50
GetRawMethod · 0.45
PeekMethod · 0.45

Tested by

no test coverage detected