'Get predecessors of a node in the control flow graph.
:param CFGNode cfgnode:             The node.
:param bool excluding_fakeret:      True if you want to exclude all predecessors that is connected to the node
with a fakeret edge.
:param str or None jumpkind:        Only return predecessors with the specified jumpkind. This argument will be
ignored if set to None.
:return:                            A list of predecessors
:rtype:                             list'

def get_predecessors(self, cfgnode, excluding_fakeret=True, jumpkind=None):

    if (excluding_fakeret and (jumpkind == 'Ijk_FakeRet')):
        return []
    if ((not excluding_fakeret) and (jumpkind is None)):
        if (cfgnode in self._graph):
            return self._graph.predecessors(cfgnode)
        return []
    predecessors = []
    for (pred, _, data) in self._graph.in_edges_iter([cfgnode], data=True):
        jk = data['jumpkind']
        if (jumpkind is not None):
            if (jk == jumpkind):
                predecessors.append(pred)
        elif excluding_fakeret:
            if (jk != 'Ijk_FakeRet'):
                predecessors.append(pred)
        else:
            predecessors.append(pred)
    return predecessors
