summaryrefslogtreecommitdiff
path: root/typeparser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'typeparser.cpp')
-rw-r--r--typeparser.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/typeparser.cpp b/typeparser.cpp
index 8351de2f..c93c03b3 100644
--- a/typeparser.cpp
+++ b/typeparser.cpp
@@ -46,6 +46,7 @@ void TypeParser::Register(TypeParser* parser)
{
BNTypeParserCallbacks cb;
cb.context = parser;
+ cb.getOptionText = GetOptionTextCallback;
cb.preprocessSource = PreprocessSourceCallback;
cb.parseTypesFromSource = ParseTypesFromSourceCallback;
cb.parseTypeString = ParseTypeStringCallback;
@@ -56,6 +57,27 @@ void TypeParser::Register(TypeParser* parser)
}
+bool TypeParser::GetOptionText(BNTypeParserOption option, std::string value, std::string& result) const
+{
+ // Default: Don't accept anything
+ return false;
+}
+
+
+bool TypeParser::GetOptionTextCallback(void* ctxt, BNTypeParserOption option, const char* value,
+ char** result)
+{
+ TypeParser* parser = (TypeParser*)ctxt;
+ string resultCpp;
+ if (!parser->GetOptionText(option, value, resultCpp))
+ {
+ return false;
+ }
+ *result = BNAllocString(resultCpp.c_str());
+ return true;
+}
+
+
bool TypeParser::PreprocessSourceCallback(void* ctxt,
const char* source, const char* fileName, BNPlatform* platform,
const BNQualifiedNameTypeAndId* existingTypes, size_t existingTypeCount,
@@ -295,6 +317,17 @@ CoreTypeParser::CoreTypeParser(BNTypeParser* parser): TypeParser(parser)
}
+bool CoreTypeParser::GetOptionText(BNTypeParserOption option, std::string value, std::string& result) const
+{
+ char* apiResult;
+ if (!BNGetTypeParserOptionText(m_object, option, value.c_str(), &apiResult))
+ return false;
+ result = apiResult;
+ BNFreeString(apiResult);
+ return true;
+}
+
+
bool CoreTypeParser::PreprocessSource(const std::string& source, const std::string& fileName,
Ref<Platform> platform, const std::map<QualifiedName, TypeAndId>& existingTypes,
const std::vector<std::string>& options, const std::vector<std::string>& includeDirs,