1818#endif
1919#include " base/assertions.h"
2020#include < algorithm>
21- #include < cinttypes>
22- #include < cstdint>
2321
2422#ifdef BINARYNINJACORE_LIBRARY
2523using 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
540533DemangledTypeNode 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
765758bool 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
885874StringList 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
937926void 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-
11871168void 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
12481229void 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-
12781252string 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-
12921260string 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 (
0 commit comments