From 229d6f2e760dd3c03df8bc1dcf25fbfa70b1f801 Mon Sep 17 00:00:00 2001 From: Jordan Wiens Date: Mon, 13 Feb 2023 11:12:25 -0500 Subject: add new function type property, prepare deprecation for function_type --- python/function.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'python/function.py') diff --git a/python/function.py b/python/function.py index 0c411764..d065f454 100644 --- a/python/function.py +++ b/python/function.py @@ -960,6 +960,9 @@ class Function: return None return highlevelil.HighLevelILFunction(self.arch, result, self) + #@deprecation.deprecated(details="Use .type instead.") + # Uncomment, move below the property decorator, + # and mark deprecated after the next stable @property def function_type(self) -> 'types.FunctionType': """ @@ -977,6 +980,23 @@ class Function: else: self.set_user_type(value) + @property + def type(self) -> 'types.FunctionType': + """ + Function type object, can be set with either a string representing the function prototype + (`str(function)` shows examples) or a :py:class:`Type` object + """ + return types.FunctionType(core.BNGetFunctionType(self.handle), platform=self.platform) + + @type.setter + def type(self, value: Union['types.FunctionType', str]) -> None: # type: ignore + if isinstance(value, str): + (parsed_value, new_name) = self.view.parse_type_string(value) + self.name = str(new_name) + self.set_user_type(parsed_value) + else: + self.set_user_type(value) + @property def stack_layout(self) -> List['variable.Variable']: """List of function stack variables (read-only)""" -- cgit v1.3.1