summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binaryninjacore.h1
-rw-r--r--binaryview.cpp10
-rw-r--r--demangle.cpp4
-rw-r--r--function.cpp8
-rw-r--r--highlevelil.cpp2
-rw-r--r--mediumlevelil.cpp2
-rw-r--r--platform.cpp8
-rw-r--r--python/binaryview.py22
-rw-r--r--python/debuginfo.py2
-rw-r--r--python/demangle.py6
-rw-r--r--python/function.py4
-rw-r--r--python/highlevelil.py4
-rw-r--r--python/mediumlevelil.py4
-rw-r--r--python/platform.py8
-rw-r--r--python/typelibrary.py4
-rw-r--r--python/types.py43
-rw-r--r--python/variable.py4
-rw-r--r--type.cpp14
18 files changed, 77 insertions, 73 deletions
diff --git a/binaryninjacore.h b/binaryninjacore.h
index f76ae881..3219e63b 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -4311,6 +4311,7 @@ extern "C"
BINARYNINJACOREAPI void BNUndefineDataVariable(BNBinaryView* view, uint64_t addr);
BINARYNINJACOREAPI void BNUndefineUserDataVariable(BNBinaryView* view, uint64_t addr);
BINARYNINJACOREAPI BNDataVariable* BNGetDataVariables(BNBinaryView* view, size_t* count);
+ BINARYNINJACOREAPI void BNFreeDataVariable(BNDataVariable* var);
BINARYNINJACOREAPI void BNFreeDataVariables(BNDataVariable* vars, size_t count);
BINARYNINJACOREAPI void BNFreeDataVariableAndName(BNDataVariableAndName* var);
BINARYNINJACOREAPI void BNFreeDataVariablesAndName(BNDataVariableAndName* vars, size_t count);
diff --git a/binaryview.cpp b/binaryview.cpp
index 40e4144a..7232e647 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -1805,7 +1805,7 @@ bool BinaryView::GetDataVariableAtAddress(uint64_t addr, DataVariable& var)
return false;
var.address = result.address;
- var.type = Confidence<Ref<Type>>(new Type(BNNewTypeReference(result.type)), result.typeConfidence);
+ var.type = Confidence<Ref<Type>>(new Type(result.type), result.typeConfidence);
var.autoDiscovered = result.autoDiscovered;
return true;
}
@@ -3489,7 +3489,7 @@ Ref<Type> BinaryView::GetTypeByName(const QualifiedName& name)
if (!type)
return nullptr;
- return new Type(BNNewTypeReference(type));
+ return new Type(type);
}
@@ -3498,7 +3498,7 @@ Ref<Type> BinaryView::GetTypeByRef(Ref<NamedTypeReference> ref)
BNType* type = BNGetAnalysisTypeByRef(m_object, ref->m_object);
if (!type)
return nullptr;
- return new Type(BNNewTypeReference(type));
+ return new Type(type);
}
@@ -3507,7 +3507,7 @@ Ref<Type> BinaryView::GetTypeById(const string& id)
BNType* type = BNGetAnalysisTypeById(m_object, id.c_str());
if (!type)
return nullptr;
- return new Type(BNNewTypeReference(type));
+ return new Type(type);
}
@@ -4297,7 +4297,7 @@ Confidence<Ref<Type>> BinaryView::CreateStructureMemberFromAccess(const Qualifie
BNTypeWithConfidence type = BNCreateStructureMemberFromAccess(m_object, &typeObj, offset);
if (type.type)
- return Confidence<Ref<Type>>(new Type(BNNewTypeReference(type.type)), type.confidence);
+ return Confidence<Ref<Type>>(new Type(type.type), type.confidence);
return nullptr;
}
diff --git a/demangle.cpp b/demangle.cpp
index 9239da6d..f201e373 100644
--- a/demangle.cpp
+++ b/demangle.cpp
@@ -18,7 +18,7 @@ namespace BinaryNinja {
size_t localSize = 0;
if (!BNDemangleMS(arch->GetObject(), mangledName.c_str(), &localType, &localVarName, &localSize, simplify))
return false;
- outType = localType ? new Type(BNNewTypeReference(localType)) : nullptr;
+ outType = localType ? new Type(localType) : nullptr;
for (size_t i = 0; i < localSize; i++)
{
outVarName.push_back(localVarName[i]);
@@ -43,7 +43,7 @@ namespace BinaryNinja {
size_t localSize = 0;
if (!BNDemangleGNU3(arch->GetObject(), mangledName.c_str(), &localType, &localVarName, &localSize, simplify))
return false;
- outType = localType ? new Type(BNNewTypeReference(localType)) : nullptr;
+ outType = localType ? new Type(localType) : nullptr;
for (size_t i = 0; i < localSize; i++)
{
outVarName.push_back(localVarName[i]);
diff --git a/function.cpp b/function.cpp
index 41109dea..4be60124 100644
--- a/function.cpp
+++ b/function.cpp
@@ -794,7 +794,7 @@ Ref<Type> Function::GetType() const
Confidence<Ref<Type>> Function::GetReturnType() const
{
BNTypeWithConfidence tc = BNGetFunctionReturnType(m_object);
- Ref<Type> type = tc.type ? new Type(BNNewTypeReference(tc.type)) : nullptr;
+ Ref<Type> type = tc.type ? new Type(tc.type) : nullptr;
return Confidence<Ref<Type>>(type, tc.confidence);
}
@@ -1501,7 +1501,7 @@ Confidence<Ref<Type>> Function::GetVariableType(const Variable& var)
BNTypeWithConfidence type = BNGetVariableType(m_object, &var);
if (!type.type)
return nullptr;
- return Confidence<Ref<Type>>(new Type(BNNewTypeReference(type.type)), type.confidence);
+ return Confidence<Ref<Type>>(new Type(type.type), type.confidence);
}
@@ -1706,7 +1706,7 @@ void Function::SetUserCallRegisterStackAdjustment(
Confidence<Ref<Type>> Function::GetCallTypeAdjustment(Architecture* arch, uint64_t addr)
{
BNTypeWithConfidence result = BNGetCallTypeAdjustment(m_object, arch->GetObject(), addr);
- return Confidence<Ref<Type>>(result.type ? new Type(BNNewTypeReference(result.type)) : nullptr, result.confidence);
+ return Confidence<Ref<Type>>(result.type ? new Type(result.type) : nullptr, result.confidence);
}
@@ -1778,7 +1778,7 @@ Ref<Type> Function::GetIntegerConstantDisplayTypeEnumType(
{
BNType* apiType = BNGetIntegerConstantDisplayTypeEnumerationType(m_object, arch->GetObject(), instrAddr, value, operand);
if (apiType)
- return new Type(BNNewTypeReference(apiType));
+ return new Type(apiType);
return nullptr;
}
diff --git a/highlevelil.cpp b/highlevelil.cpp
index 6004ce08..449dcfb9 100644
--- a/highlevelil.cpp
+++ b/highlevelil.cpp
@@ -497,7 +497,7 @@ Confidence<Ref<Type>> HighLevelILFunction::GetExprType(size_t expr)
BNTypeWithConfidence result = BNGetHighLevelILExprType(m_object, expr);
if (!result.type)
return nullptr;
- return Confidence<Ref<Type>>(new Type(BNNewTypeReference(result.type)), result.confidence);
+ return Confidence<Ref<Type>>(new Type(result.type), result.confidence);
}
diff --git a/mediumlevelil.cpp b/mediumlevelil.cpp
index 2d920cd0..318d30f9 100644
--- a/mediumlevelil.cpp
+++ b/mediumlevelil.cpp
@@ -838,7 +838,7 @@ Confidence<Ref<Type>> MediumLevelILFunction::GetExprType(size_t expr)
BNTypeWithConfidence result = BNGetMediumLevelILExprType(m_object, expr);
if (!result.type)
return nullptr;
- return Confidence<Ref<Type>>(new Type(BNNewTypeReference(result.type)), result.confidence);
+ return Confidence<Ref<Type>>(new Type(result.type), result.confidence);
}
diff --git a/platform.cpp b/platform.cpp
index c4d65274..e7f3aef5 100644
--- a/platform.cpp
+++ b/platform.cpp
@@ -381,7 +381,7 @@ Ref<Type> Platform::GetTypeByName(const QualifiedName& name)
QualifiedName::FreeAPIObject(&nameObj);
if (!type)
return nullptr;
- return new Type(BNNewTypeReference(type));
+ return new Type(type);
}
@@ -392,7 +392,7 @@ Ref<Type> Platform::GetVariableByName(const QualifiedName& name)
QualifiedName::FreeAPIObject(&nameObj);
if (!type)
return nullptr;
- return new Type(BNNewTypeReference(type));
+ return new Type(type);
}
@@ -403,7 +403,7 @@ Ref<Type> Platform::GetFunctionByName(const QualifiedName& name, bool exactMatch
QualifiedName::FreeAPIObject(&nameObj);
if (!type)
return nullptr;
- return new Type(BNNewTypeReference(type));
+ return new Type(type);
}
@@ -421,7 +421,7 @@ Ref<Type> Platform::GetSystemCallType(uint32_t n)
BNType* type = BNGetPlatformSystemCallType(m_object, n);
if (!type)
return nullptr;
- return new Type(BNNewTypeReference(type));
+ return new Type(type);
}
diff --git a/python/binaryview.py b/python/binaryview.py
index 031c2886..10431078 100644
--- a/python/binaryview.py
+++ b/python/binaryview.py
@@ -4011,7 +4011,9 @@ class BinaryView:
var = core.BNDataVariable()
if not core.BNGetDataVariableAtAddress(self.handle, addr, var):
return None
- return DataVariable.from_core_struct(var, self)
+ result = DataVariable.from_core_struct(var, self)
+ core.BNFreeDataVariable(var)
+ return result
def get_functions_containing(self, addr: int,
plat: Optional['_platform.Platform'] = None) -> List['_function.Function']:
@@ -4769,7 +4771,7 @@ class BinaryView:
if not result.type:
raise Exception("BNCreateStructureMemberFromAccess failed to create struct member offsets")
- return _types.Type.create(core.BNNewTypeReference(result.type), confidence=result.confidence)
+ return _types.Type.create(result.type, confidence=result.confidence)
def add_expression_parser_magic_value(self, name: str, value: int) -> None:
"""
@@ -6388,7 +6390,9 @@ class BinaryView:
addr = var.address + core.BNGetTypeWidth(var.type)
continue
break
- return DataVariable.from_core_struct(var, self)
+ result = DataVariable.from_core_struct(var, self)
+ core.BNFreeDataVariable(var)
+ return result
def get_next_data_var_start_after(self, addr: int) -> int:
"""
@@ -6498,7 +6502,9 @@ class BinaryView:
var = core.BNDataVariable()
if not core.BNGetDataVariableAtAddress(self.handle, prev_data_var_start, var):
return None
- return DataVariable.from_core_struct(var, self)
+ result = DataVariable.from_core_struct(var, self)
+ core.BNFreeDataVariable(var)
+ return result
def get_previous_data_var_start_before(self, addr: int) -> int:
"""
@@ -6807,7 +6813,7 @@ class BinaryView:
obj = core.BNGetAnalysisTypeByName(self.handle, _name)
if not obj:
return None
- return _types.Type.create(core.BNNewTypeReference(obj), platform=self.platform)
+ return _types.Type.create(obj, platform=self.platform)
def get_type_by_id(self, id: str) -> Optional['_types.Type']:
"""
@@ -6828,7 +6834,7 @@ class BinaryView:
obj = core.BNGetAnalysisTypeById(self.handle, id)
if not obj:
return None
- return _types.Type.create(core.BNNewTypeReference(obj), platform=self.platform)
+ return _types.Type.create(obj, platform=self.platform)
def get_type_name_by_id(self, id: str) -> Optional['_types.QualifiedName']:
"""
@@ -7070,7 +7076,7 @@ class BinaryView:
)
if handle is None:
return None
- return _types.Type.create(core.BNNewTypeReference(handle), platform=self.platform)
+ return _types.Type.create(handle, platform=self.platform)
def import_library_object(self, name: str, lib: Optional[typelibrary.TypeLibrary] = None) -> Optional['_types.Type']:
"""
@@ -7101,7 +7107,7 @@ class BinaryView:
)
if handle is None:
return None
- return _types.Type.create(core.BNNewTypeReference(handle), platform=self.platform)
+ return _types.Type.create(handle, platform=self.platform)
def export_type_to_library(self, lib: typelibrary.TypeLibrary, name: Optional[str], type_obj: StringOrType) -> None:
"""
diff --git a/python/debuginfo.py b/python/debuginfo.py
index f2c1c51f..a8307cae 100644
--- a/python/debuginfo.py
+++ b/python/debuginfo.py
@@ -370,7 +370,7 @@ class DebugInfo(object):
def get_type_by_name(self, parser_name: str, name: str) -> Optional[_types.Type]:
result = core.BNGetDebugTypeByName(self.handle, parser_name, name)
if result is not None:
- return _types.Type(core.BNNewTypeReference(result))
+ return _types.Type(result)
return None
def get_data_variable_by_name(self, parser_name: str, name: str) -> Optional[Tuple[int, _types.Type]]:
diff --git a/python/demangle.py b/python/demangle.py
index d570fb78..ce57b601 100644
--- a/python/demangle.py
+++ b/python/demangle.py
@@ -89,7 +89,9 @@ def demangle_ms(archOrPlatform:Union[Architecture, Platform], mangled_name:str,
for i in range(outSize.value):
names.append(outName[i].decode('utf8')) # type: ignore
core.BNFreeDemangledName(ctypes.byref(outName), outSize.value)
- return (types.Type.create(core.BNNewTypeReference(handle)), names)
+ if not handle:
+ return (None, names)
+ return (types.Type.create(handle), names)
return (None, mangled_name)
@@ -126,7 +128,7 @@ def demangle_gnu3(arch, mangled_name, options=None):
core.BNFreeDemangledName(ctypes.byref(outName), outSize.value)
if not handle:
return (None, names)
- return (types.Type.create(core.BNNewTypeReference(handle)), names)
+ return (types.Type.create(handle), names)
return (None, mangled_name)
diff --git a/python/function.py b/python/function.py
index c35d5650..7511b809 100644
--- a/python/function.py
+++ b/python/function.py
@@ -1094,7 +1094,7 @@ class Function:
if not result.type:
return None
return types.Type.create(
- core.BNNewTypeReference(result.type), platform=self.platform, confidence=result.confidence
+ result.type, platform=self.platform, confidence=result.confidence
)
@return_type.setter
@@ -2982,7 +2982,7 @@ class Function:
if not result.type:
return None
platform = self.platform
- return types.Type.create(core.BNNewTypeReference(result.type), platform=platform, confidence=result.confidence)
+ return types.Type.create(result.type, platform=platform, confidence=result.confidence)
def get_call_stack_adjustment(
self, addr: int, arch: Optional['architecture.Architecture'] = None
diff --git a/python/highlevelil.py b/python/highlevelil.py
index 43a5c68e..8c84a646 100644
--- a/python/highlevelil.py
+++ b/python/highlevelil.py
@@ -643,7 +643,7 @@ class HighLevelILInstruction(BaseILInstruction):
if self.function.source_function:
platform = self.function.source_function.platform
return types.Type.create(
- core.BNNewTypeReference(result.type), platform=platform, confidence=result.confidence
+ result.type, platform=platform, confidence=result.confidence
)
return None
@@ -2639,7 +2639,7 @@ class HighLevelILFunction:
if self.source_function:
platform = self.source_function.platform
return types.Type.create(
- core.BNNewTypeReference(result.type), platform=platform, confidence=result.confidence
+ result.type, platform=platform, confidence=result.confidence
)
return None
diff --git a/python/mediumlevelil.py b/python/mediumlevelil.py
index c448ee9b..68cddcb8 100644
--- a/python/mediumlevelil.py
+++ b/python/mediumlevelil.py
@@ -576,7 +576,7 @@ class MediumLevelILInstruction(BaseILInstruction):
if self.function.source_function:
platform = self.function.source_function.platform
return types.Type.create(
- core.BNNewTypeReference(result.type), platform=platform, confidence=result.confidence
+ result.type, platform=platform, confidence=result.confidence
)
return None
@@ -3343,7 +3343,7 @@ class MediumLevelILFunction:
if self.source_function:
platform = self.source_function.platform
return types.Type.create(
- core.BNNewTypeReference(result.type), platform=platform, confidence=result.confidence
+ result.type, platform=platform, confidence=result.confidence
)
return None
diff --git a/python/platform.py b/python/platform.py
index b97b5ab3..ae124080 100644
--- a/python/platform.py
+++ b/python/platform.py
@@ -364,21 +364,21 @@ class Platform(metaclass=_PlatformMetaClass):
obj = core.BNGetPlatformTypeByName(self.handle, name)
if not obj:
return None
- return types.Type.create(core.BNNewTypeReference(obj), platform=self)
+ return types.Type.create(obj, platform=self)
def get_variable_by_name(self, name):
name = types.QualifiedName(name)._to_core_struct()
obj = core.BNGetPlatformVariableByName(self.handle, name)
if not obj:
return None
- return types.Type.create(core.BNNewTypeReference(obj), platform=self)
+ return types.Type.create(obj, platform=self)
def get_function_by_name(self, name, exactMatch=False):
name = types.QualifiedName(name)._to_core_struct()
obj = core.BNGetPlatformFunctionByName(self.handle, name, exactMatch)
if not obj:
return None
- return types.Type.create(core.BNNewTypeReference(obj), platform=self)
+ return types.Type.create(obj, platform=self)
def get_system_call_name(self, number):
return core.BNGetPlatformSystemCallName(self.handle, number)
@@ -387,7 +387,7 @@ class Platform(metaclass=_PlatformMetaClass):
obj = core.BNGetPlatformSystemCallType(self.handle, number)
if not obj:
return None
- return types.Type.create(core.BNNewTypeReference(obj), platform=self)
+ return types.Type.create(obj, platform=self)
def generate_auto_platform_type_id(self, name):
name = types.QualifiedName(name)._to_core_struct()
diff --git a/python/typelibrary.py b/python/typelibrary.py
index e844d419..f13fbb1a 100644
--- a/python/typelibrary.py
+++ b/python/typelibrary.py
@@ -333,7 +333,7 @@ class TypeLibrary:
t = core.BNGetTypeLibraryNamedObject(self.handle, name._to_core_struct())
if t is None:
return None
- return types.Type.create(core.BNNewTypeReference(t))
+ return types.Type.create(t)
def get_named_type(self, name: Union[str, types.QualifiedName]) -> Optional[types.Type]:
"""
@@ -349,7 +349,7 @@ class TypeLibrary:
t = core.BNGetTypeLibraryNamedType(self.handle, name._to_core_struct())
if t is None:
return None
- return types.Type.create(core.BNNewTypeReference(t))
+ return types.Type.create(t)
@property
def named_objects(self) -> Dict[types.QualifiedName, types.Type]:
diff --git a/python/types.py b/python/types.py
index e77a4499..c29f8d03 100644
--- a/python/types.py
+++ b/python/types.py
@@ -753,9 +753,7 @@ class TypeBuilder:
def child(self) -> 'Type':
type_conf = core.BNGetTypeBuilderChildType(self._handle)
assert type_conf is not None, "core.BNGetTypeBuilderChildType returned None"
- handle = core.BNNewTypeReference(type_conf.type)
- assert handle is not None, "core.BNNewTypeReference returned None"
- return Type.create(handle, self.platform, type_conf.confidence)
+ return Type.create(type_conf.type, self.platform, type_conf.confidence)
@child.setter
def child(self, value: SomeType) -> None:
@@ -1948,13 +1946,11 @@ class Type:
def with_replaced_structure(self, from_struct, to_struct):
handle = core.BNTypeWithReplacedStructure(self._handle, from_struct.handle, to_struct.handle)
- ref_handle = core.BNNewTypeReference(handle)
- return Type.create(handle=ref_handle)
+ return Type.create(handle)
def with_replaced_enumeration(self, from_enum, to_enum):
handle = core.BNTypeWithReplacedEnumeration(self._handle, from_enum.handle, to_enum.handle)
- ref_handle = core.BNNewTypeReference(handle)
- return Type.create(handle=ref_handle)
+ return Type.create(handle)
def with_replaced_named_type_reference(self, from_ref, to_ref):
return Type.create(
@@ -2180,7 +2176,7 @@ class VoidType(Type):
def create(cls, platform: Optional['_platform.Platform'] = None, confidence: int = core.max_confidence) -> 'VoidType':
core_void = core.BNCreateVoidType()
assert core_void is not None, "core.BNCreateVoidType returned None"
- return cls(core.BNNewTypeReference(core_void), platform, confidence)
+ return cls(core_void, platform, confidence)
class BoolType(Type):
@@ -2188,7 +2184,7 @@ class BoolType(Type):
def create(cls, platform: Optional['_platform.Platform'] = None, confidence: int = core.max_confidence) -> 'BoolType':
handle = core.BNCreateBoolType()
assert handle is not None, "core.BNCreateBoolType returned None"
- return cls(core.BNNewTypeReference(handle), platform, confidence)
+ return cls(handle, platform, confidence)
class IntegerType(Type):
@@ -2203,7 +2199,7 @@ class IntegerType(Type):
_sign = BoolWithConfidence.get_core_struct(sign)
handle = core.BNCreateIntegerType(width, _sign, alternate_name)
assert handle is not None, "core.BNCreateIntegerType returned None"
- return cls(core.BNNewTypeReference(handle), platform, confidence)
+ return cls(handle, platform, confidence)
@property
def signed(self) -> BoolWithConfidence:
@@ -2216,7 +2212,8 @@ class CharType(IntegerType):
def create(
cls, altname: str = "char", platform: Optional['_platform.Platform'] = None, confidence: int = core.max_confidence
) -> 'CharType':
- return cls(IntegerType.create(1, True, altname).handle, platform, confidence)
+ result = IntegerType.create(1, True, altname)
+ return cls(core.BNNewTypeReference(result.handle), platform, confidence)
class FloatType(Type):
@@ -2232,7 +2229,7 @@ class FloatType(Type):
"""
core_float = core.BNCreateFloatType(width, altname)
assert core_float is not None, "core.BNCreateFloatType returned None"
- return cls(core.BNNewTypeReference(core_float), platform, confidence)
+ return cls(core_float, platform, confidence)
class StructureType(Type):
@@ -2256,7 +2253,7 @@ class StructureType(Type):
assert core_struct is not None, "core.BNFinalizeStructureBuilder returned None"
core_type = core.BNCreateStructureType(core_struct)
assert core_type is not None, "core.BNCreateStructureType returned None"
- return cls(core.BNNewTypeReference(core_type), platform, confidence)
+ return cls(core_type, platform, confidence)
def mutable_copy(self) -> 'StructureBuilder':
type_builder_handle = core.BNCreateTypeBuilderFromType(self._handle)
@@ -2430,7 +2427,7 @@ class EnumerationType(IntegerType):
core_type = core.BNCreateEnumerationTypeOfWidth(core_enum, _width, BoolWithConfidence.get_core_struct(sign))
assert core_type is not None, "core.BNCreateEnumerationTypeOfWidth returned None"
- return cls(core.BNNewTypeReference(core_type), platform, confidence)
+ return cls(core_type, platform, confidence)
def mutable_copy(self) -> 'EnumerationBuilder':
type_builder_handle = core.BNCreateTypeBuilderFromType(self._handle)
@@ -2496,7 +2493,7 @@ class PointerType(Type):
width, type_conf, _const._to_core_struct(), _volatile._to_core_struct(), ref_type
)
assert core_type is not None, "core.BNCreatePointerTypeOfWidth returned None"
- return cls(core.BNNewTypeReference(core_type), platform, confidence)
+ return cls(core_type, platform, confidence)
def origin(self, bv: Optional['binaryview.BinaryView']) -> Optional[Tuple['QualifiedName', int]]:
ntr_handle = core.BNGetTypeNamedTypeReference(self._handle)
@@ -2515,7 +2512,7 @@ class PointerType(Type):
"""Target (read-only)"""
result = core.BNGetChildType(self._handle)
assert result is not None, "core.BNGetChildType returned None"
- return Type.create(core.BNNewTypeReference(result.type), self._platform, result.confidence)
+ return Type.create(result.type, self._platform, result.confidence)
@property
def children(self) -> List[Type]:
@@ -2530,7 +2527,7 @@ class ArrayType(Type):
type_conf = element_type._to_core_struct()
core_array = core.BNCreateArrayType(type_conf, count)
assert core_array is not None, "core.BNCreateArrayType returned None"
- return cls(core.BNNewTypeReference(core_array))
+ return cls(core_array)
@property
def count(self):
@@ -2541,7 +2538,7 @@ class ArrayType(Type):
def element_type(self) -> Type:
result = core.BNGetChildType(self._handle)
assert result is not None, "core.BNGetChildType returned None"
- return Type.create(core.BNNewTypeReference(result.type), self._platform, result.confidence)
+ return Type.create(result.type, self._platform, result.confidence)
@property
def children(self) -> List[Type]:
@@ -2616,7 +2613,7 @@ class FunctionType(Type):
)
assert func_type is not None, f"core.BNCreateFunctionType returned None {ret_conf} {conv_conf} {param_buf} {_variable_arguments} {_stack_adjust}"
- return cls(core.BNNewTypeReference(func_type), platform, confidence)
+ return cls(func_type, platform, confidence)
@property
def stack_adjustment(self) -> OffsetWithConfidence:
@@ -2630,7 +2627,7 @@ class FunctionType(Type):
result = core.BNGetChildType(self._handle)
if result is None:
return Type.void()
- return Type.create(core.BNNewTypeReference(result.type), platform=self._platform, confidence=result.confidence)
+ return Type.create(result.type, platform=self._platform, confidence=result.confidence)
@property
def calling_convention(self) -> Optional[callingconvention.CallingConvention]:
@@ -2722,7 +2719,7 @@ class NamedTypeReferenceType(Type):
_volatile = BoolWithConfidence.get_core_struct(volatile)
core_type = core.BNCreateNamedTypeReference(core_ntr, width, alignment, _const, _volatile)
assert core_type is not None, "core.BNCreateNamedTypeReference returned None"
- return cls(core.BNNewTypeReference(core_type), platform, confidence)
+ return cls(core_type, platform, confidence)
@classmethod
def create_from_type(
@@ -2746,7 +2743,7 @@ class NamedTypeReferenceType(Type):
_name = QualifiedName(name)._to_core_struct()
core_type = core.BNCreateNamedTypeReferenceFromType(view.handle, _name)
assert core_type is not None, "core.BNCreateNamedTypeReferenceFromType returned None"
- return cls(core.BNNewTypeReference(core_type), platform, confidence)
+ return cls(core_type, platform, confidence)
def __del__(self):
if core is not None:
@@ -2841,7 +2838,7 @@ class WideCharType(Type):
"""
core_type = core.BNCreateWideCharType(width, alternate_name)
assert core_type is not None, "core.BNCreateWideCharType returned None"
- return cls(core.BNNewTypeReference(core_type), platform, confidence)
+ return cls(core_type, platform, confidence)
Types = {
diff --git a/python/variable.py b/python/variable.py
index 14929557..ee0d93a4 100644
--- a/python/variable.py
+++ b/python/variable.py
@@ -728,9 +728,7 @@ class Variable(CoreVariable):
def type(self) -> Optional['binaryninja.types.Type']:
var_type_conf = core.BNGetVariableType(self._function.handle, self.to_BNVariable())
if var_type_conf.type:
- ref_handle = core.BNNewTypeReference(var_type_conf.type)
- assert ref_handle is not None, f"core.BNNewTypeReference returned None {var_type_conf} {var_type_conf.type}"
- return binaryninja.types.Type.create(ref_handle, self._function.platform, var_type_conf.confidence)
+ return binaryninja.types.Type.create(var_type_conf.type, self._function.platform, var_type_conf.confidence)
return None
@type.setter
diff --git a/type.cpp b/type.cpp
index 1c7b425e..9c5492f4 100644
--- a/type.cpp
+++ b/type.cpp
@@ -543,7 +543,7 @@ Confidence<Ref<Type>> Type::GetChildType() const
{
BNTypeWithConfidence type = BNGetChildType(m_object);
if (type.type)
- return Confidence<Ref<Type>>(new Type(BNNewTypeReference(type.type)), type.confidence);
+ return Confidence<Ref<Type>>(new Type(type.type), type.confidence);
return nullptr;
}
@@ -776,7 +776,7 @@ Ref<Type> Type::NamedType(const string& id, const QualifiedName& name, Type* typ
BNQualifiedName nameObj = name.GetAPIObject();
BNType* coreObj = BNCreateNamedTypeReferenceFromTypeAndId(id.c_str(), &nameObj, type ? type->GetObject() : nullptr);
QualifiedName::FreeAPIObject(&nameObj);
- return coreObj ? new Type(BNNewTypeReference(coreObj)) : nullptr;
+ return coreObj ? new Type(coreObj) : nullptr;
}
@@ -785,7 +785,7 @@ Ref<Type> Type::NamedType(BinaryView* view, const QualifiedName& name)
BNQualifiedName nameObj = name.GetAPIObject();
BNType* coreObj = BNCreateNamedTypeReferenceFromType(view->GetObject(), &nameObj);
QualifiedName::FreeAPIObject(&nameObj);
- return coreObj ? new Type(BNNewTypeReference(coreObj)) : nullptr;
+ return coreObj ? new Type(coreObj) : nullptr;
}
@@ -1085,7 +1085,7 @@ Ref<Type> Type::WithReplacedStructure(Structure* from, Structure* to)
BNFreeType(result);
return this;
}
- return new Type(BNNewTypeReference(result));
+ return new Type(result);
}
@@ -1097,7 +1097,7 @@ Ref<Type> Type::WithReplacedEnumeration(Enumeration* from, Enumeration* to)
BNFreeType(result);
return this;
}
- return new Type(BNNewTypeReference(result));
+ return new Type(result);
}
@@ -1109,7 +1109,7 @@ Ref<Type> Type::WithReplacedNamedTypeReference(NamedTypeReference* from, NamedTy
BNFreeType(result);
return this;
}
- return new Type(BNNewTypeReference(result));
+ return new Type(result);
}
@@ -1328,7 +1328,7 @@ Confidence<Ref<Type>> TypeBuilder::GetChildType() const
{
BNTypeWithConfidence type = BNGetTypeBuilderChildType(m_object);
if (type.type)
- return Confidence<Ref<Type>>(new Type(BNNewTypeReference(type.type)), type.confidence);
+ return Confidence<Ref<Type>>(new Type(type.type), type.confidence);
return nullptr;
}