summaryrefslogtreecommitdiff
path: root/python/__init__.py
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2016-09-03 01:32:35 -0400
committerRusty Wagner <rusty@vector35.com>2016-09-03 01:32:35 -0400
commit50cafb19ae59ba48fea2e7bd0c79a2e9473c2c86 (patch)
treef8025ed9b2f7adc6a3cdfd04cd46cb3fdda2ead7 /python/__init__.py
parent75f597bb8fcd58315537f1dcd9802bbaadcdbd36 (diff)
Adding APIs to ensure IL is available for upcoming caching methods
Diffstat (limited to 'python/__init__.py')
-rw-r--r--python/__init__.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/python/__init__.py b/python/__init__.py
index d199385a..cd559fe5 100644
--- a/python/__init__.py
+++ b/python/__init__.py
@@ -4330,8 +4330,11 @@ class Function(object):
def __init__(self, view, handle):
self._view = view
self.handle = core.handle_of_type(handle, core.BNFunction)
+ self._advanced_analysis_requests = 0
def __del__(self):
+ if self._advanced_analysis_requests > 0:
+ core.BNReleaseAdvancedFunctionAnalysisDataMultiple(self.handle, self._advanced_analysis_requests)
core.BNFreeFunction(self.handle)
@property
@@ -4726,6 +4729,41 @@ class Function(object):
"""
core.BNReanalyzeFunction(self.handle)
+ def request_advanced_analysis_data(self):
+ core.BNRequestAdvancedFunctionAnalysisData(self.handle)
+ self._advanced_analysis_requests += 1
+
+ def release_advanced_analysis_data(self):
+ core.BNReleaseAdvancedFunctionAnalysisData(self.handle)
+ self._advanced_analysis_requests -= 1
+
+class AdvancedFunctionAnalysisDataRequestor(object):
+ def __init__(self, func = None):
+ self._function = func
+ if self._function is not None:
+ self._function.request_advanced_analysis_data()
+
+ def __del__(self):
+ if self._function is not None:
+ self._function.release_advanced_analysis_data()
+
+ @property
+ def function(self):
+ return self._function
+
+ @function.setter
+ def function(self, func):
+ if self._function is not None:
+ self._function.release_advanced_analysis_data()
+ self._function = func
+ if self._function is not None:
+ self._function.request_advanced_analysis_data()
+
+ def close(self):
+ if self._function is not None:
+ self._function.release_advanced_analysis_data()
+ self._function = None
+
class BasicBlockEdge:
def __init__(self, branch_type, target, arch):
self.type = core.BNBranchType_names[branch_type]