summaryrefslogtreecommitdiff
path: root/python/types.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/types.py')
-rw-r--r--python/types.py11
1 files changed, 9 insertions, 2 deletions
diff --git a/python/types.py b/python/types.py
index 5eba9b8d..a54bbc60 100644
--- a/python/types.py
+++ b/python/types.py
@@ -42,7 +42,7 @@ BoolWithConfidenceType = Union[bool, 'BoolWithConfidence']
SizeWithConfidenceType = Union[int, 'SizeWithConfidence']
OffsetWithConfidenceType = Union[int, 'OffsetWithConfidence']
ParamsType = Union[List['Type'], List['FunctionParameter'], List[Tuple['Type', str]]]
-MembersType = Union[List['StructureMember'], List[Tuple['Type', str]]]
+MembersType = Union[List['StructureMember'], List['Type'], List[Tuple['Type', str]]]
EnumMembersType = Union[List[Tuple[str,int]], List[str], List['EnumerationMember']]
SomeType = Union['TypeBuilder', 'Type']
TypeContainer = Union['binaryview.BinaryView', 'typelibrary.TypeLibrary']
@@ -1003,6 +1003,10 @@ class StructureBuilder(TypeBuilder):
elif isinstance(member, StructureMember):
core.BNAddStructureBuilderMemberAtOffset(structure_builder_handle, member.type._to_core_struct(),
member.name, member.offset, False, member.access, member.scope)
+ elif isinstance(member, (TypeBuilder, Type)):
+ core.BNAddStructureBuilderMember(structure_builder_handle, member._to_core_struct(), "", MemberAccess.NoAccess, MemberScope.NoScope)
+ else:
+ assert False, f"Structure member type {type(member)} not supported"
type_builder_handle = core.BNCreateStructureTypeBuilderWithBuilder(structure_builder_handle)
assert type_builder_handle is not None, "core.BNCreateStructureTypeBuilderWithBuilder returned None"
return cls(type_builder_handle, structure_builder_handle, platform, confidence)
@@ -1866,7 +1870,10 @@ class StructureType(Type):
elif isinstance(member, StructureMember):
core.BNAddStructureBuilderMemberAtOffset(builder, member.type._to_core_struct(),
member.name, member.offset, False, member.access, member.scope)
-
+ elif isinstance(member, (TypeBuilder, Type)):
+ core.BNAddStructureBuilderMember(builder, member._to_core_struct(), "", MemberAccess.NoAccess, MemberScope.NoScope)
+ else:
+ assert False, f"Structure member type {type(member)} not supported"
core_struct = core.BNFinalizeStructureBuilder(builder)
assert core_struct is not None, "core.BNFinalizeStructureBuilder returned None"
core_type = core.BNCreateStructureType(core_struct)