diff options
| author | Glenn Smith <glenn@vector35.com> | 2022-06-09 17:36:44 -0400 |
|---|---|---|
| committer | Glenn Smith <glenn@vector35.com> | 2022-11-11 16:11:47 -0500 |
| commit | 14d91ab76f7bcee588bcbb7e89639adae90c9f62 (patch) | |
| tree | 35715e66dc58015c421f4ada9e76dbf079213594 /typeparser.cpp | |
| parent | 772ab3ced92833a271db5ba05cdcfbf83b9f1880 (diff) | |
Extra options for type parsers
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, |
