def ast_pprint(root, cur_ind=0, ind_val=4, string=None):
    _buf = []

    def _ast_pprint(_root, _cur_ind):
        if not hasattr(_root, "children"):
            _buf.append(str(_root))
        else:
            if _root.children:
                _buf.append("%sNode(type='%s'):" % (' ' * _cur_ind * ind_val,
                                                    _root.type))
                for c in _root.children:
                    _ast_pprint(c, _cur_ind + 1)
            else:
                msg = "%sNode(type='%s'" % (' ' * _cur_ind * ind_val,
                                            _root.type)
                if _root.value is not None:
                    msg += ", value=%r)" % _root.value
                else:
                    msg += ")"
                _buf.append(msg)

    _ast_pprint(root, cur_ind)
    if string is None:
        print("\n".join(_buf))
    else:
        string.write("\n".join(_buf))
L{searchFileForAll} returns a list of all addresses associated with the
dataset/ETHPy150Open cournape/Bento/bento/parser/nodes.py/ast_pprint--crossover with--dataset/ETHPy150Open nlloyd/SubliminalCollaborator/libs/twisted/names/test/test_hosts.py/SearchHostsFileForAllTests.test_allAddresses