py_ast.py 文件源码

python
阅读 21 收藏 0 点赞 0 评论 0

项目:vizgen 作者: uva-graphics 项目源码 文件源码
def visit_child_nodes(self, node, visit_func=None, seen_ids=None):
        if visit_func is None:
            visit_func = self.visit
        for field, value in ast.iter_fields(node):
            if isinstance(value, list):
                for i in range(len(value)):
                    item = value[i]
                    if isinstance(item, ast.AST):
                        if self.make_unique:
                            if id(item) in seen_ids:
                                if hasattr(item, 'parent'):
                                    item.parent = None
                                if hasattr(item, 'parent_functiondef'):
                                    item.parent_functiondef = None
                                if hasattr(item, 'parent_functionname'):
                                    item.parent_functionname = None
                                item = copy.deepcopy(item)
                                value[i] = item
                                setattr(node, field, value)
                            seen_ids.add(id(item))
                        visit_func(item)
#            elif isinstance(value, ast.expr_context):
#                print('found context', value)
#                if self.make_unique:
#                    print('cloning context', value)
#                    value = copy.deepcopy(value)
#                    setattr(node, field, value)
#                visit_func(value)
            elif isinstance(value, ast.AST):
                if self.make_unique:
                    if id(value) in seen_ids:
                        if hasattr(value, 'parent'):
                            value.parent = None
                        if hasattr(value, 'parent_functiondef'):
                            value.parent_functiondef = None
                        if hasattr(value, 'parent_functionname'):
                            value.parent_functionname = None
                        value = copy.deepcopy(value)
                        seen_ids.add(id(value))
                        setattr(node, field, value)
                    else:
                        seen_ids.add(id(value))
                visit_func(value)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号