summaryrefslogtreecommitdiff
path: root/type.cpp
diff options
context:
space:
mode:
authorGlenn Smith <glenn@vector35.com>2022-02-15 20:08:06 -0500
committerGlenn Smith <glenn@vector35.com>2022-02-16 15:32:39 -0500
commit925323f286e2ff2b866c2c65cdcc342cafa4afe7 (patch)
tree0540cb24a37fad76fa46d20af49c0a6ac402b916 /type.cpp
parentff9ee07f19597d90ac68d0bd04ab58947f2e604f (diff)
Escape type names and definitions
Closes #2427, #2585, #1658, #1632, probably others
Diffstat (limited to 'type.cpp')
-rw-r--r--type.cpp56
1 files changed, 37 insertions, 19 deletions
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<int64_t> 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<InstructionTextToken> Type::GetTokens(Platform* platform, uint8_t baseConfidence) const
+vector<InstructionTextToken> 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<InstructionTextToken> Type::GetTokensBeforeName(Platform* platform, uint8_t baseConfidence) const
+vector<InstructionTextToken> 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<InstructionTextToken> Type::GetTokensAfterName(Platform* platform, uint8_t baseConfidence) const
+vector<InstructionTextToken> 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<InstructionTextToken>& t
std::vector<TypeDefinitionLine> Type::GetLines(Ref<BinaryView> 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<TypeDefinitionLine> results;
for (size_t i = 0; i < count; i++)