Skip to content

Commit 66f654d

Browse files
committed
Minor DemangledTypeNode cleanup
1 parent de4fbe2 commit 66f654d

2 files changed

Lines changed: 37 additions & 71 deletions

File tree

demangler/gnu3/demangled_type_node.cpp

Lines changed: 34 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
#endif
1919
#include "base/assertions.h"
2020
#include <algorithm>
21-
#include <cinttypes>
22-
#include <cstdint>
2321

2422
#ifdef BINARYNINJACORE_LIBRARY
2523
using namespace BinaryNinjaCore;
@@ -109,14 +107,14 @@ namespace
109107
return empty;
110108
}
111109

112-
static size_t ResolveAddressWidth(Platform* platform)
110+
static size_t ResolveAddressWidth(const Platform* platform)
113111
{
114112
if (platform)
115113
return platform->GetAddressSize();
116114
return 8;
117115
}
118116

119-
static size_t ResolveDefaultIntegerWidth(Platform* platform)
117+
static size_t ResolveDefaultIntegerWidth(const Platform* platform)
120118
{
121119
if (platform)
122120
{
@@ -131,7 +129,7 @@ namespace
131129
return 4;
132130
}
133131

134-
static Ref<CallingConvention> ResolveCallingConvention(BNCallingConventionName cc, Platform* platform)
132+
static Ref<CallingConvention> ResolveCallingConvention(BNCallingConventionName cc, const Platform* platform)
135133
{
136134
#ifndef BINARYNINJACORE_LIBRARY
137135
Ref<Architecture> platformArch;
@@ -152,45 +150,40 @@ namespace
152150
case CdeclCallingConvention:
153151
if (platform)
154152
{
155-
auto platformCC = platform->GetCdeclCallingConvention();
156-
if (platformCC)
153+
if (auto platformCC = platform->GetCdeclCallingConvention())
157154
return platformCC;
158155
}
159156
if (arch)
160157
{
161-
auto archCC = arch->GetCdeclCallingConvention();
162-
if (archCC)
158+
if (auto archCC = arch->GetCdeclCallingConvention())
163159
return archCC;
164160
}
165161
return arch ? arch->GetCallingConventionByName("cdecl") : nullptr;
166162
case STDCallCallingConvention:
167163
if (platform)
168164
{
169-
auto platformCC = platform->GetStdcallCallingConvention();
170-
if (platformCC)
165+
if (auto platformCC = platform->GetStdcallCallingConvention())
171166
return platformCC;
172167
}
173168
if (arch)
174169
{
175-
auto archCC = arch->GetStdcallCallingConvention();
176-
if (archCC)
170+
if (auto archCC = arch->GetStdcallCallingConvention())
177171
return archCC;
178172
}
179173
return arch ? arch->GetCallingConventionByName("stdcall") : nullptr;
180174
case FastcallCallingConvention:
181175
if (platform)
182176
{
183-
auto platformCC = platform->GetFastcallCallingConvention();
184-
if (platformCC)
177+
if (auto platformCC = platform->GetFastcallCallingConvention())
185178
return platformCC;
186179
}
187180
if (arch)
188181
{
189-
auto archCC = arch->GetFastcallCallingConvention();
190-
if (archCC)
182+
if (auto archCC = arch->GetFastcallCallingConvention())
191183
return archCC;
184+
return arch->GetCallingConventionByName("fastcall");
192185
}
193-
return arch ? arch->GetCallingConventionByName("fastcall") : nullptr;
186+
return nullptr;
194187
case ThisCallCallingConvention:
195188
if (arch)
196189
return arch->GetCallingConventionByName("thiscall");
@@ -539,7 +532,7 @@ DemangledTypeNode DemangledTypeNode::PostfixType(NodeRef child, string suffix)
539532

540533
DemangledTypeNode DemangledTypeNode::PostfixType(NodeRef child, string separator, NodeRef suffixType)
541534
{
542-
DemangledTypeNode n = PostfixType(child, std::move(separator));
535+
DemangledTypeNode n = PostfixType(std::move(child), std::move(separator));
543536
if (auto payload = std::get_if<PostfixPayload>(&n.m_payload))
544537
payload->suffixType = std::move(suffixType);
545538
return n;
@@ -566,7 +559,7 @@ uint8_t DemangledTypeNode::PointerSuffixBit(BNPointerSuffix ps)
566559
}
567560

568561

569-
size_t DemangledTypeNode::ResolveWidth(size_t width, WidthKind widthKind, Platform* platform)
562+
size_t DemangledTypeNode::ResolveWidth(size_t width, WidthKind widthKind, const Platform* platform)
570563
{
571564
switch (widthKind)
572565
{
@@ -681,7 +674,7 @@ bool DemangledTypeNode::AddQualifiersToPointerChild(bool cnst, bool vltl)
681674

682675
if (!*childType)
683676
return true;
684-
if ((*childType).use_count() > 1)
677+
if (childType->use_count() > 1)
685678
*childType = CreateSharedCopy(**childType);
686679
if (cnst)
687680
(*childType)->SetConst(true);
@@ -764,12 +757,8 @@ void DemangledTypeNode::SetCallingConventionName(BNCallingConventionName cc)
764757

765758
bool DemangledTypeNode::HasTemplateArguments() const
766759
{
767-
const auto* payload = std::get_if<NamedTypePayload>(&m_payload);
768-
if (!payload)
769-
return false;
770-
for (const auto& segment: payload->name)
771-
if (segment.HasTemplateArguments())
772-
return true;
760+
if (const auto* payload = std::get_if<NamedTypePayload>(&m_payload))
761+
return std::ranges::any_of(payload->name, &DemangledNamePart::HasTemplateArguments);
773762
return false;
774763
}
775764

@@ -813,11 +802,11 @@ bool DemangledTypeNode::IsStructurallyEqual(const DemangledTypeNode& other) cons
813802
};
814803

815804
if (std::get_if<VoidPayload>(&m_payload))
816-
return true;
805+
return std::get_if<VoidPayload>(&other.m_payload);
817806
if (std::get_if<BoolPayload>(&m_payload))
818-
return true;
807+
return std::get_if<BoolPayload>(&other.m_payload);
819808
if (std::get_if<VarArgsPayload>(&m_payload))
820-
return true;
809+
return std::get_if<VarArgsPayload>(&other.m_payload);
821810
if (auto payload = std::get_if<IntegerPayload>(&m_payload))
822811
{
823812
auto otherPayload = std::get_if<IntegerPayload>(&other.m_payload);
@@ -885,17 +874,17 @@ bool DemangledTypeNode::IsStructurallyEqual(const DemangledTypeNode& other) cons
885874
StringList DemangledTypeNode::RenderTypeNameSegments(Platform* platform) const
886875
{
887876
StringList result;
888-
if (auto payload = std::get_if<PostfixPayload>(&m_payload))
877+
if (std::get_if<PostfixPayload>(&m_payload))
889878
{
890879
result.push_back(GetString(platform));
891880
return result;
892881
}
893-
auto payload = std::get_if<NamedTypePayload>(&m_payload);
894-
if (!payload)
895-
return result;
896-
result.reserve(payload->name.size());
897-
for (const auto& segment: payload->name)
898-
result.push_back(segment.GetString(platform));
882+
if (auto payload = std::get_if<NamedTypePayload>(&m_payload))
883+
{
884+
result.reserve(payload->name.size());
885+
for (const auto& segment: payload->name)
886+
result.push_back(segment.GetString(platform));
887+
}
899888
return result;
900889
}
901890

@@ -936,11 +925,9 @@ void DemangledTypeNode::AppendPostfixType(string& out, Platform* platform) const
936925

937926
void DemangledTypeNode::AppendModifiers(string& out) const
938927
{
939-
if (m_const && m_volatile)
940-
out += " const volatile";
941-
else if (m_const)
928+
if (m_const)
942929
out += " const";
943-
else if (m_volatile)
930+
if (m_volatile)
944931
out += " volatile";
945932
}
946933

@@ -1178,12 +1165,6 @@ void DemangledTypeNode::AppendBeforeName(string& out, const DemangledTypeNode* p
11781165
}
11791166

11801167

1181-
static string FormatArrayCount(uint64_t elements)
1182-
{
1183-
return string(fmt::format("{:#x}", elements));
1184-
}
1185-
1186-
11871168
void DemangledTypeNode::AppendAfterName(string& out, const DemangledTypeNode* parentType, Platform* platform) const
11881169
{
11891170
switch (GetPayloadClass())
@@ -1234,7 +1215,7 @@ void DemangledTypeNode::AppendAfterName(string& out, const DemangledTypeNode* pa
12341215
const auto& payload = std::get<ArrayPayload>(m_payload);
12351216
if (parentType && parentType->GetPayloadClass() == PointerTypeClass)
12361217
out += ")";
1237-
out += "[" + FormatArrayCount(payload.elements) + "]";
1218+
out += fmt::bnformat("[{:#x}]", payload.elements);
12381219
if (payload.childType)
12391220
payload.childType->AppendAfterName(out, this, platform);
12401221
break;
@@ -1247,9 +1228,8 @@ void DemangledTypeNode::AppendAfterName(string& out, const DemangledTypeNode* pa
12471228

12481229
void DemangledTypeNode::AppendString(string& out, Platform* platform) const
12491230
{
1250-
size_t beforeEnd = out.size();
12511231
AppendBeforeName(out, nullptr, platform);
1252-
beforeEnd = out.size(); // track where "before" ends
1232+
size_t beforeEnd = out.size(); // track where "before" ends
12531233

12541234
string after;
12551235
AppendAfterName(after, nullptr, platform);
@@ -1269,12 +1249,6 @@ void DemangledTypeNode::AppendString(string& out, Platform* platform) const
12691249
}
12701250

12711251

1272-
string DemangledTypeNode::GetString() const
1273-
{
1274-
return GetString(nullptr);
1275-
}
1276-
1277-
12781252
string DemangledTypeNode::GetString(Platform* platform) const
12791253
{
12801254
string out;
@@ -1283,12 +1257,6 @@ string DemangledTypeNode::GetString(Platform* platform) const
12831257
}
12841258

12851259

1286-
string DemangledTypeNode::GetTypeAndName(const StringList& name) const
1287-
{
1288-
return GetTypeAndName(name, nullptr);
1289-
}
1290-
1291-
12921260
string DemangledTypeNode::GetTypeAndName(const StringList& name, Platform* platform) const
12931261
{
12941262
const string before = GetStringBeforeName(platform);
@@ -1425,14 +1393,14 @@ Ref<Type> DemangledTypeNode::Finalize(Platform* platform) const
14251393
if (payload.implicitThisParameterType)
14261394
{
14271395
Ref<Type> thisType = payload.implicitThisParameterType->Finalize(platform);
1428-
finalParams.push_back({"this", thisType->WithConfidence(payload.implicitThisParameterType->GetValueConfidence()),
1429-
DefaultLocationSource, Variable()});
1396+
finalParams.emplace_back("this", thisType->WithConfidence(payload.implicitThisParameterType->GetValueConfidence()),
1397+
DefaultLocationSource, Variable());
14301398
}
14311399
for (auto& p : payload.params)
14321400
{
14331401
Ref<Type> pType = p.type ? p.type->Finalize(platform) : Ref<Type>(Type::VoidType());
14341402
uint8_t pTypeConfidence = p.type ? p.type->GetValueConfidence() : BN_FULL_CONFIDENCE;
1435-
finalParams.push_back({p.name, pType->WithConfidence(pTypeConfidence), DefaultLocationSource, Variable()});
1403+
finalParams.emplace_back(p.name, pType->WithConfidence(pTypeConfidence), DefaultLocationSource, Variable());
14361404
}
14371405
Confidence<Ref<CallingConvention>> callingConvention;
14381406
if (payload.callingConventionName != NoCallingConvention)
@@ -1454,7 +1422,7 @@ Ref<Type> DemangledTypeNode::Finalize(Platform* platform) const
14541422

14551423
case NamedTypeReferenceClass:
14561424
{
1457-
if (auto payload = std::get_if<PostfixPayload>(&m_payload))
1425+
if (std::get_if<PostfixPayload>(&m_payload))
14581426
{
14591427
QualifiedName name(RenderTypeNameSegments(platform));
14601428
TypeBuilder tb = TypeBuilder::NamedType(

demangler/gnu3/demangled_type_node.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,12 +181,10 @@ class DemangledTypeNode
181181
void SetImplicitThisParameter(DemangledTypeNode type);
182182

183183
void AppendString(_STD_STRING& out, BN::Platform* platform) const;
184-
_STD_STRING GetString() const;
185-
_STD_STRING GetString(BN::Platform* platform) const;
184+
_STD_STRING GetString(BN::Platform* platform = nullptr) const;
186185
_STD_STRING GetStringBeforeName(BN::Platform* platform) const;
187186
_STD_STRING GetStringAfterName(BN::Platform* platform) const;
188-
_STD_STRING GetTypeAndName(const StringList& name) const;
189-
_STD_STRING GetTypeAndName(const StringList& name, BN::Platform* platform) const;
187+
_STD_STRING GetTypeAndName(const StringList& name, BN::Platform* platform = nullptr) const;
190188

191189
BN::Ref<BN::Type> Finalize(BN::Platform* platform = nullptr) const;
192190

@@ -276,7 +274,7 @@ class DemangledTypeNode
276274
uint8_t GetValueConfidence() const;
277275
BNTypeClass GetPayloadClass() const;
278276
NodeRef GetPrimaryChild() const;
279-
static size_t ResolveWidth(size_t width, WidthKind widthKind, BN::Platform* platform = nullptr);
277+
static size_t ResolveWidth(size_t width, WidthKind widthKind, const BN::Platform* platform = nullptr);
280278

281279
BNNameType m_nameType;
282280
uint8_t m_pointerSuffixBits;

0 commit comments

Comments
 (0)