summaryrefslogtreecommitdiff
path: root/python/types.py
diff options
context:
space:
mode:
authorGlenn Smith <glenn@vector35.com>2023-02-20 21:58:55 -0500
committerGlenn Smith <glenn@vector35.com>2023-11-06 16:10:47 -0500
commit4108964609171327618627477163339656037111 (patch)
tree79f4c6da6394b973cee05cc42b6edd7e2e20909d /python/types.py
parentb270d7ebe1e2a406e1f7f14807987d24b0c4a846 (diff)
Type Containers
Diffstat (limited to 'python/types.py')
-rw-r--r--python/types.py28
1 files changed, 21 insertions, 7 deletions
diff --git a/python/types.py b/python/types.py
index 96532a4d..9fbe7a93 100644
--- a/python/types.py
+++ b/python/types.py
@@ -37,6 +37,7 @@ from . import variable
from . import architecture
from . import binaryview
from . import platform as _platform
+from . import typecontainer
from . import typelibrary
from . import typeparser
@@ -47,7 +48,7 @@ ParamsType = Union[List['Type'], List['FunctionParameter'], List[Tuple[str, 'Typ
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']
+TypeContainerType = Union['binaryview.BinaryView', 'typelibrary.TypeLibrary']
NameSpaceType = Optional[Union[str, List[str], 'NameSpace']]
TypeParserResult = typeparser.TypeParserResult
# The following are needed to prevent the type checker from getting
@@ -515,7 +516,7 @@ class BoolWithConfidence:
@dataclass
class MutableTypeBuilder(Generic[TB]):
type: TB
- container: TypeContainer
+ container: TypeContainerType
name: QualifiedName
platform: Optional['_platform.Platform']
confidence: int
@@ -601,7 +602,7 @@ class TypeBuilder:
@classmethod
def builder(
- cls: typing.Type[TB], container: TypeContainer, name: 'QualifiedName', user: bool = True, platform: Optional['_platform.Platform'] = None,
+ cls: typing.Type[TB], container: TypeContainerType, name: 'QualifiedName', user: bool = True, platform: Optional['_platform.Platform'] = None,
confidence: int = core.max_confidence
) -> 'MutableTypeBuilder[TB]':
return MutableTypeBuilder(cls.create(), container, name, platform, confidence, user)
@@ -1997,7 +1998,7 @@ class Type:
return result
def get_lines(
- self, bv: 'binaryview.BinaryView', name: str, line_width: int = 80, collapsed: bool = False,
+ self, bv: Union['binaryview.BinaryView', 'typecontainer.TypeContainer'], name: str, line_width: int = 80, collapsed: bool = False,
escaping: TokenEscapingType = TokenEscapingType.NoTokenEscapingType
) -> List['TypeDefinitionLine']:
"""
@@ -2014,7 +2015,13 @@ class Type:
:rtype: :py:class:`TypeDefinitionLine`
"""
count = ctypes.c_ulonglong()
- core_lines = core.BNGetTypeLines(self._handle, bv.handle, name, line_width, collapsed, escaping, count)
+ if isinstance(bv, (binaryview.BinaryView,)):
+ container = bv.type_container
+ elif isinstance(bv, (typecontainer.TypeContainer,)):
+ container = bv
+ else:
+ assert False, "Unexpected type container type"
+ core_lines = core.BNGetTypeLines(self._handle, container.handle, name, line_width, collapsed, escaping, count)
assert core_lines is not None, "core.BNGetTypeLines returned None"
lines = []
for i in range(count.value):
@@ -2526,10 +2533,17 @@ class StructureType(Type):
def type(self) -> StructureVariant:
return StructureVariant(core.BNGetStructureType(self.struct_handle))
- def members_including_inherited(self, view: 'binaryview.BinaryView') -> List[InheritedStructureMember]:
+ def members_including_inherited(self, view: Union['binaryview.BinaryView', 'typecontainer.TypeContainer']) -> List[InheritedStructureMember]:
"""Returns structure member list, including those inherited by base structures"""
count = ctypes.c_ulonglong()
- members = core.BNGetStructureMembersIncludingInherited(self.struct_handle, view.handle, count)
+ if isinstance(view, (binaryview.BinaryView,)):
+ container = view.type_container
+ elif isinstance(view, (typecontainer.TypeContainer,)):
+ container = view
+ else:
+ assert False, "Unexpected type container type"
+
+ members = core.BNGetStructureMembersIncludingInherited(self.struct_handle, container.handle, count)
assert members is not None, "core.BNGetInheritedStructureMembers returned None"
try:
result = []