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)
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)
def visit_List(self, node): nodes = [self.visit(n) for n in node.nodes] return self._new(_ast.List, nodes, _ast.Load())
def visit_Tuple(self, node): nodes = [self.visit(n) for n in node.nodes] return self._new(_ast.Tuple, nodes, _ast.Load())
def visit_Getattr(self, node): return self._new(_ast.Attribute, self.visit(node.expr), node.attrname, _ast.Load())
def visit_Name(self, node): return self._new(_ast.Name, node.name, _ast.Load())