diff options
| author | Peter LaFosse <peter@vector35.com> | 2021-11-09 13:19:34 -0500 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2021-11-10 10:52:49 -0500 |
| commit | f4356935159fd38d8d4d8f13d8453df850502c5e (patch) | |
| tree | 6551ae85059d98e4352a711fd2d271653c1ad722 /python | |
| parent | c434ca4346a39a392ccf05cd75f61c6398c0d299 (diff) | |
Add support for passing list of types to StructureBuilder\StructureType .create()
Diffstat (limited to 'python')
| -rw-r--r-- | python/types.py | 11 |
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) |
