diff options
Diffstat (limited to 'typeparser.cpp')
| -rw-r--r-- | typeparser.cpp | 33 |
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, |
