Beispiel #1
0
    def visit_Member(self, node):
        # For clauses that wrap around another clause, like
        # WithoutMember, reorient the target and iter before recursing.
        handled = False

        # <target> in <expr> - {<elem>}
        if (isinstance(node.iter, L.BinOp) and isinstance(node.iter.op, L.Sub)
                and isinstance(node.iter.right, L.Set)
                and len(node.iter.right.elts) == 1):
            inner_clause = L.Member(node.target, node.iter.left)
            node = L.WithoutMember(inner_clause, node.iter.right.elts[0])
            handled = True

        node = self.generic_visit(node)
        if handled:
            return node

        # <vars> in {<elem>}
        if (L.is_tuple_of_names(node.target) and isinstance(node.iter, L.Set)
                and len(node.iter.elts) == 1):
            return L.SingMember(L.detuplify(node.target), node.iter.elts[0])

        return node
Beispiel #2
0
 def singletonize(self, cl, value):
     return L.SingMember(self.lhs_vars(cl), value)