Source code for angr.analyses.cfg_slice_to_sink.transitions

"""
Some utilitary functions to manage our representation of transitions:
    A dictionary, indexed by int (source addresses), which values are list of ints (target addresses).
"""


[docs]def merge_transitions(transitions, existing_transitions): """ Merge two dictionaries of transitions together. :param Dict[int,List[int]] transitions: Some transitions. :param Dict[int,List[int]] existing_transitions: Other transitions. :return Dict[int,List[int]]: The merge of the two parameters. """ def _add_to_existing(address, values): if address in existing_transitions.keys(): values += existing_transitions[address] values = list(set(values)) existing_transitions.update({address: values}) list(map(lambda x: _add_to_existing(x[0], x[1]), transitions.items())) return existing_transitions