summaryrefslogtreecommitdiff
path: root/type.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2015-09-04 20:12:16 -0400
committerRusty Wagner <rusty@vector35.com>2015-09-04 20:12:16 -0400
commit78ffcbed6e9153efccb85564a911e4ed90ffb634 (patch)
treeed95d97e1016a59471aba0b6841e295d57501c9e /type.cpp
parentfd5865d110b484e7841713a679024c78ca4105c9 (diff)
Add type classes to Python API
Diffstat (limited to 'type.cpp')
-rw-r--r--type.cpp74
1 files changed, 6 insertions, 68 deletions
diff --git a/type.cpp b/type.cpp
index d1322c1b..45967c6c 100644
--- a/type.cpp
+++ b/type.cpp
@@ -60,6 +60,12 @@ Ref<Type> Type::GetChildType() const
}
+BNCallingConvention Type::GetCallingConvention() const
+{
+ return BNGetTypeCallingConvention(m_type);
+}
+
+
vector<NameAndType> Type::GetParameters() const
{
size_t count;
@@ -386,71 +392,3 @@ bool BinaryNinja::PreprocessSource(const string& source, const string& fileName,
delete[] includeDirList;
return result;
}
-
-
-bool BinaryNinja::ParseTypesFromSource(Architecture* arch, const string& source, const string& fileName,
- map<string, Ref<Type>>& types, map<string, Ref<Type>>& variables,
- map<string, Ref<Type>>& functions, string& errors,
- const vector<string>& includeDirs)
-{
- BNTypeParserResult result;
- char* errorStr;
- const char** includeDirList = new const char*[includeDirs.size()];
-
- for (size_t i = 0; i < includeDirs.size(); i++)
- includeDirList[i] = includeDirs[i].c_str();
-
- types.clear();
- variables.clear();
- functions.clear();
-
- bool ok = BNParseTypesFromSource(arch->GetArchitectureObject(), source.c_str(), fileName.c_str(), &result,
- &errorStr, includeDirList, includeDirs.size());
- errors = errorStr;
- BNFreeString(errorStr);
- if (!ok)
- return false;
-
- for (size_t i = 0; i < result.typeCount; i++)
- types[result.types[i].name] = new Type(BNNewTypeReference(result.types[i].type));
- for (size_t i = 0; i < result.variableCount; i++)
- types[result.variables[i].name] = new Type(BNNewTypeReference(result.variables[i].type));
- for (size_t i = 0; i < result.functionCount; i++)
- types[result.functions[i].name] = new Type(BNNewTypeReference(result.functions[i].type));
- BNFreeTypeParserResult(&result);
- return true;
-}
-
-
-bool BinaryNinja::ParseTypesFromSourceFile(Architecture* arch, const string& fileName,
- map<string, Ref<Type>>& types, map<string, Ref<Type>>& variables,
- map<string, Ref<Type>>& functions, string& errors,
- const vector<string>& includeDirs)
-{
- BNTypeParserResult result;
- char* errorStr;
- const char** includeDirList = new const char*[includeDirs.size()];
-
- for (size_t i = 0; i < includeDirs.size(); i++)
- includeDirList[i] = includeDirs[i].c_str();
-
- types.clear();
- variables.clear();
- functions.clear();
-
- bool ok = BNParseTypesFromSourceFile(arch->GetArchitectureObject(), fileName.c_str(), &result,
- &errorStr, includeDirList, includeDirs.size());
- errors = errorStr;
- BNFreeString(errorStr);
- if (!ok)
- return false;
-
- for (size_t i = 0; i < result.typeCount; i++)
- types[result.types[i].name] = new Type(BNNewTypeReference(result.types[i].type));
- for (size_t i = 0; i < result.variableCount; i++)
- variables[result.variables[i].name] = new Type(BNNewTypeReference(result.variables[i].type));
- for (size_t i = 0; i < result.functionCount; i++)
- functions[result.functions[i].name] = new Type(BNNewTypeReference(result.functions[i].type));
- BNFreeTypeParserResult(&result);
- return true;
-}