Skip to content

Commit

Permalink
Switch TypeParser to use TypeContainer for its external type source
Browse files Browse the repository at this point in the history
  • Loading branch information
CouleeApps committed Apr 3, 2024
1 parent 6c514ea commit 6320364
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 162 deletions.
28 changes: 14 additions & 14 deletions binaryninjaapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -14572,22 +14572,22 @@ namespace BinaryNinja {
static bool GetOptionTextCallback(void* ctxt, BNTypeParserOption option, const char* value, char** result);
static bool PreprocessSourceCallback(void* ctxt,
const char* source, const char* fileName, BNPlatform* platform,
const BNQualifiedNameTypeAndId* existingTypes, size_t existingTypeCount,
BNTypeContainer* existingTypes,
const char* const* options, size_t optionCount,
const char* const* includeDirs, size_t includeDirCount,
char** output, BNTypeParserError** errors, size_t* errorCount
);
static bool ParseTypesFromSourceCallback(void* ctxt,
const char* source, const char* fileName, BNPlatform* platform,
const BNQualifiedNameTypeAndId* existingTypes, size_t existingTypeCount,
BNTypeContainer* existingTypes,
const char* const* options, size_t optionCount,
const char* const* includeDirs, size_t includeDirCount,
const char* autoTypeSource, BNTypeParserResult* result,
BNTypeParserError** errors, size_t* errorCount
);
static bool ParseTypeStringCallback(void* ctxt,
const char* source, BNPlatform* platform,
const BNQualifiedNameTypeAndId* existingTypes, size_t existingTypeCount,
BNTypeContainer* existingTypes,
BNQualifiedNameAndType* result,
BNTypeParserError** errors, size_t* errorCount
);
Expand Down Expand Up @@ -14629,7 +14629,7 @@ namespace BinaryNinja {
\param source Source code to process
\param fileName Name of the file containing the source (does not need to exist on disk)
\param platform Platform to assume the source is relevant to
\param existingTypes Map of all existing types to use for parsing context
\param existingTypes Container of all existing types to use for parsing context
\param options String arguments to pass as options, e.g. command line arguments
\param includeDirs List of directories to include in the header search path
\param output Reference to a string into which the preprocessed source will be written
Expand All @@ -14640,7 +14640,7 @@ namespace BinaryNinja {
const std::string& source,
const std::string& fileName,
Ref<Platform> platform,
const std::map<QualifiedName, TypeAndId>& existingTypes,
std::optional<TypeContainer> existingTypes,
const std::vector<std::string>& options,
const std::vector<std::string>& includeDirs,
std::string& output,
Expand All @@ -14652,7 +14652,7 @@ namespace BinaryNinja {
\param source Source code to parse
\param fileName Name of the file containing the source (optional: exists on disk)
\param platform Platform to assume the types are relevant to
\param existingTypes Map of all existing types to use for parsing context
\param existingTypes Container of all existing types to use for parsing context
\param options String arguments to pass as options, e.g. command line arguments
\param includeDirs List of directories to include in the header search path
\param autoTypeSource Optional source of types if used for automatically generated types
Expand All @@ -14664,7 +14664,7 @@ namespace BinaryNinja {
const std::string& source,
const std::string& fileName,
Ref<Platform> platform,
const std::map<QualifiedName, TypeAndId>& existingTypes,
std::optional<TypeContainer> existingTypes,
const std::vector<std::string>& options,
const std::vector<std::string>& includeDirs,
const std::string& autoTypeSource,
Expand All @@ -14676,7 +14676,7 @@ namespace BinaryNinja {
Parse an entire source file into types, variables, and functions
\param fileName Name of the file on disk containing the source
\param platform Platform to assume the types are relevant to
\param existingTypes Map of all existing types to use for parsing context
\param existingTypes Container of all existing types to use for parsing context
\param options String arguments to pass as options, e.g. command line arguments
\param includeDirs List of directories to include in the header search path
\param autoTypeSource Optional source of types if used for automatically generated types
Expand All @@ -14687,7 +14687,7 @@ namespace BinaryNinja {
bool ParseTypesFromSourceFile(
const std::string& fileName,
Ref<Platform> platform,
const std::map<QualifiedName, TypeAndId>& existingTypes,
std::optional<TypeContainer> existingTypes,
const std::vector<std::string>& options,
const std::vector<std::string>& includeDirs,
const std::string& autoTypeSource,
Expand All @@ -14699,15 +14699,15 @@ namespace BinaryNinja {
Parse a single type and name from a string containing their definition.
\param source Source code to parse
\param platform Platform to assume the types are relevant to
\param existingTypes Map of all existing types to use for parsing context
\param existingTypes Container of all existing types to use for parsing context
\param result Reference into which the resulting type and name will be written
\param errors Reference to a list into which any parse errors will be written
\return True if parsing was successful
*/
virtual bool ParseTypeString(
const std::string& source,
Ref<Platform> platform,
const std::map<QualifiedName, TypeAndId>& existingTypes,
std::optional<TypeContainer> existingTypes,
QualifiedNameAndType& result,
std::vector<TypeParserError>& errors
) = 0;
Expand All @@ -14728,7 +14728,7 @@ namespace BinaryNinja {
const std::string& source,
const std::string& fileName,
Ref<Platform> platform,
const std::map<QualifiedName, TypeAndId>& existingTypes,
std::optional<TypeContainer> existingTypes,
const std::vector<std::string>& options,
const std::vector<std::string>& includeDirs,
std::string& output,
Expand All @@ -14739,7 +14739,7 @@ namespace BinaryNinja {
const std::string& source,
const std::string& fileName,
Ref<Platform> platform,
const std::map<QualifiedName, TypeAndId>& existingTypes,
std::optional<TypeContainer> existingTypes,
const std::vector<std::string>& options,
const std::vector<std::string>& includeDirs,
const std::string& autoTypeSource,
Expand All @@ -14750,7 +14750,7 @@ namespace BinaryNinja {
virtual bool ParseTypeString(
const std::string& source,
Ref<Platform> platform,
const std::map<QualifiedName, TypeAndId>& existingTypes,
std::optional<TypeContainer> existingTypes,
QualifiedNameAndType& result,
std::vector<TypeParserError>& errors
) override;
Expand Down
17 changes: 9 additions & 8 deletions binaryninjacore.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@
// Current ABI version for linking to the core. This is incremented any time
// there are changes to the API that affect linking, including new functions,
// new types, or modifications to existing functions or types.
#define BN_CURRENT_CORE_ABI_VERSION 57
#define BN_CURRENT_CORE_ABI_VERSION 58

// Minimum ABI version that is supported for loading of plugins. Plugins that
// are linked to an ABI version less than this will not be able to load and
// will require rebuilding. The minimum version is increased when there are
// incompatible changes that break binary compatibility, such as changes to
// existing types or functions.
#define BN_MINIMUM_CORE_ABI_VERSION 57
#define BN_MINIMUM_CORE_ABI_VERSION 58

#ifdef __GNUC__
#ifdef BINARYNINJACORE_LIBRARY
Expand Down Expand Up @@ -2723,22 +2723,22 @@ extern "C"
bool (*getOptionText)(void* ctxt, BNTypeParserOption option, const char* value, char** result);
bool (*preprocessSource)(void* ctxt,
const char* source, const char* fileName, BNPlatform* platform,
const BNQualifiedNameTypeAndId* existingTypes, size_t existingTypeCount,
BNTypeContainer* existingTypes,
const char* const* options, size_t optionCount,
const char* const* includeDirs, size_t includeDirCount,
char** output, BNTypeParserError** errors, size_t* errorCount
);
bool (*parseTypesFromSource)(void* ctxt,
const char* source, const char* fileName, BNPlatform* platform,
const BNQualifiedNameTypeAndId* existingTypes, size_t existingTypeCount,
BNTypeContainer* existingTypes,
const char* const* options, size_t optionCount,
const char* const* includeDirs, size_t includeDirCount,
const char* autoTypeSource, BNTypeParserResult* result,
BNTypeParserError** errors, size_t* errorCount
);
bool (*parseTypeString)(void* ctxt,
const char* source, BNPlatform* platform,
const BNQualifiedNameTypeAndId* existingTypes, size_t existingTypeCount,
BNTypeContainer* existingTypes,
BNQualifiedNameAndType* result,
BNTypeParserError** errors, size_t* errorCount
);
Expand Down Expand Up @@ -3140,6 +3140,7 @@ extern "C"
TypeArchiveTypeContainerType,
DebugInfoTypeContainerType,
PlatformTypeContainerType,
OtherTypeContainerType
} BNTypeContainerType;

typedef enum BNSyncStatus
Expand Down Expand Up @@ -5987,22 +5988,22 @@ extern "C"
const char* value, char** result);
BINARYNINJACOREAPI bool BNTypeParserPreprocessSource(BNTypeParser* parser,
const char* source, const char* fileName, BNPlatform* platform,
const BNQualifiedNameTypeAndId* existingTypes, size_t existingTypeCount,
BNTypeContainer* existingTypes,
const char* const* options, size_t optionCount,
const char* const* includeDirs, size_t includeDirCount,
char** output, BNTypeParserError** errors, size_t* errorCount
);
BINARYNINJACOREAPI bool BNTypeParserParseTypesFromSource(BNTypeParser* parser,
const char* source, const char* fileName, BNPlatform* platform,
const BNQualifiedNameTypeAndId* existingTypes, size_t existingTypeCount,
BNTypeContainer* existingTypes,
const char* const* options, size_t optionCount,
const char* const* includeDirs, size_t includeDirCount,
const char* autoTypeSource, BNTypeParserResult* result,
BNTypeParserError** errors, size_t* errorCount
);
BINARYNINJACOREAPI bool BNTypeParserParseTypeString(BNTypeParser* parser,
const char* source, BNPlatform* platform,
const BNQualifiedNameTypeAndId* existingTypes, size_t existingTypeCount,
BNTypeContainer* existingTypes,
BNQualifiedNameAndType* result,
BNTypeParserError** errors, size_t* errorCount
);
Expand Down
Loading

0 comments on commit 6320364

Please sign in to comment.