Source code for angr.analyses.forward_analysis.job_info

from angr.analyses.cfg.cfg_job_base import BlockID, CFGJobBase


[docs]class JobInfo: """ Stores information of each job. """ def __init__(self, key: BlockID, job: CFGJobBase): self.key = key self.jobs = [(job, "")] self.narrowing_count = 0 # not used def __hash__(self): return hash((self.key,) + tuple(self.jobs)) def __eq__(self, o): return type(self) == type(o) and self.key == o.key and self.job == o.job def __repr__(self): s = "<JobInfo %s>" % (str(self.key)) return s @property def job(self) -> CFGJobBase: """ Get the latest available job. :return: The latest available job. """ job, _ = self.jobs[-1] return job @property def merged_jobs(self): for job, job_type in self.jobs: if job_type == "merged": yield job @property def widened_jobs(self): for job, job_type in self.jobs: if job_type == "widened": yield job
[docs] def add_job(self, job, merged=False, widened=False): """ Appended a new job to this JobInfo node. :param job: The new job to append. :param bool merged: Whether it is a merged job or not. :param bool widened: Whether it is a widened job or not. """ job_type = "" if merged: job_type = "merged" elif widened: job_type = "widened" self.jobs.append((job, job_type))