loop_parallel_ast.py 文件源码

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

项目:vizgen 作者: uva-graphics 项目源码 文件源码
def is_before(node1, node2):
    """
    checks if definately appears before node2
    """

    parents1 = []
    current = node1.parent

    #first get parent_list of node1
    while current is not None:
        if isinstance(current, ast.Assign) or isinstance(current, ast.AugAssign):
            parent1 = current
            break
        parents1.append(current)
        current = current.parent

    current = node2

    if current in parents1:
        return False

    while current is not None:
        try:
            """if current.parent == parent1.parent:
                parent_field = current.parent_field
                field_list = getattr(current.parent, parent_field)
                list_index1 = field_list.index(parent1)
                list_index2 = field_list.index(current)
                if list_index2 > list_index1:
                    return True"""
            if current.parent == parent1.parent:
                for field, value in ast.iter_fields(parent1.parent):
                    if value == current or value == parent1:
                        return False
                    elif isinstance(value, list) and current in value and parent1 in value:
                        list_index1 = value.index(parent1)
                        list_index2 = value.index(current)
                        if list_index2 > list_index1:
                            return True
        except:
            return False

        current = current.parent
    return False
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号