From 925323f286e2ff2b866c2c65cdcc342cafa4afe7 Mon Sep 17 00:00:00 2001 From: Glenn Smith Date: Tue, 15 Feb 2022 20:08:06 -0500 Subject: Escape type names and definitions Closes #2427, #2585, #1658, #1632, probably others --- type.cpp | 56 +++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 19 deletions(-) (limited to 'type.cpp') diff --git a/type.cpp b/type.cpp index 475f0143..d46a9d32 100644 --- a/type.cpp +++ b/type.cpp @@ -202,7 +202,7 @@ size_t NameList::StringSize() const } -string NameList::GetString() const +string NameList::GetString(BNTokenEscapingType escaping) const { bool first = true; string out; @@ -210,11 +210,11 @@ string NameList::GetString() const { if (!first) { - out += m_join + name; + out += m_join + EscapeTypeName(name, escaping); } else { - out += name; + out += EscapeTypeName(name, escaping); } if (name.length() != 0) first = false; @@ -223,6 +223,24 @@ string NameList::GetString() const } +std::string NameList::EscapeTypeName(const std::string& name, BNTokenEscapingType escaping) +{ + char* str = BNEscapeTypeName(name.c_str(), escaping); + std::string result(str); + BNFreeString(str); + return result; +} + + +std::string NameList::UnescapeTypeName(const std::string& name, BNTokenEscapingType escaping) +{ + char* str = BNUnescapeTypeName(name.c_str(), escaping); + std::string result(str); + BNFreeString(str); + return result; +} + + BNNameList NameList::GetAPIObject() const { BNNameList result; @@ -584,65 +602,65 @@ Confidence Type::GetStackAdjustment() const } -string Type::GetString(Platform* platform) const +string Type::GetString(Platform* platform, BNTokenEscapingType escaping) const { - char* str = BNGetTypeString(m_object, platform ? platform->GetObject() : nullptr); + char* str = BNGetTypeString(m_object, platform ? platform->GetObject() : nullptr, escaping); string result = str; BNFreeString(str); return result; } -string Type::GetTypeAndName(const QualifiedName& nameList) const +string Type::GetTypeAndName(const QualifiedName& nameList, BNTokenEscapingType escaping) const { BNQualifiedName name = nameList.GetAPIObject(); - char* outName = BNGetTypeAndName(m_object, &name); + char* outName = BNGetTypeAndName(m_object, &name, escaping); QualifiedName::FreeAPIObject(&name); return outName; } -string Type::GetStringBeforeName(Platform* platform) const +string Type::GetStringBeforeName(Platform* platform, BNTokenEscapingType escaping) const { - char* str = BNGetTypeStringBeforeName(m_object, platform ? platform->GetObject() : nullptr); + char* str = BNGetTypeStringBeforeName(m_object, platform ? platform->GetObject() : nullptr, escaping); string result = str; BNFreeString(str); return result; } -string Type::GetStringAfterName(Platform* platform) const +string Type::GetStringAfterName(Platform* platform, BNTokenEscapingType escaping) const { - char* str = BNGetTypeStringAfterName(m_object, platform ? platform->GetObject() : nullptr); + char* str = BNGetTypeStringAfterName(m_object, platform ? platform->GetObject() : nullptr, escaping); string result = str; BNFreeString(str); return result; } -vector Type::GetTokens(Platform* platform, uint8_t baseConfidence) const +vector Type::GetTokens(Platform* platform, uint8_t baseConfidence, BNTokenEscapingType escaping) const { size_t count; BNInstructionTextToken* tokens = - BNGetTypeTokens(m_object, platform ? platform->GetObject() : nullptr, baseConfidence, &count); + BNGetTypeTokens(m_object, platform ? platform->GetObject() : nullptr, baseConfidence, escaping, &count); return InstructionTextToken::ConvertAndFreeInstructionTextTokenList(tokens, count); } -vector Type::GetTokensBeforeName(Platform* platform, uint8_t baseConfidence) const +vector Type::GetTokensBeforeName(Platform* platform, uint8_t baseConfidence, BNTokenEscapingType escaping) const { size_t count; BNInstructionTextToken* tokens = - BNGetTypeTokensBeforeName(m_object, platform ? platform->GetObject() : nullptr, baseConfidence, &count); + BNGetTypeTokensBeforeName(m_object, platform ? platform->GetObject() : nullptr, baseConfidence, escaping, &count); return InstructionTextToken::ConvertAndFreeInstructionTextTokenList(tokens, count); } -vector Type::GetTokensAfterName(Platform* platform, uint8_t baseConfidence) const +vector Type::GetTokensAfterName(Platform* platform, uint8_t baseConfidence, BNTokenEscapingType escaping) const { size_t count; BNInstructionTextToken* tokens = - BNGetTypeTokensAfterName(m_object, platform ? platform->GetObject() : nullptr, baseConfidence, &count); + BNGetTypeTokensAfterName(m_object, platform ? platform->GetObject() : nullptr, baseConfidence, escaping, &count); return InstructionTextToken::ConvertAndFreeInstructionTextTokenList(tokens, count); } @@ -1004,11 +1022,11 @@ bool Type::AddTypeMemberTokens(BinaryView* data, vector& t std::vector Type::GetLines(Ref data, const std::string& name, - int lineWidth, bool collapsed) + int lineWidth, bool collapsed, BNTokenEscapingType escaping) { size_t count; BNTypeDefinitionLine* list = - BNGetTypeLines(m_object, data->m_object, name.c_str(), lineWidth, collapsed, &count); + BNGetTypeLines(m_object, data->m_object, name.c_str(), lineWidth, collapsed, escaping, &count); std::vector results; for (size_t i = 0; i < count; i++) -- cgit v1.3.1