From 75f2463a46cc666e87120f3a30332fa80020b62e Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Thu, 19 Aug 2021 11:59:16 -0400 Subject: Add ability for TypeBuilder objects to utilize StructureBuilder/EnumerationBuilder/NamedTypeReferenceBuilder objects --- type.cpp | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) (limited to 'type.cpp') diff --git a/type.cpp b/type.cpp index bf7f83bd..f26dc1ea 100644 --- a/type.cpp +++ b/type.cpp @@ -1386,12 +1386,24 @@ TypeBuilder TypeBuilder::StructureType(Structure* strct) } +TypeBuilder TypeBuilder::StructureType(StructureBuilder* strct) +{ + return TypeBuilder(BNCreateStructureTypeBuilderWithBuilder(strct->GetObject())); +} + + TypeBuilder TypeBuilder::NamedType(NamedTypeReference* ref, size_t width, size_t align) { return TypeBuilder(BNCreateNamedTypeReferenceBuilder(ref->GetObject(), width, align)); } +TypeBuilder TypeBuilder::NamedType(NamedTypeReferenceBuilder* ref, size_t width, size_t align) +{ + return TypeBuilder(BNCreateNamedTypeReferenceBuilderWithBuilder(ref->GetObject(), width, align)); +} + + TypeBuilder TypeBuilder::NamedType(const QualifiedName& name, Type* type) { return NamedType("", name, type); @@ -1423,6 +1435,12 @@ TypeBuilder TypeBuilder::EnumerationType(Architecture* arch, Enumeration* enm, s } +TypeBuilder TypeBuilder::EnumerationType(Architecture* arch, EnumerationBuilder* enm, size_t width, bool isSigned) +{ + return TypeBuilder(BNCreateEnumerationTypeBuilderWithBuilder(arch->GetObject(), enm->GetObject(), width, isSigned)); +} + + TypeBuilder TypeBuilder::PointerType(Architecture* arch, const Confidence>& type, const Confidence& cnst, const Confidence& vltl, BNReferenceType refType) { @@ -1615,6 +1633,80 @@ Ref NamedTypeReference::GenerateAutoDebugTypeReference(BNNam } +NamedTypeReferenceBuilder::NamedTypeReferenceBuilder(BNNamedTypeReferenceBuilder* nt) +{ + m_object = nt; +} + + +NamedTypeReferenceBuilder::NamedTypeReferenceBuilder(BNNamedTypeReferenceClass cls, const std::string& id, + const QualifiedName& name) +{ + + BNQualifiedName n = name.GetAPIObject(); + m_object = BNCreateNamedTypeBuilder(cls, id.c_str(), &n); + QualifiedName::FreeAPIObject(&n); +} + +NamedTypeReferenceBuilder::~NamedTypeReferenceBuilder() +{ + BNFreeNamedTypeReferenceBuilder(m_object); +} + + +BNNamedTypeReferenceClass NamedTypeReferenceBuilder::GetTypeClass() const +{ + return BNGetTypeReferenceBuilderClass(m_object); +} + + +std::string NamedTypeReferenceBuilder::GetTypeId() const +{ + char* str = BNGetTypeReferenceBuilderId(m_object); + string result = str; + BNFreeString(str); + return result; +} + + +QualifiedName NamedTypeReferenceBuilder::GetName() const +{ + BNQualifiedName name = BNGetTypeReferenceBuilderName(m_object); + QualifiedName result = QualifiedName::FromAPIObject(&name); + BNFreeQualifiedName(&name); + return result; +} + + +void NamedTypeReferenceBuilder::SetTypeClass(BNNamedTypeReferenceClass type) +{ + BNSetNamedTypeReferenceBuilderTypeClass(m_object, type); +} + + +void NamedTypeReferenceBuilder::SetTypeId(const string& id) +{ + BNSetNamedTypeReferenceBuilderTypeId(m_object, id.c_str()); +} + + +void NamedTypeReferenceBuilder::SetName(const QualifiedName& name) +{ + BNQualifiedName n = name.GetAPIObject(); + BNSetNamedTypeReferenceBuilderName(m_object, &n); + QualifiedName::FreeAPIObject(&n); +} + + +Ref NamedTypeReferenceBuilder::Finalize() +{ + BNNamedTypeReference* ref = BNFinalizeNamedTypeReferenceBuilder(m_object); + if (ref) + return new NamedTypeReference(ref); + return nullptr; +} + + Structure::Structure(BNStructure* s) { m_object = s; -- cgit v1.3.1