Source code for angr.analyses.decompiler.decompilation_cache

from typing import Optional, Set, Dict, Tuple, Any, TYPE_CHECKING

from .clinic import Clinic
from .structured_codegen import BaseStructuredCodeGenerator

if TYPE_CHECKING:
    from angr.analyses.decompiler.optimization_passes.expr_op_swapper import OpDescriptor


[docs]class DecompilationCache: """ Caches key data structures that can be used later for refining decompilation results, such as retyping variables. """ __slots__ = ( "addr", "type_constraints", "var_to_typevar", "codegen", "clinic", "ite_exprs", "binop_operators", )
[docs] def __init__(self, addr): self.addr = addr self.type_constraints: Optional[Set] = None self.var_to_typevar: Optional[Dict] = None self.codegen: Optional[BaseStructuredCodeGenerator] = None self.clinic: Optional[Clinic] = None self.ite_exprs: Optional[Set[Tuple[int, Any]]] = None self.binop_operators: Optional[Dict["OpDescriptor", str]] = None
@property def local_types(self): return self.clinic.variable_kb.variables[self.addr].types