Пример #1
0
 def get_ctx(self, flags):
     if flags == 'OP_DELETE':
         return _ast.Del()
     elif flags == 'OP_APPLY':
         return _ast.Load()
     elif flags == 'OP_ASSIGN':
         return _ast.Store()
     else:
         # FIXME Exception here
         assert False, repr(flags)
Пример #2
0
    def visit_Subscript(self, node):
        ctx = self.get_ctx(node.flags)
        subs = [self.visit(s) for s in node.subs]

        advanced = (_ast.Slice, _ast.Ellipsis)
        slices = []
        nonindex = False
        for sub in subs:
            if isinstance(sub, advanced):
                nonindex = True
                slices.append(sub)
            else:
                slices.append(self._new(_ast.Index, sub))
        if len(slices) == 1:
            slice = slices[0]
        elif nonindex:
            slice = self._new(_ast.ExtSlice, slices)
        else:
            slice = self._new(_ast.Tuple, slices, _ast.Load())

        self.out_flags = node.flags
        return self._new(_ast.Subscript, self.visit(node.expr), slice, ctx)
Пример #3
0
 def visit_List(self, node):
     nodes = [self.visit(n) for n in node.nodes]
     return self._new(_ast.List, nodes, _ast.Load())
Пример #4
0
 def visit_Tuple(self, node):
     nodes = [self.visit(n) for n in node.nodes]
     return self._new(_ast.Tuple, nodes, _ast.Load())
Пример #5
0
 def visit_Getattr(self, node):
     return self._new(_ast.Attribute, self.visit(node.expr), node.attrname,
                      _ast.Load())
Пример #6
0
 def visit_Name(self, node):
     return self._new(_ast.Name, node.name, _ast.Load())