From 2111f1f77241c938b30bd3cf2851919094429dd6 Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Sun, 14 May 2017 09:41:28 -0400 Subject: Expose some core API's for the demangling and type creation --- type.cpp | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) (limited to 'type.cpp') diff --git a/type.cpp b/type.cpp index 66138001..32da27d2 100644 --- a/type.cpp +++ b/type.cpp @@ -279,6 +279,42 @@ bool Type::IsFloat() const } +BNMemberScope Type::GetScope() const +{ + return BNTypeGetMemberScope(m_object); +} + + +void Type::SetScope(BNMemberScope scope) +{ + return BNTypeSetMemberScope(m_object, scope); +} + + +BNMemberAccess Type::GetAccess() const +{ + return BNTypeGetMemberAccess(m_object); +} + + +void Type::SetAccess(BNMemberAccess access) +{ + return BNTypeSetMemberAccess(m_object, access); +} + + +void Type::SetConst(bool cnst) +{ + BNTypeSetConst(m_object, cnst); +} + + +void Type::SetVolatile(bool vltl) +{ + BNTypeSetVolatile(m_object, vltl); +} + + Ref Type::GetChildType() const { BNType* type = BNGetChildType(m_object); @@ -547,6 +583,12 @@ Ref Type::PointerType(Architecture* arch, Type* type, bool cnst, bool vltl } +Ref Type::PointerType(size_t width, Type* type, bool cnst, bool vltl, BNReferenceType refType) +{ + return new Type(BNCreatePointerTypeOfWidth(width, type->GetObject(), cnst, vltl, refType)); +} + + Ref Type::ArrayType(Type* type, uint64_t elem) { return new Type(BNCreateArrayType(type->GetObject(), elem)); @@ -608,6 +650,43 @@ string Type::GetAutoDemangledTypeIdSource() } +string Type::GenerateAutoDebugTypeId(const QualifiedName& name) +{ + BNQualifiedName nameObj = name.GetAPIObject(); + char* str = BNGenerateAutoDebugTypeId(&nameObj); + string result = str; + QualifiedName::FreeAPIObject(&nameObj); + BNFreeString(str); + return result; +} + + +string Type::GetAutoDebugTypeIdSource() +{ + char* str = BNGetAutoDebugTypeIdSource(); + string result = str; + BNFreeString(str); + return result; +} + + +QualifiedName Type::GetTypeName() const +{ + BNQualifiedName name = BNTypeGetTypeName(m_object); + QualifiedName result = QualifiedName::FromAPIObject(&name); + BNFreeQualifiedName(&name); + return result; +} + + +void Type::SetTypeName(const QualifiedName& names) +{ + BNQualifiedName nameObj = names.GetAPIObject(); + BNTypeSetTypeName(m_object, &nameObj); + QualifiedName::FreeAPIObject(&nameObj); +} + + NamedTypeReference::NamedTypeReference(BNNamedTypeReference* nt) { m_object = nt; @@ -691,12 +770,26 @@ Ref NamedTypeReference::GenerateAutoDemangledTypeReference(B } +Ref NamedTypeReference::GenerateAutoDebugTypeReference(BNNamedTypeReferenceClass cls, + const QualifiedName& name) +{ + string id = Type::GenerateAutoDebugTypeId(name); + return new NamedTypeReference(cls, id, name); +} + + Structure::Structure() { m_object = BNCreateStructure(); } +Structure::Structure(BNStructureType type, bool isUnion, bool packed) +{ + m_object = BNCreateStructureWithOptions(type, isUnion, packed); +} + + Structure::Structure(BNStructure* s) { m_object = s; @@ -801,6 +894,12 @@ Enumeration::Enumeration(BNEnumeration* e) } +Enumeration::Enumeration() +{ + m_object = BNCreateEnumeration(); +} + + vector Enumeration::GetMembers() const { size_t count; -- cgit v1.3.1