summaryrefslogtreecommitdiff
path: root/platform.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2017-06-23 18:36:37 -0400
committerRusty Wagner <rusty@vector35.com>2017-06-23 18:36:37 -0400
commitc51f3bed6bdef577253feee0e85a71fda1931bd7 (patch)
tree1cf26ff28e0b9bfb6bfbed044ba7ca520d63f862 /platform.cpp
parent4b988c0d24c8d8c8dc67485f3aaeb7106eb4af18 (diff)
parentcca0fe6ea60eb7f6b35cc433a6fff96cc65b3ff8 (diff)
Merge branch 'dev'
Diffstat (limited to 'platform.cpp')
-rw-r--r--platform.cpp151
1 files changed, 150 insertions, 1 deletions
diff --git a/platform.cpp b/platform.cpp
index 7a6571cc..2a095da2 100644
--- a/platform.cpp
+++ b/platform.cpp
@@ -1,4 +1,4 @@
-// Copyright (c) 2015-2016 Vector 35 LLC
+// Copyright (c) 2015-2017 Vector 35 LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
@@ -253,3 +253,152 @@ Ref<Platform> Platform::GetAssociatedPlatformByAddress(uint64_t& addr)
return nullptr;
return new Platform(platform);
}
+
+
+map<QualifiedName, Ref<Type>> Platform::GetTypes()
+{
+ size_t count;
+ BNQualifiedNameAndType* types = BNGetPlatformTypes(m_object, &count);
+
+ map<QualifiedName, Ref<Type>> result;
+ for (size_t i = 0; i < count; i++)
+ {
+ QualifiedName name = QualifiedName::FromAPIObject(&types[i].name);
+ result[name] = new Type(BNNewTypeReference(types[i].type));
+ }
+
+ BNFreeTypeList(types, count);
+ return result;
+}
+
+
+map<QualifiedName, Ref<Type>> Platform::GetVariables()
+{
+ size_t count;
+ BNQualifiedNameAndType* types = BNGetPlatformVariables(m_object, &count);
+
+ map<QualifiedName, Ref<Type>> result;
+ for (size_t i = 0; i < count; i++)
+ {
+ QualifiedName name = QualifiedName::FromAPIObject(&types[i].name);
+ result[name] = new Type(BNNewTypeReference(types[i].type));
+ }
+
+ BNFreeTypeList(types, count);
+ return result;
+}
+
+
+map<QualifiedName, Ref<Type>> Platform::GetFunctions()
+{
+ size_t count;
+ BNQualifiedNameAndType* types = BNGetPlatformFunctions(m_object, &count);
+
+ map<QualifiedName, Ref<Type>> result;
+ for (size_t i = 0; i < count; i++)
+ {
+ QualifiedName name = QualifiedName::FromAPIObject(&types[i].name);
+ result[name] = new Type(BNNewTypeReference(types[i].type));
+ }
+
+ BNFreeTypeList(types, count);
+ return result;
+}
+
+
+map<uint32_t, QualifiedNameAndType> Platform::GetSystemCalls()
+{
+ size_t count;
+ BNSystemCallInfo* calls = BNGetPlatformSystemCalls(m_object, &count);
+
+ map<uint32_t, QualifiedNameAndType> result;
+ for (size_t i = 0; i < count; i++)
+ {
+ QualifiedNameAndType nt;
+ nt.name = QualifiedName::FromAPIObject(&calls[i].name);
+ nt.type = new Type(BNNewTypeReference(calls[i].type));
+ result[calls[i].number] = nt;
+ }
+
+ BNFreeSystemCallList(calls, count);
+ return result;
+}
+
+
+Ref<Type> Platform::GetTypeByName(const QualifiedName& name)
+{
+ BNQualifiedName nameObj = name.GetAPIObject();
+ BNType* type = BNGetPlatformTypeByName(m_object, &nameObj);
+ QualifiedName::FreeAPIObject(&nameObj);
+ if (!type)
+ return nullptr;
+ return new Type(type);
+}
+
+
+Ref<Type> Platform::GetVariableByName(const QualifiedName& name)
+{
+ BNQualifiedName nameObj = name.GetAPIObject();
+ BNType* type = BNGetPlatformVariableByName(m_object, &nameObj);
+ QualifiedName::FreeAPIObject(&nameObj);
+ if (!type)
+ return nullptr;
+ return new Type(type);
+}
+
+
+Ref<Type> Platform::GetFunctionByName(const QualifiedName& name)
+{
+ BNQualifiedName nameObj = name.GetAPIObject();
+ BNType* type = BNGetPlatformFunctionByName(m_object, &nameObj);
+ QualifiedName::FreeAPIObject(&nameObj);
+ if (!type)
+ return nullptr;
+ return new Type(type);
+}
+
+
+string Platform::GetSystemCallName(uint32_t n)
+{
+ char* str = BNGetPlatformSystemCallName(m_object, n);
+ string result = str;
+ BNFreeString(str);
+ return result;
+}
+
+
+Ref<Type> Platform::GetSystemCallType(uint32_t n)
+{
+ BNType* type = BNGetPlatformSystemCallType(m_object, n);
+ if (!type)
+ return nullptr;
+ return new Type(type);
+}
+
+
+string Platform::GenerateAutoPlatformTypeId(const QualifiedName& name)
+{
+ BNQualifiedName nameObj = name.GetAPIObject();
+ char* str = BNGenerateAutoPlatformTypeId(m_object, &nameObj);
+ string result = str;
+ QualifiedName::FreeAPIObject(&nameObj);
+ BNFreeString(str);
+ return result;
+}
+
+
+Ref<NamedTypeReference> Platform::GenerateAutoPlatformTypeReference(BNNamedTypeReferenceClass cls,
+ const QualifiedName& name)
+{
+ string id = GenerateAutoPlatformTypeId(name);
+ return new NamedTypeReference(cls, id, name);
+}
+
+
+string Platform::GetAutoPlatformTypeIdSource()
+{
+ char* str = BNGetAutoPlatformTypeIdSource(m_object);
+ string result = str;
+ BNFreeString(str);
+ return result;
+}