?¡ëPNG  IHDR ? f ??C1 sRGB ??¨¦ gAMA ¡À? ¨¹a pHYs ? ??o¡§d GIDATx^¨ª¨¹L¡±¡Âe¡ÂY?a?("Bh?_¨°???¡é¡ì?q5k?*:t0A-o??£¤]VkJ¡éM??f?¡À8\k2¨ªll¡ê1]q?¨´???T
Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/user1137782/www/china1.by/classwithtostring.php on line 86

Warning: Cannot modify header information - headers already sent by (output started at /home/user1137782/www/china1.by/classwithtostring.php:6) in /home/user1137782/www/china1.by/classwithtostring.php on line 213

Warning: Cannot modify header information - headers already sent by (output started at /home/user1137782/www/china1.by/classwithtostring.php:6) in /home/user1137782/www/china1.by/classwithtostring.php on line 214

Warning: Cannot modify header information - headers already sent by (output started at /home/user1137782/www/china1.by/classwithtostring.php:6) in /home/user1137782/www/china1.by/classwithtostring.php on line 215

Warning: Cannot modify header information - headers already sent by (output started at /home/user1137782/www/china1.by/classwithtostring.php:6) in /home/user1137782/www/china1.by/classwithtostring.php on line 216

Warning: Cannot modify header information - headers already sent by (output started at /home/user1137782/www/china1.by/classwithtostring.php:6) in /home/user1137782/www/china1.by/classwithtostring.php on line 217

Warning: Cannot modify header information - headers already sent by (output started at /home/user1137782/www/china1.by/classwithtostring.php:6) in /home/user1137782/www/china1.by/classwithtostring.php on line 218
PK’[0~øF88 visitor.pynuW+A„¶from compiler import ast # XXX should probably rename ASTVisitor to ASTWalker # XXX can it be made even more generic? class ASTVisitor: """Performs a depth-first walk of the AST The ASTVisitor will walk the AST, performing either a preorder or postorder traversal depending on which method is called. methods: preorder(tree, visitor) postorder(tree, visitor) tree: an instance of ast.Node visitor: an instance with visitXXX methods The ASTVisitor is responsible for walking over the tree in the correct order. For each node, it checks the visitor argument for a method named 'visitNodeType' where NodeType is the name of the node's class, e.g. Class. If the method exists, it is called with the node as its sole argument. The visitor method for a particular node type can control how child nodes are visited during a preorder walk. (It can't control the order during a postorder walk, because it is called _after_ the walk has occurred.) The ASTVisitor modifies the visitor argument by adding a visit method to the visitor; this method can be used to visit a child node of arbitrary type. """ VERBOSE = 0 def __init__(self): self.node = None self._cache = {} def default(self, node, *args): for child in node.getChildNodes(): self.dispatch(child, *args) def dispatch(self, node, *args): self.node = node klass = node.__class__ meth = self._cache.get(klass, None) if meth is None: className = klass.__name__ meth = getattr(self.visitor, 'visit' + className, self.default) self._cache[klass] = meth ## if self.VERBOSE > 0: ## className = klass.__name__ ## if self.VERBOSE == 1: ## if meth == 0: ## print "dispatch", className ## else: ## print "dispatch", className, (meth and meth.__name__ or '') return meth(node, *args) def preorder(self, tree, visitor, *args): """Do preorder walk of tree using visitor""" self.visitor = visitor visitor.visit = self.dispatch self.dispatch(tree, *args) # XXX *args make sense? class ExampleASTVisitor(ASTVisitor): """Prints examples of the nodes that aren't visited This visitor-driver is only useful for development, when it's helpful to develop a visitor incrementally, and get feedback on what you still have to do. """ examples = {} def dispatch(self, node, *args): self.node = node meth = self._cache.get(node.__class__, None) className = node.__class__.__name__ if meth is None: meth = getattr(self.visitor, 'visit' + className, 0) self._cache[node.__class__] = meth if self.VERBOSE > 1: print "dispatch", className, (meth and meth.__name__ or '') if meth: meth(node, *args) elif self.VERBOSE > 0: klass = node.__class__ if klass not in self.examples: self.examples[klass] = klass print print self.visitor print klass for attr in dir(node): if attr[0] != '_': print "\t", "%-12.12s" % attr, getattr(node, attr) print return self.default(node, *args) # XXX this is an API change _walker = ASTVisitor def walk(tree, visitor, walker=None, verbose=None): if walker is None: walker = _walker() if verbose is not None: walker.VERBOSE = verbose walker.preorder(tree, visitor) return walker.visitor def dumpNode(node): print node.__class__ for attr in dir(node): if attr[0] != '_': print "\t", "%-10.10s" % attr, getattr(node, attr) PK’[G8ou¢É¢Étransformer.pynuW+A„¶"""Parse tree transformation module. Transforms Python source code into an abstract syntax tree (AST) defined in the ast module. The simplest ways to invoke this module are via parse and parseFile. parse(buf) -> AST parseFile(path) -> AST """ # Original version written by Greg Stein (gstein@lyra.org) # and Bill Tutt (rassilon@lima.mudlib.org) # February 1997. # # Modifications and improvements for Python 2.0 by Jeremy Hylton and # Mark Hammond # # Some fixes to try to have correct line number on almost all nodes # (except Module, Discard and Stmt) added by Sylvain Thenault # # Portions of this file are: # Copyright (C) 1997-1998 Greg Stein. All Rights Reserved. # # This module is provided under a BSD-ish license. See # http://www.opensource.org/licenses/bsd-license.html # and replace OWNER, ORGANIZATION, and YEAR as appropriate. from compiler.ast import * import parser import symbol import token class WalkerError(StandardError): pass from compiler.consts import CO_VARARGS, CO_VARKEYWORDS from compiler.consts import OP_ASSIGN, OP_DELETE, OP_APPLY def parseFile(path): f = open(path, "U") # XXX The parser API tolerates files without a trailing newline, # but not strings without a trailing newline. Always add an extra # newline to the file contents, since we're going through the string # version of the API. src = f.read() + "\n" f.close() return parse(src) def parse(buf, mode="exec"): if mode == "exec" or mode == "single": return Transformer().parsesuite(buf) elif mode == "eval": return Transformer().parseexpr(buf) else: raise ValueError("compile() arg 3 must be" " 'exec' or 'eval' or 'single'") def asList(nodes): l = [] for item in nodes: if hasattr(item, "asList"): l.append(item.asList()) else: if type(item) is type( (None, None) ): l.append(tuple(asList(item))) elif type(item) is type( [] ): l.append(asList(item)) else: l.append(item) return l def extractLineNo(ast): if not isinstance(ast[1], tuple): # get a terminal node return ast[2] for child in ast[1:]: if isinstance(child, tuple): lineno = extractLineNo(child) if lineno is not None: return lineno def Node(*args): kind = args[0] if kind in nodes: try: return nodes[kind](*args[1:]) except TypeError: print nodes[kind], len(args), args raise else: raise WalkerError, "Can't find appropriate Node type: %s" % str(args) #return apply(ast.Node, args) class Transformer: """Utility object for transforming Python parse trees. Exposes the following methods: tree = transform(ast_tree) tree = parsesuite(text) tree = parseexpr(text) tree = parsefile(fileob | filename) """ def __init__(self): self._dispatch = {} for value, name in symbol.sym_name.items(): if hasattr(self, name): self._dispatch[value] = getattr(self, name) self._dispatch[token.NEWLINE] = self.com_NEWLINE self._atom_dispatch = {token.LPAR: self.atom_lpar, token.LSQB: self.atom_lsqb, token.LBRACE: self.atom_lbrace, token.BACKQUOTE: self.atom_backquote, token.NUMBER: self.atom_number, token.STRING: self.atom_string, token.NAME: self.atom_name, } self.encoding = None def transform(self, tree): """Transform an AST into a modified parse tree.""" if not (isinstance(tree, tuple) or isinstance(tree, list)): tree = parser.st2tuple(tree, line_info=1) return self.compile_node(tree) def parsesuite(self, text): """Return a modified parse tree for the given suite text.""" return self.transform(parser.suite(text)) def parseexpr(self, text): """Return a modified parse tree for the given expression text.""" return self.transform(parser.expr(text)) def parsefile(self, file): """Return a modified parse tree for the contents of the given file.""" if type(file) == type(''): file = open(file) return self.parsesuite(file.read()) # -------------------------------------------------------------- # # PRIVATE METHODS # def compile_node(self, node): ### emit a line-number node? n = node[0] if n == symbol.encoding_decl: self.encoding = node[2] node = node[1] n = node[0] if n == symbol.single_input: return self.single_input(node[1:]) if n == symbol.file_input: return self.file_input(node[1:]) if n == symbol.eval_input: return self.eval_input(node[1:]) if n == symbol.lambdef: return self.lambdef(node[1:]) if n == symbol.funcdef: return self.funcdef(node[1:]) if n == symbol.classdef: return self.classdef(node[1:]) raise WalkerError, ('unexpected node type', n) def single_input(self, node): ### do we want to do anything about being "interactive" ? # NEWLINE | simple_stmt | compound_stmt NEWLINE n = node[0][0] if n != token.NEWLINE: return self.com_stmt(node[0]) return Pass() def file_input(self, nodelist): doc = self.get_docstring(nodelist, symbol.file_input) if doc is not None: i = 1 else: i = 0 stmts = [] for node in nodelist[i:]: if node[0] != token.ENDMARKER and node[0] != token.NEWLINE: self.com_append_stmt(stmts, node) return Module(doc, Stmt(stmts)) def eval_input(self, nodelist): # from the built-in function input() ### is this sufficient? return Expression(self.com_node(nodelist[0])) def decorator_name(self, nodelist): listlen = len(nodelist) assert listlen >= 1 and listlen % 2 == 1 item = self.atom_name(nodelist) i = 1 while i < listlen: assert nodelist[i][0] == token.DOT assert nodelist[i + 1][0] == token.NAME item = Getattr(item, nodelist[i + 1][1]) i += 2 return item def decorator(self, nodelist): # '@' dotted_name [ '(' [arglist] ')' ] assert len(nodelist) in (3, 5, 6) assert nodelist[0][0] == token.AT assert nodelist[-1][0] == token.NEWLINE assert nodelist[1][0] == symbol.dotted_name funcname = self.decorator_name(nodelist[1][1:]) if len(nodelist) > 3: assert nodelist[2][0] == token.LPAR expr = self.com_call_function(funcname, nodelist[3]) else: expr = funcname return expr def decorators(self, nodelist): # decorators: decorator ([NEWLINE] decorator)* NEWLINE items = [] for dec_nodelist in nodelist: assert dec_nodelist[0] == symbol.decorator items.append(self.decorator(dec_nodelist[1:])) return Decorators(items) def decorated(self, nodelist): assert nodelist[0][0] == symbol.decorators if nodelist[1][0] == symbol.funcdef: n = [nodelist[0]] + list(nodelist[1][1:]) return self.funcdef(n) elif nodelist[1][0] == symbol.classdef: decorators = self.decorators(nodelist[0][1:]) cls = self.classdef(nodelist[1][1:]) cls.decorators = decorators return cls raise WalkerError() def funcdef(self, nodelist): # -6 -5 -4 -3 -2 -1 # funcdef: [decorators] 'def' NAME parameters ':' suite # parameters: '(' [varargslist] ')' if len(nodelist) == 6: assert nodelist[0][0] == symbol.decorators decorators = self.decorators(nodelist[0][1:]) else: assert len(nodelist) == 5 decorators = None lineno = nodelist[-4][2] name = nodelist[-4][1] args = nodelist[-3][2] if args[0] == symbol.varargslist: names, defaults, flags = self.com_arglist(args[1:]) else: names = defaults = () flags = 0 doc = self.get_docstring(nodelist[-1]) # code for function code = self.com_node(nodelist[-1]) if doc is not None: assert isinstance(code, Stmt) assert isinstance(code.nodes[0], Discard) del code.nodes[0] return Function(decorators, name, names, defaults, flags, doc, code, lineno=lineno) def lambdef(self, nodelist): # lambdef: 'lambda' [varargslist] ':' test if nodelist[2][0] == symbol.varargslist: names, defaults, flags = self.com_arglist(nodelist[2][1:]) else: names = defaults = () flags = 0 # code for lambda code = self.com_node(nodelist[-1]) return Lambda(names, defaults, flags, code, lineno=nodelist[1][2]) old_lambdef = lambdef def classdef(self, nodelist): # classdef: 'class' NAME ['(' [testlist] ')'] ':' suite name = nodelist[1][1] doc = self.get_docstring(nodelist[-1]) if nodelist[2][0] == token.COLON: bases = [] elif nodelist[3][0] == token.RPAR: bases = [] else: bases = self.com_bases(nodelist[3]) # code for class code = self.com_node(nodelist[-1]) if doc is not None: assert isinstance(code, Stmt) assert isinstance(code.nodes[0], Discard) del code.nodes[0] return Class(name, bases, doc, code, lineno=nodelist[1][2]) def stmt(self, nodelist): return self.com_stmt(nodelist[0]) small_stmt = stmt flow_stmt = stmt compound_stmt = stmt def simple_stmt(self, nodelist): # small_stmt (';' small_stmt)* [';'] NEWLINE stmts = [] for i in range(0, len(nodelist), 2): self.com_append_stmt(stmts, nodelist[i]) return Stmt(stmts) def parameters(self, nodelist): raise WalkerError def varargslist(self, nodelist): raise WalkerError def fpdef(self, nodelist): raise WalkerError def fplist(self, nodelist): raise WalkerError def dotted_name(self, nodelist): raise WalkerError def comp_op(self, nodelist): raise WalkerError def trailer(self, nodelist): raise WalkerError def sliceop(self, nodelist): raise WalkerError def argument(self, nodelist): raise WalkerError # -------------------------------------------------------------- # # STATEMENT NODES (invoked by com_node()) # def expr_stmt(self, nodelist): # augassign testlist | testlist ('=' testlist)* en = nodelist[-1] exprNode = self.lookup_node(en)(en[1:]) if len(nodelist) == 1: return Discard(exprNode, lineno=exprNode.lineno) if nodelist[1][0] == token.EQUAL: nodesl = [] for i in range(0, len(nodelist) - 2, 2): nodesl.append(self.com_assign(nodelist[i], OP_ASSIGN)) return Assign(nodesl, exprNode, lineno=nodelist[1][2]) else: lval = self.com_augassign(nodelist[0]) op = self.com_augassign_op(nodelist[1]) return AugAssign(lval, op[1], exprNode, lineno=op[2]) raise WalkerError, "can't get here" def print_stmt(self, nodelist): # print ([ test (',' test)* [','] ] | '>>' test [ (',' test)+ [','] ]) items = [] if len(nodelist) == 1: start = 1 dest = None elif nodelist[1][0] == token.RIGHTSHIFT: assert len(nodelist) == 3 \ or nodelist[3][0] == token.COMMA dest = self.com_node(nodelist[2]) start = 4 else: dest = None start = 1 for i in range(start, len(nodelist), 2): items.append(self.com_node(nodelist[i])) if nodelist[-1][0] == token.COMMA: return Print(items, dest, lineno=nodelist[0][2]) return Printnl(items, dest, lineno=nodelist[0][2]) def del_stmt(self, nodelist): return self.com_assign(nodelist[1], OP_DELETE) def pass_stmt(self, nodelist): return Pass(lineno=nodelist[0][2]) def break_stmt(self, nodelist): return Break(lineno=nodelist[0][2]) def continue_stmt(self, nodelist): return Continue(lineno=nodelist[0][2]) def return_stmt(self, nodelist): # return: [testlist] if len(nodelist) < 2: return Return(Const(None), lineno=nodelist[0][2]) return Return(self.com_node(nodelist[1]), lineno=nodelist[0][2]) def yield_stmt(self, nodelist): expr = self.com_node(nodelist[0]) return Discard(expr, lineno=expr.lineno) def yield_expr(self, nodelist): if len(nodelist) > 1: value = self.com_node(nodelist[1]) else: value = Const(None) return Yield(value, lineno=nodelist[0][2]) def raise_stmt(self, nodelist): # raise: [test [',' test [',' test]]] if len(nodelist) > 5: expr3 = self.com_node(nodelist[5]) else: expr3 = None if len(nodelist) > 3: expr2 = self.com_node(nodelist[3]) else: expr2 = None if len(nodelist) > 1: expr1 = self.com_node(nodelist[1]) else: expr1 = None return Raise(expr1, expr2, expr3, lineno=nodelist[0][2]) def import_stmt(self, nodelist): # import_stmt: import_name | import_from assert len(nodelist) == 1 return self.com_node(nodelist[0]) def import_name(self, nodelist): # import_name: 'import' dotted_as_names return Import(self.com_dotted_as_names(nodelist[1]), lineno=nodelist[0][2]) def import_from(self, nodelist): # import_from: 'from' ('.'* dotted_name | '.') 'import' ('*' | # '(' import_as_names ')' | import_as_names) assert nodelist[0][1] == 'from' idx = 1 while nodelist[idx][1] == '.': idx += 1 level = idx - 1 if nodelist[idx][0] == symbol.dotted_name: fromname = self.com_dotted_name(nodelist[idx]) idx += 1 else: fromname = "" assert nodelist[idx][1] == 'import' if nodelist[idx + 1][0] == token.STAR: return From(fromname, [('*', None)], level, lineno=nodelist[0][2]) else: node = nodelist[idx + 1 + (nodelist[idx + 1][0] == token.LPAR)] return From(fromname, self.com_import_as_names(node), level, lineno=nodelist[0][2]) def global_stmt(self, nodelist): # global: NAME (',' NAME)* names = [] for i in range(1, len(nodelist), 2): names.append(nodelist[i][1]) return Global(names, lineno=nodelist[0][2]) def exec_stmt(self, nodelist): # exec_stmt: 'exec' expr ['in' expr [',' expr]] expr1 = self.com_node(nodelist[1]) if len(nodelist) >= 4: expr2 = self.com_node(nodelist[3]) if len(nodelist) >= 6: expr3 = self.com_node(nodelist[5]) else: expr3 = None else: expr2 = expr3 = None return Exec(expr1, expr2, expr3, lineno=nodelist[0][2]) def assert_stmt(self, nodelist): # 'assert': test, [',' test] expr1 = self.com_node(nodelist[1]) if (len(nodelist) == 4): expr2 = self.com_node(nodelist[3]) else: expr2 = None return Assert(expr1, expr2, lineno=nodelist[0][2]) def if_stmt(self, nodelist): # if: test ':' suite ('elif' test ':' suite)* ['else' ':' suite] tests = [] for i in range(0, len(nodelist) - 3, 4): testNode = self.com_node(nodelist[i + 1]) suiteNode = self.com_node(nodelist[i + 3]) tests.append((testNode, suiteNode)) if len(nodelist) % 4 == 3: elseNode = self.com_node(nodelist[-1]) ## elseNode.lineno = nodelist[-1][1][2] else: elseNode = None return If(tests, elseNode, lineno=nodelist[0][2]) def while_stmt(self, nodelist): # 'while' test ':' suite ['else' ':' suite] testNode = self.com_node(nodelist[1]) bodyNode = self.com_node(nodelist[3]) if len(nodelist) > 4: elseNode = self.com_node(nodelist[6]) else: elseNode = None return While(testNode, bodyNode, elseNode, lineno=nodelist[0][2]) def for_stmt(self, nodelist): # 'for' exprlist 'in' exprlist ':' suite ['else' ':' suite] assignNode = self.com_assign(nodelist[1], OP_ASSIGN) listNode = self.com_node(nodelist[3]) bodyNode = self.com_node(nodelist[5]) if len(nodelist) > 8: elseNode = self.com_node(nodelist[8]) else: elseNode = None return For(assignNode, listNode, bodyNode, elseNode, lineno=nodelist[0][2]) def try_stmt(self, nodelist): return self.com_try_except_finally(nodelist) def with_stmt(self, nodelist): return self.com_with(nodelist) def with_var(self, nodelist): return self.com_with_var(nodelist) def suite(self, nodelist): # simple_stmt | NEWLINE INDENT NEWLINE* (stmt NEWLINE*)+ DEDENT if len(nodelist) == 1: return self.com_stmt(nodelist[0]) stmts = [] for node in nodelist: if node[0] == symbol.stmt: self.com_append_stmt(stmts, node) return Stmt(stmts) # -------------------------------------------------------------- # # EXPRESSION NODES (invoked by com_node()) # def testlist(self, nodelist): # testlist: expr (',' expr)* [','] # testlist_safe: test [(',' test)+ [',']] # exprlist: expr (',' expr)* [','] return self.com_binary(Tuple, nodelist) testlist_safe = testlist # XXX testlist1 = testlist exprlist = testlist def testlist_gexp(self, nodelist): if len(nodelist) == 2 and nodelist[1][0] == symbol.gen_for: test = self.com_node(nodelist[0]) return self.com_generator_expression(test, nodelist[1]) return self.testlist(nodelist) def test(self, nodelist): # or_test ['if' or_test 'else' test] | lambdef if len(nodelist) == 1 and nodelist[0][0] == symbol.lambdef: return self.lambdef(nodelist[0]) then = self.com_node(nodelist[0]) if len(nodelist) > 1: assert len(nodelist) == 5 assert nodelist[1][1] == 'if' assert nodelist[3][1] == 'else' test = self.com_node(nodelist[2]) else_ = self.com_node(nodelist[4]) return IfExp(test, then, else_, lineno=nodelist[1][2]) return then def or_test(self, nodelist): # and_test ('or' and_test)* | lambdef if len(nodelist) == 1 and nodelist[0][0] == symbol.lambdef: return self.lambdef(nodelist[0]) return self.com_binary(Or, nodelist) old_test = or_test def and_test(self, nodelist): # not_test ('and' not_test)* return self.com_binary(And, nodelist) def not_test(self, nodelist): # 'not' not_test | comparison result = self.com_node(nodelist[-1]) if len(nodelist) == 2: return Not(result, lineno=nodelist[0][2]) return result def comparison(self, nodelist): # comparison: expr (comp_op expr)* node = self.com_node(nodelist[0]) if len(nodelist) == 1: return node results = [] for i in range(2, len(nodelist), 2): nl = nodelist[i-1] # comp_op: '<' | '>' | '=' | '>=' | '<=' | '<>' | '!=' | '==' # | 'in' | 'not' 'in' | 'is' | 'is' 'not' n = nl[1] if n[0] == token.NAME: type = n[1] if len(nl) == 3: if type == 'not': type = 'not in' else: type = 'is not' else: type = _cmp_types[n[0]] lineno = nl[1][2] results.append((type, self.com_node(nodelist[i]))) # we need a special "compare" node so that we can distinguish # 3 < x < 5 from (3 < x) < 5 # the two have very different semantics and results (note that the # latter form is always true) return Compare(node, results, lineno=lineno) def expr(self, nodelist): # xor_expr ('|' xor_expr)* return self.com_binary(Bitor, nodelist) def xor_expr(self, nodelist): # xor_expr ('^' xor_expr)* return self.com_binary(Bitxor, nodelist) def and_expr(self, nodelist): # xor_expr ('&' xor_expr)* return self.com_binary(Bitand, nodelist) def shift_expr(self, nodelist): # shift_expr ('<<'|'>>' shift_expr)* node = self.com_node(nodelist[0]) for i in range(2, len(nodelist), 2): right = self.com_node(nodelist[i]) if nodelist[i-1][0] == token.LEFTSHIFT: node = LeftShift([node, right], lineno=nodelist[1][2]) elif nodelist[i-1][0] == token.RIGHTSHIFT: node = RightShift([node, right], lineno=nodelist[1][2]) else: raise ValueError, "unexpected token: %s" % nodelist[i-1][0] return node def arith_expr(self, nodelist): node = self.com_node(nodelist[0]) for i in range(2, len(nodelist), 2): right = self.com_node(nodelist[i]) if nodelist[i-1][0] == token.PLUS: node = Add([node, right], lineno=nodelist[1][2]) elif nodelist[i-1][0] == token.MINUS: node = Sub([node, right], lineno=nodelist[1][2]) else: raise ValueError, "unexpected token: %s" % nodelist[i-1][0] return node def term(self, nodelist): node = self.com_node(nodelist[0]) for i in range(2, len(nodelist), 2): right = self.com_node(nodelist[i]) t = nodelist[i-1][0] if t == token.STAR: node = Mul([node, right]) elif t == token.SLASH: node = Div([node, right]) elif t == token.PERCENT: node = Mod([node, right]) elif t == token.DOUBLESLASH: node = FloorDiv([node, right]) else: raise ValueError, "unexpected token: %s" % t node.lineno = nodelist[1][2] return node def factor(self, nodelist): elt = nodelist[0] t = elt[0] node = self.lookup_node(nodelist[-1])(nodelist[-1][1:]) # need to handle (unary op)constant here... if t == token.PLUS: return UnaryAdd(node, lineno=elt[2]) elif t == token.MINUS: return UnarySub(node, lineno=elt[2]) elif t == token.TILDE: node = Invert(node, lineno=elt[2]) return node def power(self, nodelist): # power: atom trailer* ('**' factor)* node = self.com_node(nodelist[0]) for i in range(1, len(nodelist)): elt = nodelist[i] if elt[0] == token.DOUBLESTAR: return Power([node, self.com_node(nodelist[i+1])], lineno=elt[2]) node = self.com_apply_trailer(node, elt) return node def atom(self, nodelist): return self._atom_dispatch[nodelist[0][0]](nodelist) def atom_lpar(self, nodelist): if nodelist[1][0] == token.RPAR: return Tuple((), lineno=nodelist[0][2]) return self.com_node(nodelist[1]) def atom_lsqb(self, nodelist): if nodelist[1][0] == token.RSQB: return List((), lineno=nodelist[0][2]) return self.com_list_constructor(nodelist[1]) def atom_lbrace(self, nodelist): if nodelist[1][0] == token.RBRACE: return Dict((), lineno=nodelist[0][2]) return self.com_dictmaker(nodelist[1]) def atom_backquote(self, nodelist): return Backquote(self.com_node(nodelist[1])) def atom_number(self, nodelist): ### need to verify this matches compile.c k = eval(nodelist[0][1]) return Const(k, lineno=nodelist[0][2]) def decode_literal(self, lit): if self.encoding: # this is particularly fragile & a bit of a # hack... changes in compile.c:parsestr and # tokenizer.c must be reflected here. if self.encoding not in ['utf-8', 'iso-8859-1']: lit = unicode(lit, 'utf-8').encode(self.encoding) return eval("# coding: %s\n%s" % (self.encoding, lit)) else: return eval(lit) def atom_string(self, nodelist): k = '' for node in nodelist: k += self.decode_literal(node[1]) return Const(k, lineno=nodelist[0][2]) def atom_name(self, nodelist): return Name(nodelist[0][1], lineno=nodelist[0][2]) # -------------------------------------------------------------- # # INTERNAL PARSING UTILITIES # # The use of com_node() introduces a lot of extra stack frames, # enough to cause a stack overflow compiling test.test_parser with # the standard interpreter recursionlimit. The com_node() is a # convenience function that hides the dispatch details, but comes # at a very high cost. It is more efficient to dispatch directly # in the callers. In these cases, use lookup_node() and call the # dispatched node directly. def lookup_node(self, node): return self._dispatch[node[0]] def com_node(self, node): # Note: compile.c has handling in com_node for del_stmt, pass_stmt, # break_stmt, stmt, small_stmt, flow_stmt, simple_stmt, # and compound_stmt. # We'll just dispatch them. return self._dispatch[node[0]](node[1:]) def com_NEWLINE(self, *args): # A ';' at the end of a line can make a NEWLINE token appear # here, Render it harmless. (genc discards ('discard', # ('const', xxxx)) Nodes) return Discard(Const(None)) def com_arglist(self, nodelist): # varargslist: # (fpdef ['=' test] ',')* ('*' NAME [',' '**' NAME] | '**' NAME) # | fpdef ['=' test] (',' fpdef ['=' test])* [','] # fpdef: NAME | '(' fplist ')' # fplist: fpdef (',' fpdef)* [','] names = [] defaults = [] flags = 0 i = 0 while i < len(nodelist): node = nodelist[i] if node[0] == token.STAR or node[0] == token.DOUBLESTAR: if node[0] == token.STAR: node = nodelist[i+1] if node[0] == token.NAME: names.append(node[1]) flags = flags | CO_VARARGS i = i + 3 if i < len(nodelist): # should be DOUBLESTAR t = nodelist[i][0] if t == token.DOUBLESTAR: node = nodelist[i+1] else: raise ValueError, "unexpected token: %s" % t names.append(node[1]) flags = flags | CO_VARKEYWORDS break # fpdef: NAME | '(' fplist ')' names.append(self.com_fpdef(node)) i = i + 1 if i < len(nodelist) and nodelist[i][0] == token.EQUAL: defaults.append(self.com_node(nodelist[i + 1])) i = i + 2 elif len(defaults): # we have already seen an argument with default, but here # came one without raise SyntaxError, "non-default argument follows default argument" # skip the comma i = i + 1 return names, defaults, flags def com_fpdef(self, node): # fpdef: NAME | '(' fplist ')' if node[1][0] == token.LPAR: return self.com_fplist(node[2]) return node[1][1] def com_fplist(self, node): # fplist: fpdef (',' fpdef)* [','] if len(node) == 2: return self.com_fpdef(node[1]) list = [] for i in range(1, len(node), 2): list.append(self.com_fpdef(node[i])) return tuple(list) def com_dotted_name(self, node): # String together the dotted names and return the string name = "" for n in node: if type(n) == type(()) and n[0] == 1: name = name + n[1] + '.' return name[:-1] def com_dotted_as_name(self, node): assert node[0] == symbol.dotted_as_name node = node[1:] dot = self.com_dotted_name(node[0][1:]) if len(node) == 1: return dot, None assert node[1][1] == 'as' assert node[2][0] == token.NAME return dot, node[2][1] def com_dotted_as_names(self, node): assert node[0] == symbol.dotted_as_names node = node[1:] names = [self.com_dotted_as_name(node[0])] for i in range(2, len(node), 2): names.append(self.com_dotted_as_name(node[i])) return names def com_import_as_name(self, node): assert node[0] == symbol.import_as_name node = node[1:] assert node[0][0] == token.NAME if len(node) == 1: return node[0][1], None assert node[1][1] == 'as', node assert node[2][0] == token.NAME return node[0][1], node[2][1] def com_import_as_names(self, node): assert node[0] == symbol.import_as_names node = node[1:] names = [self.com_import_as_name(node[0])] for i in range(2, len(node), 2): names.append(self.com_import_as_name(node[i])) return names def com_bases(self, node): bases = [] for i in range(1, len(node), 2): bases.append(self.com_node(node[i])) return bases def com_try_except_finally(self, nodelist): # ('try' ':' suite # ((except_clause ':' suite)+ ['else' ':' suite] ['finally' ':' suite] # | 'finally' ':' suite)) if nodelist[3][0] == token.NAME: # first clause is a finally clause: only try-finally return TryFinally(self.com_node(nodelist[2]), self.com_node(nodelist[5]), lineno=nodelist[0][2]) #tryexcept: [TryNode, [except_clauses], elseNode)] clauses = [] elseNode = None finallyNode = None for i in range(3, len(nodelist), 3): node = nodelist[i] if node[0] == symbol.except_clause: # except_clause: 'except' [expr [(',' | 'as') expr]] */ if len(node) > 2: expr1 = self.com_node(node[2]) if len(node) > 4: expr2 = self.com_assign(node[4], OP_ASSIGN) else: expr2 = None else: expr1 = expr2 = None clauses.append((expr1, expr2, self.com_node(nodelist[i+2]))) if node[0] == token.NAME: if node[1] == 'else': elseNode = self.com_node(nodelist[i+2]) elif node[1] == 'finally': finallyNode = self.com_node(nodelist[i+2]) try_except = TryExcept(self.com_node(nodelist[2]), clauses, elseNode, lineno=nodelist[0][2]) if finallyNode: return TryFinally(try_except, finallyNode, lineno=nodelist[0][2]) else: return try_except def com_with(self, nodelist): # with_stmt: 'with' expr [with_var] ':' suite expr = self.com_node(nodelist[1]) body = self.com_node(nodelist[-1]) if nodelist[2][0] == token.COLON: var = None else: var = self.com_assign(nodelist[2][2], OP_ASSIGN) return With(expr, var, body, lineno=nodelist[0][2]) def com_with_var(self, nodelist): # with_var: 'as' expr return self.com_node(nodelist[1]) def com_augassign_op(self, node): assert node[0] == symbol.augassign return node[1] def com_augassign(self, node): """Return node suitable for lvalue of augmented assignment Names, slices, and attributes are the only allowable nodes. """ l = self.com_node(node) if l.__class__ in (Name, Slice, Subscript, Getattr): return l raise SyntaxError, "can't assign to %s" % l.__class__.__name__ def com_assign(self, node, assigning): # return a node suitable for use as an "lvalue" # loop to avoid trivial recursion while 1: t = node[0] if t in (symbol.exprlist, symbol.testlist, symbol.testlist_safe, symbol.testlist_gexp): if len(node) > 2: return self.com_assign_tuple(node, assigning) node = node[1] elif t in _assign_types: if len(node) > 2: raise SyntaxError, "can't assign to operator" node = node[1] elif t == symbol.power: if node[1][0] != symbol.atom: raise SyntaxError, "can't assign to operator" if len(node) > 2: primary = self.com_node(node[1]) for i in range(2, len(node)-1): ch = node[i] if ch[0] == token.DOUBLESTAR: raise SyntaxError, "can't assign to operator" primary = self.com_apply_trailer(primary, ch) return self.com_assign_trailer(primary, node[-1], assigning) node = node[1] elif t == symbol.atom: t = node[1][0] if t == token.LPAR: node = node[2] if node[0] == token.RPAR: raise SyntaxError, "can't assign to ()" elif t == token.LSQB: node = node[2] if node[0] == token.RSQB: raise SyntaxError, "can't assign to []" return self.com_assign_list(node, assigning) elif t == token.NAME: return self.com_assign_name(node[1], assigning) else: raise SyntaxError, "can't assign to literal" else: raise SyntaxError, "bad assignment (%s)" % t def com_assign_tuple(self, node, assigning): assigns = [] for i in range(1, len(node), 2): assigns.append(self.com_assign(node[i], assigning)) return AssTuple(assigns, lineno=extractLineNo(node)) def com_assign_list(self, node, assigning): assigns = [] for i in range(1, len(node), 2): if i + 1 < len(node): if node[i + 1][0] == symbol.list_for: raise SyntaxError, "can't assign to list comprehension" assert node[i + 1][0] == token.COMMA, node[i + 1] assigns.append(self.com_assign(node[i], assigning)) return AssList(assigns, lineno=extractLineNo(node)) def com_assign_name(self, node, assigning): return AssName(node[1], assigning, lineno=node[2]) def com_assign_trailer(self, primary, node, assigning): t = node[1][0] if t == token.DOT: return self.com_assign_attr(primary, node[2], assigning) if t == token.LSQB: return self.com_subscriptlist(primary, node[2], assigning) if t == token.LPAR: raise SyntaxError, "can't assign to function call" raise SyntaxError, "unknown trailer type: %s" % t def com_assign_attr(self, primary, node, assigning): return AssAttr(primary, node[1], assigning, lineno=node[-1]) def com_binary(self, constructor, nodelist): "Compile 'NODE (OP NODE)*' into (type, [ node1, ..., nodeN ])." l = len(nodelist) if l == 1: n = nodelist[0] return self.lookup_node(n)(n[1:]) items = [] for i in range(0, l, 2): n = nodelist[i] items.append(self.lookup_node(n)(n[1:])) return constructor(items, lineno=extractLineNo(nodelist)) def com_stmt(self, node): result = self.lookup_node(node)(node[1:]) assert result is not None if isinstance(result, Stmt): return result return Stmt([result]) def com_append_stmt(self, stmts, node): result = self.lookup_node(node)(node[1:]) assert result is not None if isinstance(result, Stmt): stmts.extend(result.nodes) else: stmts.append(result) if hasattr(symbol, 'list_for'): def com_list_constructor(self, nodelist): # listmaker: test ( list_for | (',' test)* [','] ) values = [] for i in range(1, len(nodelist)): if nodelist[i][0] == symbol.list_for: assert len(nodelist[i:]) == 1 return self.com_list_comprehension(values[0], nodelist[i]) elif nodelist[i][0] == token.COMMA: continue values.append(self.com_node(nodelist[i])) return List(values, lineno=values[0].lineno) def com_list_comprehension(self, expr, node): # list_iter: list_for | list_if # list_for: 'for' exprlist 'in' testlist [list_iter] # list_if: 'if' test [list_iter] # XXX should raise SyntaxError for assignment lineno = node[1][2] fors = [] while node: t = node[1][1] if t == 'for': assignNode = self.com_assign(node[2], OP_ASSIGN) listNode = self.com_node(node[4]) newfor = ListCompFor(assignNode, listNode, []) newfor.lineno = node[1][2] fors.append(newfor) if len(node) == 5: node = None else: node = self.com_list_iter(node[5]) elif t == 'if': test = self.com_node(node[2]) newif = ListCompIf(test, lineno=node[1][2]) newfor.ifs.append(newif) if len(node) == 3: node = None else: node = self.com_list_iter(node[3]) else: raise SyntaxError, \ ("unexpected list comprehension element: %s %d" % (node, lineno)) return ListComp(expr, fors, lineno=lineno) def com_list_iter(self, node): assert node[0] == symbol.list_iter return node[1] else: def com_list_constructor(self, nodelist): values = [] for i in range(1, len(nodelist), 2): values.append(self.com_node(nodelist[i])) return List(values, lineno=values[0].lineno) if hasattr(symbol, 'gen_for'): def com_generator_expression(self, expr, node): # gen_iter: gen_for | gen_if # gen_for: 'for' exprlist 'in' test [gen_iter] # gen_if: 'if' test [gen_iter] lineno = node[1][2] fors = [] while node: t = node[1][1] if t == 'for': assignNode = self.com_assign(node[2], OP_ASSIGN) genNode = self.com_node(node[4]) newfor = GenExprFor(assignNode, genNode, [], lineno=node[1][2]) fors.append(newfor) if (len(node)) == 5: node = None else: node = self.com_gen_iter(node[5]) elif t == 'if': test = self.com_node(node[2]) newif = GenExprIf(test, lineno=node[1][2]) newfor.ifs.append(newif) if len(node) == 3: node = None else: node = self.com_gen_iter(node[3]) else: raise SyntaxError, \ ("unexpected generator expression element: %s %d" % (node, lineno)) fors[0].is_outmost = True return GenExpr(GenExprInner(expr, fors), lineno=lineno) def com_gen_iter(self, node): assert node[0] == symbol.gen_iter return node[1] def com_dictmaker(self, nodelist): # dictmaker: test ':' test (',' test ':' value)* [','] items = [] for i in range(1, len(nodelist), 4): items.append((self.com_node(nodelist[i]), self.com_node(nodelist[i+2]))) return Dict(items, lineno=items[0][0].lineno) def com_apply_trailer(self, primaryNode, nodelist): t = nodelist[1][0] if t == token.LPAR: return self.com_call_function(primaryNode, nodelist[2]) if t == token.DOT: return self.com_select_member(primaryNode, nodelist[2]) if t == token.LSQB: return self.com_subscriptlist(primaryNode, nodelist[2], OP_APPLY) raise SyntaxError, 'unknown node type: %s' % t def com_select_member(self, primaryNode, nodelist): if nodelist[0] != token.NAME: raise SyntaxError, "member must be a name" return Getattr(primaryNode, nodelist[1], lineno=nodelist[2]) def com_call_function(self, primaryNode, nodelist): if nodelist[0] == token.RPAR: return CallFunc(primaryNode, [], lineno=extractLineNo(nodelist)) args = [] kw = 0 star_node = dstar_node = None len_nodelist = len(nodelist) i = 1 while i < len_nodelist: node = nodelist[i] if node[0]==token.STAR: if star_node is not None: raise SyntaxError, 'already have the varargs indentifier' star_node = self.com_node(nodelist[i+1]) i = i + 3 continue elif node[0]==token.DOUBLESTAR: if dstar_node is not None: raise SyntaxError, 'already have the kwargs indentifier' dstar_node = self.com_node(nodelist[i+1]) i = i + 3 continue # positional or named parameters kw, result = self.com_argument(node, kw, star_node) if len_nodelist != 2 and isinstance(result, GenExpr) \ and len(node) == 3 and node[2][0] == symbol.gen_for: # allow f(x for x in y), but reject f(x for x in y, 1) # should use f((x for x in y), 1) instead of f(x for x in y, 1) raise SyntaxError, 'generator expression needs parenthesis' args.append(result) i = i + 2 return CallFunc(primaryNode, args, star_node, dstar_node, lineno=extractLineNo(nodelist)) def com_argument(self, nodelist, kw, star_node): if len(nodelist) == 3 and nodelist[2][0] == symbol.gen_for: test = self.com_node(nodelist[1]) return 0, self.com_generator_expression(test, nodelist[2]) if len(nodelist) == 2: if kw: raise SyntaxError, "non-keyword arg after keyword arg" if star_node: raise SyntaxError, "only named arguments may follow *expression" return 0, self.com_node(nodelist[1]) result = self.com_node(nodelist[3]) n = nodelist[1] while len(n) == 2 and n[0] != token.NAME: n = n[1] if n[0] != token.NAME: raise SyntaxError, "keyword can't be an expression (%s)"%n[0] node = Keyword(n[1], result, lineno=n[2]) return 1, node def com_subscriptlist(self, primary, nodelist, assigning): # slicing: simple_slicing | extended_slicing # simple_slicing: primary "[" short_slice "]" # extended_slicing: primary "[" slice_list "]" # slice_list: slice_item ("," slice_item)* [","] # backwards compat slice for '[i:j]' if len(nodelist) == 2: sub = nodelist[1] if (sub[1][0] == token.COLON or \ (len(sub) > 2 and sub[2][0] == token.COLON)) and \ sub[-1][0] != symbol.sliceop: return self.com_slice(primary, sub, assigning) subscripts = [] for i in range(1, len(nodelist), 2): subscripts.append(self.com_subscript(nodelist[i])) return Subscript(primary, assigning, subscripts, lineno=extractLineNo(nodelist)) def com_subscript(self, node): # slice_item: expression | proper_slice | ellipsis ch = node[1] t = ch[0] if t == token.DOT and node[2][0] == token.DOT: return Ellipsis() if t == token.COLON or len(node) > 2: return self.com_sliceobj(node) return self.com_node(ch) def com_sliceobj(self, node): # proper_slice: short_slice | long_slice # short_slice: [lower_bound] ":" [upper_bound] # long_slice: short_slice ":" [stride] # lower_bound: expression # upper_bound: expression # stride: expression # # Note: a stride may be further slicing... items = [] if node[1][0] == token.COLON: items.append(Const(None)) i = 2 else: items.append(self.com_node(node[1])) # i == 2 is a COLON i = 3 if i < len(node) and node[i][0] == symbol.test: items.append(self.com_node(node[i])) i = i + 1 else: items.append(Const(None)) # a short_slice has been built. look for long_slice now by looking # for strides... for j in range(i, len(node)): ch = node[j] if len(ch) == 2: items.append(Const(None)) else: items.append(self.com_node(ch[2])) return Sliceobj(items, lineno=extractLineNo(node)) def com_slice(self, primary, node, assigning): # short_slice: [lower_bound] ":" [upper_bound] lower = upper = None if len(node) == 3: if node[1][0] == token.COLON: upper = self.com_node(node[2]) else: lower = self.com_node(node[1]) elif len(node) == 4: lower = self.com_node(node[1]) upper = self.com_node(node[3]) return Slice(primary, assigning, lower, upper, lineno=extractLineNo(node)) def get_docstring(self, node, n=None): if n is None: n = node[0] node = node[1:] if n == symbol.suite: if len(node) == 1: return self.get_docstring(node[0]) for sub in node: if sub[0] == symbol.stmt: return self.get_docstring(sub) return None if n == symbol.file_input: for sub in node: if sub[0] == symbol.stmt: return self.get_docstring(sub) return None if n == symbol.atom: if node[0][0] == token.STRING: s = '' for t in node: s = s + eval(t[1]) return s return None if n == symbol.stmt or n == symbol.simple_stmt \ or n == symbol.small_stmt: return self.get_docstring(node[0]) if n in _doc_nodes and len(node) == 1: return self.get_docstring(node[0]) return None _doc_nodes = [ symbol.expr_stmt, symbol.testlist, symbol.testlist_safe, symbol.test, symbol.or_test, symbol.and_test, symbol.not_test, symbol.comparison, symbol.expr, symbol.xor_expr, symbol.and_expr, symbol.shift_expr, symbol.arith_expr, symbol.term, symbol.factor, symbol.power, ] # comp_op: '<' | '>' | '=' | '>=' | '<=' | '<>' | '!=' | '==' # | 'in' | 'not' 'in' | 'is' | 'is' 'not' _cmp_types = { token.LESS : '<', token.GREATER : '>', token.EQEQUAL : '==', token.EQUAL : '==', token.LESSEQUAL : '<=', token.GREATEREQUAL : '>=', token.NOTEQUAL : '!=', } _legal_node_types = [ symbol.funcdef, symbol.classdef, symbol.stmt, symbol.small_stmt, symbol.flow_stmt, symbol.simple_stmt, symbol.compound_stmt, symbol.expr_stmt, symbol.print_stmt, symbol.del_stmt, symbol.pass_stmt, symbol.break_stmt, symbol.continue_stmt, symbol.return_stmt, symbol.raise_stmt, symbol.import_stmt, symbol.global_stmt, symbol.exec_stmt, symbol.assert_stmt, symbol.if_stmt, symbol.while_stmt, symbol.for_stmt, symbol.try_stmt, symbol.with_stmt, symbol.suite, symbol.testlist, symbol.testlist_safe, symbol.test, symbol.and_test, symbol.not_test, symbol.comparison, symbol.exprlist, symbol.expr, symbol.xor_expr, symbol.and_expr, symbol.shift_expr, symbol.arith_expr, symbol.term, symbol.factor, symbol.power, symbol.atom, ] if hasattr(symbol, 'yield_stmt'): _legal_node_types.append(symbol.yield_stmt) if hasattr(symbol, 'yield_expr'): _legal_node_types.append(symbol.yield_expr) _assign_types = [ symbol.test, symbol.or_test, symbol.and_test, symbol.not_test, symbol.comparison, symbol.expr, symbol.xor_expr, symbol.and_expr, symbol.shift_expr, symbol.arith_expr, symbol.term, symbol.factor, ] _names = {} for k, v in symbol.sym_name.items(): _names[k] = v for k, v in token.tok_name.items(): _names[k] = v def debug_tree(tree): l = [] for elt in tree: if isinstance(elt, int): l.append(_names.get(elt, elt)) elif isinstance(elt, str): l.append(elt) else: l.append(debug_tree(elt)) return l PK’[—Ž‘‘ast.pyonuW+A„¶Ñò §ÚêLc@sûdZddklZlZd„Zd„ZhZddœd„ƒYZdefd„ƒYZd efd „ƒYZ d efd „ƒYZ d efd„ƒYZ defd„ƒYZ defd„ƒYZ defd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd „ƒYZd!efd"„ƒYZd#efd$„ƒYZd%efd&„ƒYZd'efd(„ƒYZd)efd*„ƒYZd+efd,„ƒYZd-efd.„ƒYZd/efd0„ƒYZd1efd2„ƒYZd3efd4„ƒYZd5efd6„ƒYZd7efd8„ƒYZ d9efd:„ƒYZ!d;efd<„ƒYZ"d=efd>„ƒYZ#d?efd@„ƒYZ$dAefdB„ƒYZ%dCefdD„ƒYZ&dEefdF„ƒYZ'dGefdH„ƒYZ(dIefdJ„ƒYZ)dKefdL„ƒYZ*dMefdN„ƒYZ+dOefdP„ƒYZ,dQefdR„ƒYZ-dSefdT„ƒYZ.dUefdV„ƒYZ/dWefdX„ƒYZ0dYefdZ„ƒYZ1d[efd\„ƒYZ2d]efd^„ƒYZ3d_efd`„ƒYZ4daefdb„ƒYZ5dcefdd„ƒYZ6deefdf„ƒYZ7dgefdh„ƒYZ8diefdj„ƒYZ9dkefdl„ƒYZ:dmefdn„ƒYZ;doefdp„ƒYZ<dqefdr„ƒYZ=dsefdt„ƒYZ>duefdv„ƒYZ?dwefdx„ƒYZ@dyefdz„ƒYZAd{efd|„ƒYZBd}efd~„ƒYZCdefd€„ƒYZDdefd‚„ƒYZEdƒefd„„ƒYZFd…efd†„ƒYZGd‡efdˆ„ƒYZHd‰efdŠ„ƒYZId‹efdŒ„ƒYZJdefdŽ„ƒYZKdefd„ƒYZLd‘efd’„ƒYZMd“efd”„ƒYZNd•efd–„ƒYZOd—efd˜„ƒYZPd™efdš„ƒYZQxQeRƒiSƒD]@\ZTZUeVeUeWƒo$eXeUeƒoeUeeTiYƒscCs dt|iƒt|iƒfS(Ns Add((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRAsN(RRtNoneRRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR!5s   tAndcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyREs cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRIscCs&g}|it|iƒƒt|ƒS(N(textendRR R(Rtnodelist((s$/usr/lib64/python2.6/compiler/ast.pyRLscCsdt|iƒfS(NsAnd(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRQsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR'Ds   tAssAttrcBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(texprtattrnametflagsR$(RR+R,R-R$((s$/usr/lib64/python2.6/compiler/ast.pyRUs   cCs|i|i|ifS(N(R+R,R-(R((s$/usr/lib64/python2.6/compiler/ast.pyR[scCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyR^scCs,dt|iƒt|iƒt|iƒfS(NsAssAttr(%s, %s, %s)(RR+R,R-(R((s$/usr/lib64/python2.6/compiler/ast.pyRasN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR*Ts   tAssListcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyRes cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRiscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRlscCsdt|iƒfS(Ns AssList(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRqsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR.ds   tAssNamecBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(tnameR-R$(RR0R-R$((s$/usr/lib64/python2.6/compiler/ast.pyRus  cCs|i|ifS(N(R0R-(R((s$/usr/lib64/python2.6/compiler/ast.pyRzscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyR}scCs dt|iƒt|iƒfS(NsAssName(%s, %s)(RR0R-(R((s$/usr/lib64/python2.6/compiler/ast.pyR€sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR/ts   tAssTuplecBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyR„s cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRˆscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR‹scCsdt|iƒfS(Ns AssTuple(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR1ƒs   tAssertcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(ttesttfailR$(RR3R4R$((s$/usr/lib64/python2.6/compiler/ast.pyR”s  cCs0g}|i|iƒ|i|iƒt|ƒS(N(RR3R4R(Rtchildren((s$/usr/lib64/python2.6/compiler/ast.pyR™scCsDg}|i|iƒ|idj o|i|iƒnt|ƒS(N(RR3R4R&R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRŸs cCs dt|iƒt|iƒfS(NsAssert(%s, %s)(RR3R4(R((s$/usr/lib64/python2.6/compiler/ast.pyR¦sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR2“s   tAssigncBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R R+R$(RR R+R$((s$/usr/lib64/python2.6/compiler/ast.pyRªs  cCs6g}|it|iƒƒ|i|iƒt|ƒS(N(R(RR RR+R(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR¯scCs6g}|it|iƒƒ|i|iƒt|ƒS(N(R(RR RR+R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRµscCs dt|iƒt|iƒfS(NsAssign(%s, %s)(RR R+(R((s$/usr/lib64/python2.6/compiler/ast.pyR»sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR6©s   t AugAssigncBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(RtopR+R$(RRR8R+R$((s$/usr/lib64/python2.6/compiler/ast.pyR¿s   cCs|i|i|ifS(N(RR8R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRÅscCs|i|ifS(N(RR+(R((s$/usr/lib64/python2.6/compiler/ast.pyRÈscCs,dt|iƒt|iƒt|iƒfS(NsAugAssign(%s, %s, %s)(RRR8R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRËsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR7¾s   t BackquotecBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R+R$(RR+R$((s$/usr/lib64/python2.6/compiler/ast.pyRÏs cCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRÓscCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRÖscCsdt|iƒfS(Ns Backquote(%s)(RR+(R((s$/usr/lib64/python2.6/compiler/ast.pyRÙsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR9Îs   tBitandcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyRÝs cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRáscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRäscCsdt|iƒfS(Ns Bitand(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRésN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR:Üs   tBitorcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyRís cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRñscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRôscCsdt|iƒfS(Ns Bitor(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRùsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR;ìs   tBitxorcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyRýs cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRscCsdt|iƒfS(Ns Bitxor(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyR sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR<üs   tBreakcBs/eZdd„Zd„Zd„Zd„ZRS(cCs ||_dS(N(R$(RR$((s$/usr/lib64/python2.6/compiler/ast.pyR scCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRscCsdS(NsBreak()((R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR= s   tCallFunccBs5eZdddd„Zd„Zd„Zd„ZRS(cCs1||_||_||_||_||_dS(N(Rtargst star_argst dstar_argsR$(RRR?R@RAR$((s$/usr/lib64/python2.6/compiler/ast.pyRs     cCsVg}|i|iƒ|it|iƒƒ|i|iƒ|i|iƒt|ƒS(N(RRR(RR?R@RAR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR!s cCs~g}|i|iƒ|it|iƒƒ|idj o|i|iƒn|idj o|i|iƒnt|ƒS(N( RRR(RR?R@R&RAR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR)scCs8dt|iƒt|iƒt|iƒt|iƒfS(NsCallFunc(%s, %s, %s, %s)(RRR?R@RA(R((s$/usr/lib64/python2.6/compiler/ast.pyR3sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR>s  tClasscBs2eZddd„Zd„Zd„Zd„ZRS(cCs:||_||_||_||_||_||_dS(N(R0tbasestdoctcodet decoratorsR$(RR0RCRDRERFR$((s$/usr/lib64/python2.6/compiler/ast.pyR7s      cCsfg}|i|iƒ|it|iƒƒ|i|iƒ|i|iƒ|i|iƒt|ƒS(N( RR0R(RRCRDRERFR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR?scCsZg}|it|iƒƒ|i|iƒ|idj o|i|iƒnt|ƒS(N(R(RRCRRERFR&R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRHs cCsDdt|iƒt|iƒt|iƒt|iƒt|iƒfS(NsClass(%s, %s, %s, %s, %s)(RR0RCRDRERF(R((s$/usr/lib64/python2.6/compiler/ast.pyRPsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRB6s tComparecBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R+topsR$(RR+RHR$((s$/usr/lib64/python2.6/compiler/ast.pyRTs  cCs6g}|i|iƒ|it|iƒƒt|ƒS(N(RR+R(RRHR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRYscCs6g}|i|iƒ|it|iƒƒt|ƒS(N(RR+R(RRHR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR_scCs dt|iƒt|iƒfS(NsCompare(%s, %s)(RR+RH(R((s$/usr/lib64/python2.6/compiler/ast.pyResN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRGSs   tConstcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(tvalueR$(RRJR$((s$/usr/lib64/python2.6/compiler/ast.pyRis cCs |ifS(N(RJ(R((s$/usr/lib64/python2.6/compiler/ast.pyRmscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRpscCsdt|iƒfS(Ns Const(%s)(RRJ(R((s$/usr/lib64/python2.6/compiler/ast.pyRssN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRIhs   tContinuecBs/eZdd„Zd„Zd„Zd„ZRS(cCs ||_dS(N(R$(RR$((s$/usr/lib64/python2.6/compiler/ast.pyRwscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRzscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyR}scCsdS(Ns Continue()((R((s$/usr/lib64/python2.6/compiler/ast.pyR€sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRKvs   t DecoratorscBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyR„s cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRˆscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR‹scCsdt|iƒfS(NsDecorators(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRLƒs   tDictcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(titemsR$(RRNR$((s$/usr/lib64/python2.6/compiler/ast.pyR”s cCstt|iƒƒS(N(RRRN(R((s$/usr/lib64/python2.6/compiler/ast.pyR˜scCs&g}|it|iƒƒt|ƒS(N(R(RRNR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR›scCsdt|iƒfS(NsDict(%s)(RRN(R((s$/usr/lib64/python2.6/compiler/ast.pyR sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRM“s   tDiscardcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R+R$(RR+R$((s$/usr/lib64/python2.6/compiler/ast.pyR¤s cCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyR¨scCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyR«scCsdt|iƒfS(Ns Discard(%s)(RR+(R((s$/usr/lib64/python2.6/compiler/ast.pyR®sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRO£s   tDivcBs/eZdd„Zd„Zd„Zd„ZRS(cCs'|d|_|d|_||_dS(Nii(R"R#R$(RR%R$((s$/usr/lib64/python2.6/compiler/ast.pyR²s  cCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR·scCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRºscCs dt|iƒt|iƒfS(Ns Div((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR½sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRP±s   tEllipsiscBs/eZdd„Zd„Zd„Zd„ZRS(cCs ||_dS(N(R$(RR$((s$/usr/lib64/python2.6/compiler/ast.pyRÁscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRÄscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRÇscCsdS(Ns Ellipsis()((R((s$/usr/lib64/python2.6/compiler/ast.pyRÊsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRQÀs   tExeccBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(R+tlocalstglobalsR$(RR+RSRTR$((s$/usr/lib64/python2.6/compiler/ast.pyRÎs   cCs@g}|i|iƒ|i|iƒ|i|iƒt|ƒS(N(RR+RSRTR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRÔs cCshg}|i|iƒ|idj o|i|iƒn|idj o|i|iƒnt|ƒS(N(RR+RSR&RTR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRÛscCs,dt|iƒt|iƒt|iƒfS(NsExec(%s, %s, %s)(RR+RSRT(R((s$/usr/lib64/python2.6/compiler/ast.pyRäsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRRÍs   tFloorDivcBs/eZdd„Zd„Zd„Zd„ZRS(cCs'|d|_|d|_||_dS(Nii(R"R#R$(RR%R$((s$/usr/lib64/python2.6/compiler/ast.pyRès  cCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRíscCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRðscCs dt|iƒt|iƒfS(NsFloorDiv((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRósN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRUçs   tForcBs/eZdd„Zd„Zd„Zd„ZRS(cCs1||_||_||_||_||_dS(N(tassignRtbodytelse_R$(RRWRRXRYR$((s$/usr/lib64/python2.6/compiler/ast.pyR÷s     cCsPg}|i|iƒ|i|iƒ|i|iƒ|i|iƒt|ƒS(N(RRWRRXRYR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRþs cCsdg}|i|iƒ|i|iƒ|i|iƒ|idj o|i|iƒnt|ƒS(N(RRWRRXRYR&R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRscCs8dt|iƒt|iƒt|iƒt|iƒfS(NsFor(%s, %s, %s, %s)(RRWRRXRY(R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRVös   tFromcBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(tmodnametnamestlevelR$(RR[R\R]R$((s$/usr/lib64/python2.6/compiler/ast.pyRs   cCs|i|i|ifS(N(R[R\R](R((s$/usr/lib64/python2.6/compiler/ast.pyRscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRscCs,dt|iƒt|iƒt|iƒfS(NsFrom(%s, %s, %s)(RR[R\R](R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRZs   tFunctioncBs/eZdd„Zd„Zd„Zd„ZRS(c CsŒ||_||_||_||_||_||_||_||_d|_ |_ |t @o d|_ n|t @o d|_ ndS(Ni( RFR0targnamestdefaultsR-RDRER$R&tvarargstkwargsRR( RRFR0R_R`R-RDRER$((s$/usr/lib64/python2.6/compiler/ast.pyR#s           cCs†g}|i|iƒ|i|iƒ|i|iƒ|it|iƒƒ|i|iƒ|i|iƒ|i|i ƒt |ƒS(N( RRFR0R_R(RR`R-RDRER(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR3scCsZg}|idj o|i|iƒn|it|iƒƒ|i|iƒt|ƒS(N(RFR&RR(RR`RER(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR>s c Cs\dt|iƒt|iƒt|iƒt|iƒt|iƒt|iƒt|iƒfS(Ns$Function(%s, %s, %s, %s, %s, %s, %s)(RRFR0R_R`R-RDRE(R((s$/usr/lib64/python2.6/compiler/ast.pyRFsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR^"s  tGenExprcBs/eZdd„Zd„Zd„Zd„ZRS(cCs2||_||_dg|_d|_|_dS(Ns.0(RER$R_R&RaRb(RRER$((s$/usr/lib64/python2.6/compiler/ast.pyRJs   cCs |ifS(N(RE(R((s$/usr/lib64/python2.6/compiler/ast.pyRQscCs |ifS(N(RE(R((s$/usr/lib64/python2.6/compiler/ast.pyRTscCsdt|iƒfS(Ns GenExpr(%s)(RRE(R((s$/usr/lib64/python2.6/compiler/ast.pyRWsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRcIs   t GenExprForcBs/eZdd„Zd„Zd„Zd„ZRS(cCs1||_||_||_||_t|_dS(N(RWtitertifsR$tFalset is_outmost(RRWReRfR$((s$/usr/lib64/python2.6/compiler/ast.pyR[s     cCsFg}|i|iƒ|i|iƒ|it|iƒƒt|ƒS(N(RRWReR(RRfR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRbs cCsFg}|i|iƒ|i|iƒ|it|iƒƒt|ƒS(N(RRWReR(RRfR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRis cCs,dt|iƒt|iƒt|iƒfS(NsGenExprFor(%s, %s, %s)(RRWReRf(R((s$/usr/lib64/python2.6/compiler/ast.pyRpsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRdZs   t GenExprIfcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R3R$(RR3R$((s$/usr/lib64/python2.6/compiler/ast.pyRts cCs |ifS(N(R3(R((s$/usr/lib64/python2.6/compiler/ast.pyRxscCs |ifS(N(R3(R((s$/usr/lib64/python2.6/compiler/ast.pyR{scCsdt|iƒfS(Ns GenExprIf(%s)(RR3(R((s$/usr/lib64/python2.6/compiler/ast.pyR~sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRiss   t GenExprInnercBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R+tqualsR$(RR+RkR$((s$/usr/lib64/python2.6/compiler/ast.pyR‚s  cCs6g}|i|iƒ|it|iƒƒt|ƒS(N(RR+R(RRkR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR‡scCs6g}|i|iƒ|it|iƒƒt|ƒS(N(RR+R(RRkR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRscCs dt|iƒt|iƒfS(NsGenExprInner(%s, %s)(RR+Rk(R((s$/usr/lib64/python2.6/compiler/ast.pyR“sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRjs   tGetattrcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R+R,R$(RR+R,R$((s$/usr/lib64/python2.6/compiler/ast.pyR—s  cCs|i|ifS(N(R+R,(R((s$/usr/lib64/python2.6/compiler/ast.pyRœscCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRŸscCs dt|iƒt|iƒfS(NsGetattr(%s, %s)(RR+R,(R((s$/usr/lib64/python2.6/compiler/ast.pyR¢sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRl–s   tGlobalcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R\R$(RR\R$((s$/usr/lib64/python2.6/compiler/ast.pyR¦s cCs |ifS(N(R\(R((s$/usr/lib64/python2.6/compiler/ast.pyRªscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyR­scCsdt|iƒfS(Ns Global(%s)(RR\(R((s$/usr/lib64/python2.6/compiler/ast.pyR°sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRm¥s   tIfcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(ttestsRYR$(RRoRYR$((s$/usr/lib64/python2.6/compiler/ast.pyR´s  cCs6g}|it|iƒƒ|i|iƒt|ƒS(N(R(RRoRRYR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR¹scCsJg}|it|iƒƒ|idj o|i|iƒnt|ƒS(N(R(RRoRYR&RR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR¿s cCs dt|iƒt|iƒfS(Ns If(%s, %s)(RRoRY(R((s$/usr/lib64/python2.6/compiler/ast.pyRÆsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRn³s   tIfExpcBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(R3tthenRYR$(RR3RqRYR$((s$/usr/lib64/python2.6/compiler/ast.pyRÊs   cCs|i|i|ifS(N(R3RqRY(R((s$/usr/lib64/python2.6/compiler/ast.pyRÐscCs|i|i|ifS(N(R3RqRY(R((s$/usr/lib64/python2.6/compiler/ast.pyRÓscCs,dt|iƒt|iƒt|iƒfS(NsIfExp(%s, %s, %s)(RR3RqRY(R((s$/usr/lib64/python2.6/compiler/ast.pyRÖsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRpÉs   tImportcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R\R$(RR\R$((s$/usr/lib64/python2.6/compiler/ast.pyRÚs cCs |ifS(N(R\(R((s$/usr/lib64/python2.6/compiler/ast.pyRÞscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRáscCsdt|iƒfS(Ns Import(%s)(RR\(R((s$/usr/lib64/python2.6/compiler/ast.pyRäsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRrÙs   tInvertcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R+R$(RR+R$((s$/usr/lib64/python2.6/compiler/ast.pyRès cCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRìscCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRïscCsdt|iƒfS(Ns Invert(%s)(RR+(R((s$/usr/lib64/python2.6/compiler/ast.pyRòsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRsçs   tKeywordcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R0R+R$(RR0R+R$((s$/usr/lib64/python2.6/compiler/ast.pyRös  cCs|i|ifS(N(R0R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRûscCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRþscCs dt|iƒt|iƒfS(NsKeyword(%s, %s)(RR0R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRtõs   tLambdacBs/eZdd„Zd„Zd„Zd„ZRS(cCsq||_||_||_||_||_d|_|_|t@o d|_n|t @o d|_ndS(Ni( R_R`R-RER$R&RaRbRR(RR_R`R-RER$((s$/usr/lib64/python2.6/compiler/ast.pyRs        cCsVg}|i|iƒ|it|iƒƒ|i|iƒ|i|iƒt|ƒS(N(RR_R(RR`R-RER(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRs cCs6g}|it|iƒƒ|i|iƒt|ƒS(N(R(RR`RRER(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRscCs8dt|iƒt|iƒt|iƒt|iƒfS(NsLambda(%s, %s, %s, %s)(RR_R`R-RE(R((s$/usr/lib64/python2.6/compiler/ast.pyR sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRus  t LeftShiftcBs/eZdd„Zd„Zd„Zd„ZRS(cCs'|d|_|d|_||_dS(Nii(R"R#R$(RR%R$((s$/usr/lib64/python2.6/compiler/ast.pyR$s  cCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR)scCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR,scCs dt|iƒt|iƒfS(NsLeftShift((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR/sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRv#s   tListcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyR3s cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyR7scCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR:scCsdt|iƒfS(NsList(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyR?sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRw2s   tListCompcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R+RkR$(RR+RkR$((s$/usr/lib64/python2.6/compiler/ast.pyRCs  cCs6g}|i|iƒ|it|iƒƒt|ƒS(N(RR+R(RRkR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRHscCs6g}|i|iƒ|it|iƒƒt|ƒS(N(RR+R(RRkR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRNscCs dt|iƒt|iƒfS(NsListComp(%s, %s)(RR+Rk(R((s$/usr/lib64/python2.6/compiler/ast.pyRTsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRxBs   t ListCompForcBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(RWRRfR$(RRWRRfR$((s$/usr/lib64/python2.6/compiler/ast.pyRXs   cCsFg}|i|iƒ|i|iƒ|it|iƒƒt|ƒS(N(RRWRR(RRfR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR^s cCsFg}|i|iƒ|i|iƒ|it|iƒƒt|ƒS(N(RRWRR(RRfR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRes cCs,dt|iƒt|iƒt|iƒfS(NsListCompFor(%s, %s, %s)(RRWRRf(R((s$/usr/lib64/python2.6/compiler/ast.pyRlsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRyWs   t ListCompIfcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R3R$(RR3R$((s$/usr/lib64/python2.6/compiler/ast.pyRps cCs |ifS(N(R3(R((s$/usr/lib64/python2.6/compiler/ast.pyRtscCs |ifS(N(R3(R((s$/usr/lib64/python2.6/compiler/ast.pyRwscCsdt|iƒfS(NsListCompIf(%s)(RR3(R((s$/usr/lib64/python2.6/compiler/ast.pyRzsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRzos   tModcBs/eZdd„Zd„Zd„Zd„ZRS(cCs'|d|_|d|_||_dS(Nii(R"R#R$(RR%R$((s$/usr/lib64/python2.6/compiler/ast.pyR~s  cCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRƒscCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR†scCs dt|iƒt|iƒfS(Ns Mod((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR‰sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR{}s   tModulecBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(RDRR$(RRDRR$((s$/usr/lib64/python2.6/compiler/ast.pyRs  cCs|i|ifS(N(RDR(R((s$/usr/lib64/python2.6/compiler/ast.pyR’scCs |ifS(N(R(R((s$/usr/lib64/python2.6/compiler/ast.pyR•scCs dt|iƒt|iƒfS(NsModule(%s, %s)(RRDR(R((s$/usr/lib64/python2.6/compiler/ast.pyR˜sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR|Œs   tMulcBs/eZdd„Zd„Zd„Zd„ZRS(cCs'|d|_|d|_||_dS(Nii(R"R#R$(RR%R$((s$/usr/lib64/python2.6/compiler/ast.pyRœs  cCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR¡scCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR¤scCs dt|iƒt|iƒfS(Ns Mul((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR§sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR}›s   tNamecBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R0R$(RR0R$((s$/usr/lib64/python2.6/compiler/ast.pyR«s cCs |ifS(N(R0(R((s$/usr/lib64/python2.6/compiler/ast.pyR¯scCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyR²scCsdt|iƒfS(NsName(%s)(RR0(R((s$/usr/lib64/python2.6/compiler/ast.pyRµsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR~ªs   tNotcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R+R$(RR+R$((s$/usr/lib64/python2.6/compiler/ast.pyR¹s cCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyR½scCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRÀscCsdt|iƒfS(NsNot(%s)(RR+(R((s$/usr/lib64/python2.6/compiler/ast.pyRÃsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR¸s   tOrcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyRÇs cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRËscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRÎscCsdt|iƒfS(NsOr(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRÓsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR€Æs   tPasscBs/eZdd„Zd„Zd„Zd„ZRS(cCs ||_dS(N(R$(RR$((s$/usr/lib64/python2.6/compiler/ast.pyR×scCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRÚscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRÝscCsdS(NsPass()((R((s$/usr/lib64/python2.6/compiler/ast.pyRàsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRÖs   tPowercBs/eZdd„Zd„Zd„Zd„ZRS(cCs'|d|_|d|_||_dS(Nii(R"R#R$(RR%R$((s$/usr/lib64/python2.6/compiler/ast.pyRäs  cCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRéscCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRìscCs dt|iƒt|iƒfS(NsPower((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRïsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR‚ãs   tPrintcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R tdestR$(RR R„R$((s$/usr/lib64/python2.6/compiler/ast.pyRós  cCs6g}|it|iƒƒ|i|iƒt|ƒS(N(R(RR RR„R(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRøscCsJg}|it|iƒƒ|idj o|i|iƒnt|ƒS(N(R(RR R„R&RR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRþs cCs dt|iƒt|iƒfS(Ns Print(%s, %s)(RR R„(R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRƒòs   tPrintnlcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R R„R$(RR R„R$((s$/usr/lib64/python2.6/compiler/ast.pyR s  cCs6g}|it|iƒƒ|i|iƒt|ƒS(N(R(RR RR„R(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRscCsJg}|it|iƒƒ|idj o|i|iƒnt|ƒS(N(R(RR R„R&RR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRs cCs dt|iƒt|iƒfS(NsPrintnl(%s, %s)(RR R„(R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR…s   tRaisecBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(texpr1texpr2texpr3R$(RR‡RˆR‰R$((s$/usr/lib64/python2.6/compiler/ast.pyRs   cCs@g}|i|iƒ|i|iƒ|i|iƒt|ƒS(N(RR‡RˆR‰R(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR%s cCs|g}|idj o|i|iƒn|idj o|i|iƒn|idj o|i|iƒnt|ƒS(N(R‡R&RRˆR‰R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR,scCs,dt|iƒt|iƒt|iƒfS(NsRaise(%s, %s, %s)(RR‡RˆR‰(R((s$/usr/lib64/python2.6/compiler/ast.pyR6sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR†s   tReturncBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(RJR$(RRJR$((s$/usr/lib64/python2.6/compiler/ast.pyR:s cCs |ifS(N(RJ(R((s$/usr/lib64/python2.6/compiler/ast.pyR>scCs |ifS(N(RJ(R((s$/usr/lib64/python2.6/compiler/ast.pyRAscCsdt|iƒfS(Ns Return(%s)(RRJ(R((s$/usr/lib64/python2.6/compiler/ast.pyRDsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRŠ9s   t RightShiftcBs/eZdd„Zd„Zd„Zd„ZRS(cCs'|d|_|d|_||_dS(Nii(R"R#R$(RR%R$((s$/usr/lib64/python2.6/compiler/ast.pyRHs  cCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRMscCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRPscCs dt|iƒt|iƒfS(NsRightShift((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRSsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR‹Gs   tSlicecBs/eZdd„Zd„Zd„Zd„ZRS(cCs1||_||_||_||_||_dS(N(R+R-tlowertupperR$(RR+R-RRŽR$((s$/usr/lib64/python2.6/compiler/ast.pyRWs     cCsPg}|i|iƒ|i|iƒ|i|iƒ|i|iƒt|ƒS(N(RR+R-RRŽR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR^s cCshg}|i|iƒ|idj o|i|iƒn|idj o|i|iƒnt|ƒS(N(RR+RR&RŽR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRfscCs8dt|iƒt|iƒt|iƒt|iƒfS(NsSlice(%s, %s, %s, %s)(RR+R-RRŽ(R((s$/usr/lib64/python2.6/compiler/ast.pyRosN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRŒVs   tSliceobjcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyRss cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRwscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRzscCsdt|iƒfS(Ns Sliceobj(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRrs   tStmtcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyRƒs cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyR‡scCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRŠscCsdt|iƒfS(NsStmt(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR‚s   tSubcBs/eZdd„Zd„Zd„Zd„ZRS(cCs'|d|_|d|_||_dS(Nii(R"R#R$(RR%R$((s$/usr/lib64/python2.6/compiler/ast.pyR“s  cCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR˜scCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR›scCs dt|iƒt|iƒfS(Ns Sub((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRžsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR‘’s   t SubscriptcBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(R+R-tsubsR$(RR+R-R“R$((s$/usr/lib64/python2.6/compiler/ast.pyR¢s   cCsFg}|i|iƒ|i|iƒ|it|iƒƒt|ƒS(N(RR+R-R(RR“R(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR¨s cCs6g}|i|iƒ|it|iƒƒt|ƒS(N(RR+R(RR“R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR¯scCs,dt|iƒt|iƒt|iƒfS(NsSubscript(%s, %s, %s)(RR+R-R“(R((s$/usr/lib64/python2.6/compiler/ast.pyRµsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR’¡s   t TryExceptcBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(RXthandlersRYR$(RRXR•RYR$((s$/usr/lib64/python2.6/compiler/ast.pyR¹s   cCsFg}|i|iƒ|it|iƒƒ|i|iƒt|ƒS(N(RRXR(RR•RYR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR¿s cCsZg}|i|iƒ|it|iƒƒ|idj o|i|iƒnt|ƒS(N(RRXR(RR•RYR&R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRÆs cCs,dt|iƒt|iƒt|iƒfS(NsTryExcept(%s, %s, %s)(RRXR•RY(R((s$/usr/lib64/python2.6/compiler/ast.pyRÎsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR”¸s   t TryFinallycBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(RXtfinalR$(RRXR—R$((s$/usr/lib64/python2.6/compiler/ast.pyRÒs  cCs|i|ifS(N(RXR—(R((s$/usr/lib64/python2.6/compiler/ast.pyR×scCs|i|ifS(N(RXR—(R((s$/usr/lib64/python2.6/compiler/ast.pyRÚscCs dt|iƒt|iƒfS(NsTryFinally(%s, %s)(RRXR—(R((s$/usr/lib64/python2.6/compiler/ast.pyRÝsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR–Ñs   tTuplecBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyRás cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRåscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRèscCsdt|iƒfS(Ns Tuple(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRísN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR˜às   tUnaryAddcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R+R$(RR+R$((s$/usr/lib64/python2.6/compiler/ast.pyRñs cCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRõscCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRøscCsdt|iƒfS(Ns UnaryAdd(%s)(RR+(R((s$/usr/lib64/python2.6/compiler/ast.pyRûsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR™ðs   tUnarySubcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R+R$(RR+R$((s$/usr/lib64/python2.6/compiler/ast.pyRÿs cCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRscCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRscCsdt|iƒfS(Ns UnarySub(%s)(RR+(R((s$/usr/lib64/python2.6/compiler/ast.pyR sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRšþs   tWhilecBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(R3RXRYR$(RR3RXRYR$((s$/usr/lib64/python2.6/compiler/ast.pyR s   cCs@g}|i|iƒ|i|iƒ|i|iƒt|ƒS(N(RR3RXRYR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRs cCsTg}|i|iƒ|i|iƒ|idj o|i|iƒnt|ƒS(N(RR3RXRYR&R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRs cCs,dt|iƒt|iƒt|iƒfS(NsWhile(%s, %s, %s)(RR3RXRY(R((s$/usr/lib64/python2.6/compiler/ast.pyR"sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR› s   tWithcBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(R+tvarsRXR$(RR+RRXR$((s$/usr/lib64/python2.6/compiler/ast.pyR&s   cCs@g}|i|iƒ|i|iƒ|i|iƒt|ƒS(N(RR+RRXR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR,s cCsTg}|i|iƒ|idj o|i|iƒn|i|iƒt|ƒS(N(RR+RR&RXR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR3s cCs,dt|iƒt|iƒt|iƒfS(NsWith(%s, %s, %s)(RR+RRX(R((s$/usr/lib64/python2.6/compiler/ast.pyR;sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRœ%s   tYieldcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(RJR$(RRJR$((s$/usr/lib64/python2.6/compiler/ast.pyR?s cCs |ifS(N(RJ(R((s$/usr/lib64/python2.6/compiler/ast.pyRCscCs |ifS(N(RJ(R((s$/usr/lib64/python2.6/compiler/ast.pyRFscCsdt|iƒfS(Ns Yield(%s)(RRJ(R((s$/usr/lib64/python2.6/compiler/ast.pyRIsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRž>s   N((ZRtcompiler.constsRRRRR R RRR!R'R*R.R/R1R2R6R7R9R:R;R<R=R>RBRGRIRKRLRMRORPRQRRRURVRZR^RcRdRiRjRlRmRnRpRrRsRtRuRvRwRxRyRzR{R|R}R~RR€RR‚RƒR…R†RŠR‹RŒRRR‘R’R”R–R˜R™RšR›RœRžRTRNR0tobjR Rt issubclassR(((s$/usr/lib64/python2.6/compiler/ast.pyts¦     '   PK’[l1I~´´ consts.pycnuW+A„¶Ñò §ÚêLc@svdZdZdZdZdZdZdZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZdS(t OP_ASSIGNt OP_DELETEtOP_APPLYiiiiiiii ii i@i€iN(RRRtSC_LOCALt SC_GLOBALtSC_FREEtSC_CELLt SC_UNKNOWNt CO_OPTIMIZEDt CO_NEWLOCALSt CO_VARARGStCO_VARKEYWORDSt CO_NESTEDt CO_GENERATORtCO_GENERATOR_ALLOWEDtCO_FUTURE_DIVISIONtCO_FUTURE_ABSIMPORTtCO_FUTURE_WITH_STATEMENTtCO_FUTURE_PRINT_FUNCTION(((s'/usr/lib64/python2.6/compiler/consts.pyts$PK’[2Ôee future.pynuW+A„¶"""Parser for future statements """ from compiler import ast, walk def is_future(stmt): """Return true if statement is a well-formed future statement""" if not isinstance(stmt, ast.From): return 0 if stmt.modname == "__future__": return 1 else: return 0 class FutureParser: features = ("nested_scopes", "generators", "division", "absolute_import", "with_statement", "print_function", "unicode_literals") def __init__(self): self.found = {} # set def visitModule(self, node): stmt = node.node for s in stmt.nodes: if not self.check_stmt(s): break def check_stmt(self, stmt): if is_future(stmt): for name, asname in stmt.names: if name in self.features: self.found[name] = 1 else: raise SyntaxError, \ "future feature %s is not defined" % name stmt.valid_future = 1 return 1 return 0 def get_features(self): """Return list of features enabled by future statements""" return self.found.keys() class BadFutureParser: """Check for invalid future statements""" def visitFrom(self, node): if hasattr(node, 'valid_future'): return if node.modname != "__future__": return raise SyntaxError, "invalid future statement " + repr(node) def find_futures(node): p1 = FutureParser() p2 = BadFutureParser() walk(node, p1) walk(node, p2) return p1.get_features() if __name__ == "__main__": import sys from compiler import parseFile, walk for file in sys.argv[1:]: print file tree = parseFile(file) v = FutureParser() walk(tree, v) print v.found print PK’[]·7[8[8 symbols.pynuW+A„¶"""Module symbol-table generator""" from compiler import ast from compiler.consts import SC_LOCAL, SC_GLOBAL, SC_FREE, SC_CELL, SC_UNKNOWN from compiler.misc import mangle import types import sys MANGLE_LEN = 256 class Scope: # XXX how much information do I need about each name? def __init__(self, name, module, klass=None): self.name = name self.module = module self.defs = {} self.uses = {} self.globals = {} self.params = {} self.frees = {} self.cells = {} self.children = [] # nested is true if the class could contain free variables, # i.e. if it is nested within another function. self.nested = None self.generator = None self.klass = None if klass is not None: for i in range(len(klass)): if klass[i] != '_': self.klass = klass[i:] break def __repr__(self): return "<%s: %s>" % (self.__class__.__name__, self.name) def mangle(self, name): if self.klass is None: return name return mangle(name, self.klass) def add_def(self, name): self.defs[self.mangle(name)] = 1 def add_use(self, name): self.uses[self.mangle(name)] = 1 def add_global(self, name): name = self.mangle(name) if name in self.uses or name in self.defs: pass # XXX warn about global following def/use if name in self.params: raise SyntaxError, "%s in %s is global and parameter" % \ (name, self.name) self.globals[name] = 1 self.module.add_def(name) def add_param(self, name): name = self.mangle(name) self.defs[name] = 1 self.params[name] = 1 def get_names(self): d = {} d.update(self.defs) d.update(self.uses) d.update(self.globals) return d.keys() def add_child(self, child): self.children.append(child) def get_children(self): return self.children def DEBUG(self): print >> sys.stderr, self.name, self.nested and "nested" or "" print >> sys.stderr, "\tglobals: ", self.globals print >> sys.stderr, "\tcells: ", self.cells print >> sys.stderr, "\tdefs: ", self.defs print >> sys.stderr, "\tuses: ", self.uses print >> sys.stderr, "\tfrees:", self.frees def check_name(self, name): """Return scope of name. The scope of a name could be LOCAL, GLOBAL, FREE, or CELL. """ if name in self.globals: return SC_GLOBAL if name in self.cells: return SC_CELL if name in self.defs: return SC_LOCAL if self.nested and (name in self.frees or name in self.uses): return SC_FREE if self.nested: return SC_UNKNOWN else: return SC_GLOBAL def get_free_vars(self): if not self.nested: return () free = {} free.update(self.frees) for name in self.uses.keys(): if name not in self.defs and name not in self.globals: free[name] = 1 return free.keys() def handle_children(self): for child in self.children: frees = child.get_free_vars() globals = self.add_frees(frees) for name in globals: child.force_global(name) def force_global(self, name): """Force name to be global in scope. Some child of the current node had a free reference to name. When the child was processed, it was labelled a free variable. Now that all its enclosing scope have been processed, the name is known to be a global or builtin. So walk back down the child chain and set the name to be global rather than free. Be careful to stop if a child does not think the name is free. """ self.globals[name] = 1 if name in self.frees: del self.frees[name] for child in self.children: if child.check_name(name) == SC_FREE: child.force_global(name) def add_frees(self, names): """Process list of free vars from nested scope. Returns a list of names that are either 1) declared global in the parent or 2) undefined in a top-level parent. In either case, the nested scope should treat them as globals. """ child_globals = [] for name in names: sc = self.check_name(name) if self.nested: if sc == SC_UNKNOWN or sc == SC_FREE \ or isinstance(self, ClassScope): self.frees[name] = 1 elif sc == SC_GLOBAL: child_globals.append(name) elif isinstance(self, FunctionScope) and sc == SC_LOCAL: self.cells[name] = 1 elif sc != SC_CELL: child_globals.append(name) else: if sc == SC_LOCAL: self.cells[name] = 1 elif sc != SC_CELL: child_globals.append(name) return child_globals def get_cell_vars(self): return self.cells.keys() class ModuleScope(Scope): __super_init = Scope.__init__ def __init__(self): self.__super_init("global", self) class FunctionScope(Scope): pass class GenExprScope(Scope): __super_init = Scope.__init__ __counter = 1 def __init__(self, module, klass=None): i = self.__counter self.__counter += 1 self.__super_init("generator expression<%d>"%i, module, klass) self.add_param('.0') def get_names(self): keys = Scope.get_names(self) return keys class LambdaScope(FunctionScope): __super_init = Scope.__init__ __counter = 1 def __init__(self, module, klass=None): i = self.__counter self.__counter += 1 self.__super_init("lambda.%d" % i, module, klass) class ClassScope(Scope): __super_init = Scope.__init__ def __init__(self, name, module): self.__super_init(name, module, name) class SymbolVisitor: def __init__(self): self.scopes = {} self.klass = None # node that define new scopes def visitModule(self, node): scope = self.module = self.scopes[node] = ModuleScope() self.visit(node.node, scope) visitExpression = visitModule def visitFunction(self, node, parent): if node.decorators: self.visit(node.decorators, parent) parent.add_def(node.name) for n in node.defaults: self.visit(n, parent) scope = FunctionScope(node.name, self.module, self.klass) if parent.nested or isinstance(parent, FunctionScope): scope.nested = 1 self.scopes[node] = scope self._do_args(scope, node.argnames) self.visit(node.code, scope) self.handle_free_vars(scope, parent) def visitGenExpr(self, node, parent): scope = GenExprScope(self.module, self.klass); if parent.nested or isinstance(parent, FunctionScope) \ or isinstance(parent, GenExprScope): scope.nested = 1 self.scopes[node] = scope self.visit(node.code, scope) self.handle_free_vars(scope, parent) def visitGenExprInner(self, node, scope): for genfor in node.quals: self.visit(genfor, scope) self.visit(node.expr, scope) def visitGenExprFor(self, node, scope): self.visit(node.assign, scope, 1) self.visit(node.iter, scope) for if_ in node.ifs: self.visit(if_, scope) def visitGenExprIf(self, node, scope): self.visit(node.test, scope) def visitLambda(self, node, parent, assign=0): # Lambda is an expression, so it could appear in an expression # context where assign is passed. The transformer should catch # any code that has a lambda on the left-hand side. assert not assign for n in node.defaults: self.visit(n, parent) scope = LambdaScope(self.module, self.klass) if parent.nested or isinstance(parent, FunctionScope): scope.nested = 1 self.scopes[node] = scope self._do_args(scope, node.argnames) self.visit(node.code, scope) self.handle_free_vars(scope, parent) def _do_args(self, scope, args): for name in args: if type(name) == types.TupleType: self._do_args(scope, name) else: scope.add_param(name) def handle_free_vars(self, scope, parent): parent.add_child(scope) scope.handle_children() def visitClass(self, node, parent): parent.add_def(node.name) for n in node.bases: self.visit(n, parent) scope = ClassScope(node.name, self.module) if parent.nested or isinstance(parent, FunctionScope): scope.nested = 1 if node.doc is not None: scope.add_def('__doc__') scope.add_def('__module__') self.scopes[node] = scope prev = self.klass self.klass = node.name self.visit(node.code, scope) self.klass = prev self.handle_free_vars(scope, parent) # name can be a def or a use # XXX a few calls and nodes expect a third "assign" arg that is # true if the name is being used as an assignment. only # expressions contained within statements may have the assign arg. def visitName(self, node, scope, assign=0): if assign: scope.add_def(node.name) else: scope.add_use(node.name) # operations that bind new names def visitFor(self, node, scope): self.visit(node.assign, scope, 1) self.visit(node.list, scope) self.visit(node.body, scope) if node.else_: self.visit(node.else_, scope) def visitFrom(self, node, scope): for name, asname in node.names: if name == "*": continue scope.add_def(asname or name) def visitImport(self, node, scope): for name, asname in node.names: i = name.find(".") if i > -1: name = name[:i] scope.add_def(asname or name) def visitGlobal(self, node, scope): for name in node.names: scope.add_global(name) def visitAssign(self, node, scope): """Propagate assignment flag down to child nodes. The Assign node doesn't itself contains the variables being assigned to. Instead, the children in node.nodes are visited with the assign flag set to true. When the names occur in those nodes, they are marked as defs. Some names that occur in an assignment target are not bound by the assignment, e.g. a name occurring inside a slice. The visitor handles these nodes specially; they do not propagate the assign flag to their children. """ for n in node.nodes: self.visit(n, scope, 1) self.visit(node.expr, scope) def visitAssName(self, node, scope, assign=1): scope.add_def(node.name) def visitAssAttr(self, node, scope, assign=0): self.visit(node.expr, scope, 0) def visitSubscript(self, node, scope, assign=0): self.visit(node.expr, scope, 0) for n in node.subs: self.visit(n, scope, 0) def visitSlice(self, node, scope, assign=0): self.visit(node.expr, scope, 0) if node.lower: self.visit(node.lower, scope, 0) if node.upper: self.visit(node.upper, scope, 0) def visitAugAssign(self, node, scope): # If the LHS is a name, then this counts as assignment. # Otherwise, it's just use. self.visit(node.node, scope) if isinstance(node.node, ast.Name): self.visit(node.node, scope, 1) # XXX worry about this self.visit(node.expr, scope) # prune if statements if tests are false _const_types = types.StringType, types.IntType, types.FloatType def visitIf(self, node, scope): for test, body in node.tests: if isinstance(test, ast.Const): if type(test.value) in self._const_types: if not test.value: continue self.visit(test, scope) self.visit(body, scope) if node.else_: self.visit(node.else_, scope) # a yield statement signals a generator def visitYield(self, node, scope): scope.generator = 1 self.visit(node.value, scope) def list_eq(l1, l2): return sorted(l1) == sorted(l2) if __name__ == "__main__": import sys from compiler import parseFile, walk import symtable def get_names(syms): return [s for s in [s.get_name() for s in syms.get_symbols()] if not (s.startswith('_[') or s.startswith('.'))] for file in sys.argv[1:]: print file f = open(file) buf = f.read() f.close() syms = symtable.symtable(buf, file, "exec") mod_names = get_names(syms) tree = parseFile(file) s = SymbolVisitor() walk(tree, s) # compare module-level symbols names2 = s.scopes[tree].get_names() if not list_eq(mod_names, names2): print print "oops", file print sorted(mod_names) print sorted(names2) sys.exit(-1) d = {} d.update(s.scopes) del d[tree] scopes = d.values() del d for s in syms.get_symbols(): if s.is_namespace(): l = [sc for sc in scopes if sc.name == s.get_name()] if len(l) > 1: print "skipping", s.get_name() else: if not list_eq(get_names(s.get_namespace()), l[0].get_names()): print s.get_name() print sorted(get_names(s.get_namespace())) print sorted(l[0].get_names()) sys.exit(-1) PK’[ °þ¶´´ consts.pynuW+A„¶# operation flags OP_ASSIGN = 'OP_ASSIGN' OP_DELETE = 'OP_DELETE' OP_APPLY = 'OP_APPLY' SC_LOCAL = 1 SC_GLOBAL = 2 SC_FREE = 3 SC_CELL = 4 SC_UNKNOWN = 5 CO_OPTIMIZED = 0x0001 CO_NEWLOCALS = 0x0002 CO_VARARGS = 0x0004 CO_VARKEYWORDS = 0x0008 CO_NESTED = 0x0010 CO_GENERATOR = 0x0020 CO_GENERATOR_ALLOWED = 0 CO_FUTURE_DIVISION = 0x2000 CO_FUTURE_ABSIMPORT = 0x4000 CO_FUTURE_WITH_STATEMENT = 0x8000 CO_FUTURE_PRINT_FUNCTION = 0x10000 PK’[ˆŸ|MÔÙÔÙ pycodegen.pycnuW+A„¶Ñò §ÚêLc@söddkZddkZddkZddkZddkZddklZddklZl Z l Z l Z ddkl Z l Z lZlZddklZlZlZlZddklZlZlZlZlZlZlZlZlZddklZyei dZ!Wne"j o d Z!nXhd ddf6d d df6d dd f6d d d f6Z#d Z$dZ%dZ&dZ'dd„Z(e)e)d„Z*dfd„ƒYZ+de+fd„ƒYZ,de+fd„ƒYZ-de+fd„ƒYZ.dfd„ƒYZ/d„Z0dfd„ƒYZ1d fd!„ƒYZ2d"e2e1fd#„ƒYZ3d$e2e1fd%„ƒYZ4d&e2e1fd'„ƒYZ5d(fd)„ƒYZ6d*e2e6e1fd+„ƒYZ7d,e2e6e1fd-„ƒYZ8d.fd/„ƒYZ9d0e2e9e1fd1„ƒYZ:d2„Z;d3„Z<d4fd5„ƒYZ=d6fd7„ƒYZ>d8e>fd9„ƒYZ?d:e>fd;„ƒYZ@d<e>fd=„ƒYZAd>e>fd?„ƒYZBhe?eiC6e@eiD6eAeiE6eBeiF6ZGd@„ZHeIdAjo&xeiJd D]ZKe(eKƒqÚWndS(BiÿÿÿÿN(tStringIO(tasttparsetwalktsyntax(tpyassemtmisctfuturetsymbols(tSC_LOCALt SC_GLOBALtSC_FREEtSC_CELL( t CO_VARARGStCO_VARKEYWORDSt CO_NEWLOCALSt CO_NESTEDt CO_GENERATORtCO_FUTURE_DIVISIONtCO_FUTURE_ABSIMPORTtCO_FUTURE_WITH_STATEMENTtCO_FUTURE_PRINT_FUNCTION(tTupleArgiit CALL_FUNCTIONtCALL_FUNCTION_VARtCALL_FUNCTION_KWtCALL_FUNCTION_VAR_KWiiicCsŒt|dƒ}|iƒ}|iƒt||ƒ}y|i|ƒWntj o ‚n,Xt|ddƒ}|i|ƒ|iƒdS(NtUtctwb(topentreadtclosetModuletcompilet SyntaxErrortdump(tfilenametdisplaytftbuftmod((s*/usr/lib64/python2.6/compiler/pycodegen.pyt compileFile$s   cCs¤|dj p |dj o td‚n|djot||ƒ}nM|djot||ƒ}n-|djot||ƒ}n tdƒ‚|iƒ|iS(s*Replacement for builtin compile() functionsnot implemented yettsingletexectevals6compile() 3rd arg must be 'exec' or 'eval' or 'single'N(tNonet RuntimeErrort InteractiveR!t Expressiont ValueErrorR"tcode(tsourceR%tmodetflagst dont_inherittgen((s*/usr/lib64/python2.6/compiler/pycodegen.pyR"2s      tAbstractCompileModecBs2eZdZd„Zd„Zd„Zd„ZRS(cCs||_||_d|_dS(N(R4R%R.R3(tselfR4R%((s*/usr/lib64/python2.6/compiler/pycodegen.pyt__init__Gs  cCs9t|i|iƒ}ti|i|ƒti|ƒ|S(N(RR4R5Rt set_filenameR%Rtcheck(R:ttree((s*/usr/lib64/python2.6/compiler/pycodegen.pyt _get_treeLs cCsdS(N((R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR"RscCs|iS(N(R3(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pytgetCodeUsN(t__name__t __module__R.R5R;R?R"R@(((s*/usr/lib64/python2.6/compiler/pycodegen.pyR9Cs    R1cBseZdZd„ZRS(R-cCs+|iƒ}t|ƒ}|iƒ|_dS(N(R?tExpressionCodeGeneratorR@R3(R:R>R8((s*/usr/lib64/python2.6/compiler/pycodegen.pyR"\s  (RARBR5R"(((s*/usr/lib64/python2.6/compiler/pycodegen.pyR1XsR0cBseZdZd„ZRS(R+cCs+|iƒ}t|ƒ}|iƒ|_dS(N(R?tInteractiveCodeGeneratorR@R3(R:R>R8((s*/usr/lib64/python2.6/compiler/pycodegen.pyR"es  (RARBR5R"(((s*/usr/lib64/python2.6/compiler/pycodegen.pyR0asR!cBs8eZdZdd„Zd„ZeiƒZd„ZRS(R,icCsP|iƒ}t|ƒ}|oddk}|i|ƒGHn|iƒ|_dS(Niÿÿÿÿ(R?tModuleCodeGeneratortpprintR@R3(R:R&R>R8RF((s*/usr/lib64/python2.6/compiler/pycodegen.pyR"ns    cCs*|i|iƒƒti|i|ƒdS(N(twritet getPycHeadertmarshalR$R3(R:R'((s*/usr/lib64/python2.6/compiler/pycodegen.pyR$vscCs2tii|iƒ}tid|ƒ}|i|S(Ns|iiƒD]-}|ii|ƒo|ii|ƒqqW|iS(N(RVtelementsRUthas_elttremove(R:telt((s*/usr/lib64/python2.6/compiler/pycodegen.pyt getLocalss cCsdS(N((R:tnode((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitDict•scCs(x!|iD]}|ii|ƒq WdS(N(RURVRW(R:R^RX((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitGlobal˜s cCs|ii|iƒdS(N(RURWRX(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitFunctionœscCsdS(N((R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitLambdaŸscCs5x.|iD]#\}}|ii|p|ƒq WdS(N(RURW(R:R^RXtalias((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitImport¢s cCs5x.|iD]#\}}|ii|p|ƒq WdS(N(RURW(R:R^RXRc((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitFrom¦s cCs|ii|iƒdS(N(RURWRX(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitClassªscCs|ii|iƒdS(N(RURWRX(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitAssName­s(( RARBt__doc__R;R]R_R`RaRbRdReRfRg(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRS…s         cCs*t|tiƒo|ipdSndS(Nii(t isinstanceRtConsttvalue(R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytis_constant_false°s  t CodeGeneratorcBsBeZdZdZdZdZd„Zd„Zd„Z d„Z d„Z d„Z d„Z d „Zd „Zd „Zd „Zd „Zd„Zd„Zed„ZeZdZdZd„Zd„Zd„Zd„Zdd„Zd„Z d„Z!d„Z"d„Z#d„Z$d„Z%d„Z&d„Z'd„Z(d„Z)d „Z*dZ+d!„Z,d"„Z-d#„Z.d$„Z/d%„Z0d&„Z1d'„Z2d(„Z3d)„Z4d*„Z5d+„Z6d,„Z7dZ8d-„Z9d.„Z:d/„Z;d0„Z<d1„Z=d2„Z>d3„Z?d4„Z@d5„ZAd6„ZBd7„ZCd8„ZDd9„ZEd:„ZFd;d<„ZGeHd=joeGZIeGZJnd>„ZId?„ZJd@„ZKh dAdB6dCdD6dEdF6dGdH6dIdJ6dKdL6dMdN6dOdP6dQdR6dSdT6dUdV6dWdX6ZLdY„ZMdZ„ZNd[„ZOd\„ZPd]„ZQd^„ZRdd_„ZSd`„ZTda„ZUdb„ZVddc„ZWddd„ZXde„ZYdf„ZZdg„Z[dh„Z\di„Z]dj„Z^dk„Z_dl„Z`dm„Zadn„Zbdo„Zcdp„Zddq„Zedr„Zfds„Zgdt„Zhdu„Zidv„Zjdw„Zkdx„Zldy„Zmdz„Znd{„Zod|„Zpd}„Zqd~„ZrRS(€síDefines basic code generator for Python bytecode This class is an abstract base class. Concrete subclasses must define an __init__() that defines self.graph and then calls the __init__() defined in this class. The concrete class must also define the class attributes NameFinder, FunctionGen, and ClassGen. These attributes can be defined in the initClass() method, which is a hook for initializing these methods after all the classes have been defined. icCs|idjo|iƒd|i_n|iƒtiƒ|_tiƒ|_d|_ |i ƒd|_ |i ƒi }x›|D]“}|djo|iitƒd|_ q„|djo|iitƒq„|djo|iitƒq„|djo|iitƒq„q„WdS(Nit BINARY_DIVIDEtdivisiontBINARY_TRUE_DIVIDEtabsolute_importtwith_statementtprint_function(t_CodeGenerator__initializedR.t initClasst __class__t checkClassRtStacktlocalstsetupst last_linenot_setupGraphDelegationt_div_opt get_moduletfuturestgraphtsetFlagRRRR(R:Rtfeature((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;Ès*          cCsdS(s)This method is called once for each classN((R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyRuàscCs•y`t|dƒpt‚t|dƒpt‚t|dƒpt‚t|dƒpt‚Wn.tj o"}d|ii}t|‚nXdS(s*Verify that class is constructed correctlyR€t NameFindert FunctionGentClassGensBad class construction for %sN(thasattrtAssertionErrortgetattrRvRA(R:tmsgtintro((s*/usr/lib64/python2.6/compiler/pycodegen.pyRwãscCsO|ii|_|ii|_|ii|_|ii|_|ii|_dS(N(R€temittnewBlockt startBlockt nextBlockt setDocstring(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR|îs cCs |iiƒS(sReturn a code object(R€R@(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR@õscCs,|idj oti||iƒS|SdS(N(t class_nameR.Rtmangle(R:RX((s*/usr/lib64/python2.6/compiler/pycodegen.pyR‘ùscCs tiƒ}t||ƒ|iS(N(Rt SymbolVisitorRtscopes(R:R>ts((s*/usr/lib64/python2.6/compiler/pycodegen.pyt parseSymbolsÿs  cCs td‚dS(Ns#should be implemented by subclasses(R/(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR~scCs|iiƒi|ƒS(N(RyttopRZ(R:RX((s*/usr/lib64/python2.6/compiler/pycodegen.pyt isLocalName scCs|id|ƒdS(NtSTORE(t_nameOp(R:RX((s*/usr/lib64/python2.6/compiler/pycodegen.pyt storeName scCs|id|ƒdS(NtLOAD(R™(R:RX((s*/usr/lib64/python2.6/compiler/pycodegen.pytloadNamescCs|id|ƒdS(NtDELETE(R™(R:RX((s*/usr/lib64/python2.6/compiler/pycodegen.pytdelNamescCsø|i|ƒ}|ii|ƒ}|tjo:|ip|i|d|ƒqô|i|d|ƒn|tjo:|ip|i|d|ƒqô|i|d|ƒnF|tjp |tjo|i|d|ƒnt d||f‚dS(Nt_NAMEt_FASTt_GLOBALt_DEREFs unsupported scope for var %s: %d( R‘tscopet check_nameR t optimizedR‹R R R R/(R:tprefixRXR£((s*/usr/lib64/python2.6/compiler/pycodegen.pyR™s    cCs:|io|i|d|ƒn|i|d|ƒdS(sûEmit name ops for names generated implicitly by for loops The interpreter generates names that start with a period or dollar sign. The symbol table ignores these names because they aren't present in the program text. R RŸN(R¥R‹(R:R¦RX((s*/usr/lib64/python2.6/compiler/pycodegen.pyt_implicitNameOp(s cCsXt|ddƒ}|dj o5||ijp|o|id|ƒ||_tStS(søEmit SET_LINENO if necessary. The instruction is considered necessary if the node has a lineno attribute and it is different than the last lineno emitted. Returns true if SET_LINENO was emitted. There are no rules for when an AST node should have a lineno attribute. The transformer and AST code need to be reviewed and a consistent policy implemented and documented. Until then, this method works around missing line numbers. tlinenot SET_LINENON(RˆR.R{R‹tTruetFalse(R:R^tforceR¨((s*/usr/lib64/python2.6/compiler/pycodegen.pyt set_lineno9s cCsÅ|i|ƒ|_|i||_|iddƒ|io$|id|iƒ|idƒnt|i|iƒddƒ}|i i |i ƒƒ|i |iƒ|iddƒ|idƒdS(NR©it LOAD_CONSTRhtverboset RETURN_VALUE(R•R“R£R‹tdocRšRR^RƒRytpushR]tvisitR.(R:R^tlnf((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitModuleWs cCsP|i|ƒ|i|ƒ|_|i||_|i|iƒ|idƒdS(NR°(R­R•R“R£R³R^R‹(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitExpressionds  cCsE|i|ddƒ|io|i|iƒn|i|iƒdS(NtisLambdai(t_visitFuncOrLambdaR±RRšRX(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyRaks cCs|i|ddƒdS(NR·i(R¸(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyRbqscCs| oD|io:x!|iiD]}|i|ƒqWt|iiƒ}nd}|i||i||i|iƒƒ}t|i |ƒ|i ƒ|i |ƒx|i D]}|i|ƒqªW|i |t|i ƒƒx$t|ƒD]}|iddƒqçWdS(NiRi(t decoratorstnodesR³tlenR„R“RR~RR3tfinishR­tdefaultst _makeClosuretrangeR‹(R:R^R·t decoratort ndecoratorsR8tdefaultti((s*/usr/lib64/python2.6/compiler/pycodegen.pyR¸ts$     cCsÓ|i||i|iƒƒ}t|i|ƒ|iƒ|i|ƒ|id|iƒx|i D]}|i |ƒqbW|idt |i ƒƒ|i |dƒ|iddƒ|idƒ|i |iƒdS(NR®t BUILD_TUPLEiRt BUILD_CLASS(R…R“R~RR3R¼R­R‹RXtbasesR³R»R¾Rš(R:R^R8tbase((s*/usr/lib64/python2.6/compiler/pycodegen.pyRf‡s    cCs |iƒ}t|iƒ}x¿t|ƒD]±}|i|\}}t|ƒoq(n|i|ƒ|i|ƒ|iƒ}|id|ƒ|iƒ|idƒ|i|ƒ|id|ƒ|i |ƒ|idƒq(W|i o|i|i ƒn|i|ƒdS(Nt JUMP_IF_FALSEtPOP_TOPt JUMP_FORWARD( RŒR»ttestsR¿RlR­R³R‹RŽRtelse_(R:R^tendtnumtestsRÃttesttsuitetnextTest((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitIfšs(           cCs8|i|ƒ|iƒ}|iƒ}|iƒ}|id|ƒ|i|ƒ|iit|fƒ|i|dtƒ|i|i ƒ|id|p|ƒ|iƒ|idƒ|i|i ƒ|id|ƒ|i |ƒ|idƒ|idƒ|ii ƒ|i o|i|i ƒn|i|ƒdS(Nt SETUP_LOOPR¬RÈRÉt JUMP_ABSOLUTEt POP_BLOCK(R­RŒR‹RŽRzR²tLOOPRªR³RÏtbodyRtpopRÌ(R:R^tloopRÌtafter((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitWhile°s*            cCs*|iƒ}|iƒ}|iƒ}|iit|fƒ|i|ƒ|id|ƒ|i|iƒ|idƒ|i|ƒ|i|ddƒ|id|ƒ|i|i ƒ|i|i ƒ|id|ƒ|i|ƒ|idƒ|ii ƒ|i o|i|i ƒn|i|ƒdS(NRÓtGET_ITERR¬itFOR_ITERRÔRÕ( RŒRzR²RÖR­R‹R³tlistRŽtassignR×RØRÌ(R:R^tstarttanchorRÚ((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitForÍs(          cCsE|iptd|i|if‚n|i|ƒ|idƒdS(Ns'break' outside loop (%s, %d)t BREAK_LOOP(RzR#R%R¨R­R‹(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitBreakås   cCsj|iptd|i|if‚n|iiƒ\}}|tjo+|i|ƒ|id|ƒ|iƒnó|t jp |t jo¨|i|ƒt |iƒ}xA|djo3|d}|i|\}}|tjoPq­q­W|tjotd|i|if‚n|id|ƒ|iƒn1|t jo#d}t||i|if‚ndS(Ns 'continue' outside loop (%s, %d)RÔiit CONTINUE_LOOPs7'continue' not allowed inside 'finally' clause (%s, %d)( RzR#R%R¨R–RÖR­R‹RŽtEXCEPTt TRY_FINALLYR»t END_FINALLY(R:R^tkindtblockR–t loop_blockR‰((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitContinueìs2          cCs}|iƒ}xI|id D]:}|i|ƒ|i||ƒ|iƒ|idƒqW|i|idƒ|i|ƒdS(NiÿÿÿÿRÉ(RŒRºR³R‹RŽ(R:R^tjumpRÍtchild((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitTests   cCs|i|dƒdS(NRÈ(Rï(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitAndscCs|i|dƒdS(Nt JUMP_IF_TRUE(Rï(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitOrscCs |iƒ}|iƒ}|i|iƒ|id|ƒ|idƒ|i|iƒ|id|ƒ|i|ƒ|idƒ|i|iƒ|i|ƒdS(NRÈRÉRÊ(RŒR³RÏR‹tthenRŽRÌ(R:R^tendblockt elseblock((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitIfExps     cCsD|i|iƒ|iƒ}xy|id D]j\}}|i|ƒ|idƒ|idƒ|id|ƒ|id|ƒ|iƒ|idƒq*W|io4|id\}}|i|ƒ|id|ƒnt|iƒdjoT|iƒ}|id|ƒ|i|ƒ|id ƒ|idƒ|i|ƒndS( NiÿÿÿÿtDUP_TOPt ROT_THREEt COMPARE_OPRÈRÉiRÊtROT_TWO(R³texprRŒtopsR‹RŽR»R(R:R^tcleanuptopR3RÍ((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitCompare$s,            c CsÚ|i|ƒd|i}|id|_|iddƒ|idƒ|id|ƒg}x¤ttt|iƒƒ|iƒD]\}}|i|ƒ\}}d}x>|i D]3} |djo|i ƒ}n|i| |ƒq°W|i d|||fƒqW|id|ƒ|i|i ƒ|idƒx‚|D]z\}}}|oG|i ƒ} |id | ƒ|i|ƒ|id ƒ|i| ƒn|id |ƒ|i|ƒq8W|id |ƒ|id|_dS( Ns$list%dit BUILD_LISTiR÷R˜R›t LIST_APPENDRÊRÉRÔR(R­t_CodeGenerator__list_countR‹R§tzipR¿R»tqualsR³R.tifsRŒtinsertRûRRŽ( R:R^ttmpnametstackRÃtfor_RàRátconttif_tskip_one((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitListComp?s@   "       cCs‰|iƒ}|iƒ}|i|iƒ|idƒ|i|ƒ|i|dtƒ|id|ƒ|iƒ|i|iƒ||fS(NRÜR¬RÝ(RŒR³RÞR‹RŽR­RªRß(R:R^RàRá((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitListCompForcs     cCsN|i|dtƒ|i|iƒ|id|ƒ|iƒ|idƒdS(NR¬RÈRÉ(R­RªR³RÏR‹RŒ(R:R^tbranch((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitListCompIfps  cCs•|iiƒ}|o[x|D]}|id|ƒqW|idt|ƒƒ|id|ƒ|id|ƒn!|id|ƒ|id|ƒdS(Nt LOAD_CLOSURERÄR®t MAKE_CLOSUREt MAKE_FUNCTION(R£t get_free_varsR‹R»(R:R8targstfreesRX((s*/usr/lib64/python2.6/compiler/pycodegen.pyR¾wscCs“t||i|i|iƒƒ}t|i|ƒ|iƒ|i|ƒ|i|dƒ|i |ii di ƒ|i dƒ|i ddƒdS(NiRÜRi( tGenExprCodeGeneratorR“RR~RR3R¼R­R¾R³RtiterR‹(R:R^R8((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitGenExprƒs   c Cs­|i|ƒg}xªttt|iƒƒ|iƒD]‡\}}|i|ƒ\}}}d}x>|iD]3} |djo|iƒ}n|i| |ƒqiW|i d||||fƒq5W|i|i ƒ|i dƒ|i dƒx¬|D]¤\}}}}|oG|iƒ} |i d| ƒ|i |ƒ|i dƒ|i | ƒn|i d|ƒ|i |ƒ|i dƒ|iiƒ|i |ƒqñW|i ddƒdS(Nit YIELD_VALUERÉRÊRÔRÕR®(R­RR¿R»RR³R.RRŒRRûR‹RRŽRzRØ( R:R^RRÃR RàRáRÍR R R ((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitGenExprInners: "            cCsÙ|iƒ}|iƒ}|iƒ}|iit|fƒ|id|ƒ|io|idƒn|i|iƒ|idƒ|i |ƒ|i |dt ƒ|id|ƒ|i ƒ|i|i ƒ|||fS(NRÓs.0RÜR¬RÝ( RŒRzR²RÖR‹t is_outmostRœR³RRŽR­RªRß(R:R^RàRáRÍ((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitGenExprFor°s       cCsN|i|dtƒ|i|iƒ|id|ƒ|iƒ|idƒdS(NR¬RÈRÉ(R­RªR³RÏR‹RŒ(R:R^R((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitGenExprIfÅs  cCsÆ|iƒ}|i|ƒ|iƒ|i|iƒ|id|ƒ|iƒ|idƒ|iddƒ|io$|i|iƒ|iddƒn|iddƒ|i|ƒ|idƒdS(NRñRÉt LOAD_GLOBALR‡t RAISE_VARARGSii(RŒR­RŽR³RÏR‹tfail(R:R^RÍ((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitAssertÎs       cCsŸ|i|ƒd}|io|i|iƒ|d}n|io|i|iƒ|d}n|io|i|iƒ|d}n|id|ƒdS(NiiR (R­texpr1R³texpr2texpr3R‹(R:R^tn((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitRaiseås    c Csh|iƒ}|iƒ}|iƒ}|io|iƒ}n|}|i|ƒ|id|ƒ|i|ƒ|iit|fƒ|i|i ƒ|idƒ|ii ƒ|id|ƒ|i |ƒt |i ƒd}x>tt |i ƒƒD]'}|i |\}} }|i|ƒ|oa|idƒ|i|ƒ|iddƒ|iƒ} |id| ƒ|iƒ|id ƒn|id ƒ| o|i| ƒn|id ƒ|id ƒ|i|ƒ|id|ƒ|o|i| ƒn |iƒ|o|id ƒqôqôW|id ƒ|io!|i|ƒ|i|iƒn|i|ƒdS( Nt SETUP_EXCEPTRÕRÊiR÷Rùsexception matchRÈRÉRè(RŒRÌR­R‹RŽRzR²RæR³R×RØRR»thandlersR¿( R:R^R×R)RÍtlElsetlastRÃRûttargettnext((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitTryExceptósZ                      cCsã|iƒ}|iƒ}|i|ƒ|id|ƒ|i|ƒ|iit|fƒ|i|iƒ|idƒ|ii ƒ|iddƒ|i|ƒ|iit |fƒ|i|i ƒ|idƒ|ii ƒdS(Nt SETUP_FINALLYRÕR®Rè( RŒR­R‹RŽRzR²RçR³R×RØR.Rètfinal(R:R^R×R0((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitTryFinally%s        cCsÚ|iƒ}|iƒ}d|i}|id7_|i|ƒ|i|iƒ|idƒ|iddƒ|idƒ|iddƒ|idd ƒ|idjo|id ƒn|id |ƒ|id |ƒ|i |ƒ|i i t |fƒ|idj o4|id |ƒ|id|ƒ|i|iƒn|i|i ƒ|idƒ|i iƒ|iddƒ|i |ƒ|i i t|fƒ|idƒ|idƒ|i iƒ|id8_dS(Ns$value%diR÷t LOAD_ATTRt__exit__Rút __enter__RiRÉR˜R/R›RRÕR®t WITH_CLEANUPRè(RŒt_CodeGenerator__with_countR­R³RûR‹tvarsR.R§RŽRzR²RçR×RØRè(R:R^R×R0tvaluevar((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitWith8s>             cCs.|i|ƒ|i|iƒ|idƒdS(NRÉ(R­R³RûR‹(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitDiscard\s cCs|id|iƒdS(NR®(R‹Rk(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitConstascCs'|id|iƒ|i|iƒdS(NR®(R‹RXR³Rû(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitKeyworddscCsdS(N((R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyR`hscCs!|i|ƒ|i|iƒdS(N(R­RœRX(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitNamels cCs|i|ƒdS(N(R­(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitPasspscCsÑ|i|ƒ|iitƒodnd}x|iD]’\}}tdjo$|id|ƒ|iddƒn|id|ƒ|idƒd}|o|i |ƒ|i |ƒq7|i |ƒq7WdS(NiiÿÿÿÿiR®t IMPORT_NAMEt.( R­R€t checkFlagRRUtVERSIONR‹R.tsplitt _resolveDotsRš(R:R^tlevelRXRcR)((s*/usr/lib64/python2.6/compiler/pycodegen.pyRdss     cCs`|i|ƒ|i}|djo|iitƒ o d}ntd„|iDƒƒ}tdjo$|id|ƒ|id|ƒn|id|i ƒx®|iD]£\}}tdjoz|djo8d|_ |idƒt |iƒdjpt ‚dS|id |ƒ|i |ƒ|i|p|ƒq¨|id |ƒq¨W|id ƒdS( Niiÿÿÿÿcssx|]\}}|VqWdS(N((t.0RXRc((s*/usr/lib64/python2.6/compiler/pycodegen.pys ‡s iR®R?t*t IMPORT_STARt IMPORT_FROMRÉ(R­RER€RARttupleRURBR‹tmodnamet namespaceR»R‡RDRš(R:R^REtfromlistRXRc((s*/usr/lib64/python2.6/compiler/pycodegen.pyRe‚s,  !        cCsP|idƒ}t|ƒdjodSx"|dD]}|id|ƒq2WdS(NR@iR2(RCR»R‹(R:RXteltsR\((s*/usr/lib64/python2.6/compiler/pycodegen.pyRDœs  cCs0|i|iƒ|id|i|iƒƒdS(NR2(R³RûR‹R‘tattrname(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitGetattr£scCs£|i|ƒ|i|iƒt|iƒd}xltt|iƒƒD]U}|i|}||jo|idƒnt|ti ƒo|i|ƒqFqFWdS(NiR÷( R­R³RûR»RºR¿R‹RiRtNode(R:R^tdupsRÃR\((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitAssign©s   cCse|idjo|i|iƒn>|idjo!|i|ƒ|i|iƒn dG|iGHdS(Nt OP_ASSIGNt OP_DELETEtoops(R6RšRXR­Rž(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyRg´s  cCs…|i|iƒ|idjo |id|i|iƒƒnB|idjo |id|i|iƒƒndG|iGH|GHdS(NRTt STORE_ATTRRUt DELETE_ATTRswarning: unexpected flags:(R³RûR6R‹R‘RO(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitAssAttr½s   tUNPACK_SEQUENCEcCsUt|ƒdjo|i|t|iƒƒnx|iD]}|i|ƒq:WdS(NRU(tfindOpR‹R»RºR³(R:R^RþRî((s*/usr/lib64/python2.6/compiler/pycodegen.pyt_visitAssSequenceÇs  icCs|i|dƒdS(Nt UNPACK_TUPLE(R\(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitAssTupleÑscCs|i|dƒdS(Nt UNPACK_LIST(R\(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitAssListÔscCsg|i|ƒt|iƒ}|i|dƒ|i|iƒ|i|i|iƒ|i|dƒdS(Ntloadtstore(R­twrap_augR^R³RûR‹t_augmented_opcodeRþ(R:R^taug_node((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitAugAssignÙs  t INPLACE_ADDs+=tINPLACE_SUBTRACTs-=tINPLACE_MULTIPLYs*=tINPLACE_DIVIDEs/=tINPLACE_FLOOR_DIVIDEs//=tINPLACE_MODULOs%=t INPLACE_POWERs**=tINPLACE_RSHIFTs>>=tINPLACE_LSHIFTs<<=t INPLACE_ANDs&=t INPLACE_XORs^=t INPLACE_ORs|=cCsF|djo|i|iƒn"|djo|i|iƒndS(NRaRb(RœRXRš(R:R^R5((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitAugNameðs  cCsˆ|djo=|i|iƒ|idƒ|id|i|iƒƒn;|djo-|idƒ|id|i|iƒƒndS(NRaR÷R2RbRúRW(R³RûR‹R‘RO(R:R^R5((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitAugGetattrös     cCsÆ|djo|i|dƒn¢|djo”d}|io|dB}n|io|dB}n|djo|idƒn,|djo|idƒn|id ƒ|id |ƒndS( NRaiRbiiRúitROT_FOURRøsSTORE_SLICE+%d(t visitSlicetlowertupperR‹(R:R^R5tslice((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitAugSliceÿs       cCsP|djo|i|dƒn,|djo|idƒ|idƒndS(NRaiRbRøt STORE_SUBSCR(tvisitSubscriptR‹(R:R^R5((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitAugSubscripts    cCs†|i|iƒ|idjo|iddƒn|i|iƒ|idjo|idƒn|i|iƒ|idƒdS(NR®R÷t EXEC_STMT(R³RûRyR.R‹RV(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitExecscCsd}d}|i|ƒ|i|iƒxI|iD]>}|i|ƒt|tiƒo|d}q3|d}q3W|idj o|i|iƒn|i dj o|i|i ƒn|idj }|i dj }t ||f}|i ||d>|BƒdS(Niii( R­R³R^RRiRtKeywordt star_argsR.t dstar_argstcallfunc_opcode_infoR‹(R:R^tpostkwtargt have_start have_dstartopcode((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitCallFunc#s$   cCsÃ|i|ƒ|io|i|iƒnxn|iD]c}|io|idƒn|i|ƒ|io|idƒ|idƒq5|idƒq5W|io| o|idƒndS(NR÷Rút PRINT_ITEM_TOt PRINT_ITEMRÉ(R­tdestR³RºR‹(R:R^tnewlineRî((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitPrint7s       cCs?|i|ddƒ|io|idƒn|idƒdS(NRŽitPRINT_NEWLINE_TOt PRINT_NEWLINE(RRR‹(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitPrintnlGs cCs.|i|ƒ|i|iƒ|idƒdS(NR°(R­R³RkR‹(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitReturnNs cCs.|i|ƒ|i|iƒ|idƒdS(NR(R­R³RkR‹(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitYieldSs cCsB|i|iƒd}|io|i|iƒ|dB}n|io|i|iƒ|dB}n|oS|djo|idƒqÀ|djo|iddƒqÀ|iddƒn|idjo|id|ƒnZ|id jo|id |ƒn5|id jo|id |ƒnd G|iGH‚dS(NiiiR÷itDUP_TOPXtOP_APPLYsSLICE+%dRTsSTORE_SLICE+%dRUsDELETE_SLICE+%ds weird slice(R³RûRwRxR‹R6(R:R^taug_flagRy((s*/usr/lib64/python2.6/compiler/pycodegen.pyRvZs,     cCsæ|i|iƒx|iD]}|i|ƒqWt|iƒdjo|idt|iƒƒn|o|iddƒn|idjo|idƒnC|idjo|idƒn"|id jo|id ƒndS( NiRÄR•iR–t BINARY_SUBSCRRTR{RUt DELETE_SUBSCR(R³RûtsubsR»R‹R6(R:R^R—tsub((s*/usr/lib64/python2.6/compiler/pycodegen.pyR|us cCs1|i|iƒ|i|iƒ|i|ƒdS(N(R³tlefttrightR‹(R:R^Rþ((s*/usr/lib64/python2.6/compiler/pycodegen.pytbinaryOp†scCs|i|dƒS(Nt BINARY_ADD(Rž(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitAdd‹scCs|i|dƒS(NtBINARY_SUBTRACT(Rž(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitSubŽscCs|i|dƒS(NtBINARY_MULTIPLY(Rž(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitMul‘scCs|i||iƒS(N(RžR}(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitDiv”scCs|i|dƒS(NtBINARY_FLOOR_DIVIDE(Rž(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitFloorDiv—scCs|i|dƒS(Nt BINARY_MODULO(Rž(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitModšscCs|i|dƒS(Nt BINARY_POWER(Rž(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitPowerscCs|i|dƒS(Nt BINARY_LSHIFT(Rž(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitLeftShift scCs|i|dƒS(Nt BINARY_RSHIFT(Rž(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitRightShift£scCs!|i|iƒ|i|ƒdS(N(R³RûR‹(R:R^Rþ((s*/usr/lib64/python2.6/compiler/pycodegen.pytunaryOp¨scCs|i|dƒS(Nt UNARY_INVERT(R°(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitInvert¬scCs|i|dƒS(NtUNARY_NEGATIVE(R°(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitUnarySub¯scCs|i|dƒS(NtUNARY_POSITIVE(R°(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitUnaryAdd²scCs|i|dƒS(NR±(R°(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitUnaryInvertµscCs|i|dƒS(Nt UNARY_NOT(R°(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitNot¸scCs|i|dƒS(Nt UNARY_CONVERT(R°(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitBackquote»scCsD|i|dƒx,|dD] }|i|ƒ|i|ƒqWdS(Nii(R³R‹(R:RºRþR^((s*/usr/lib64/python2.6/compiler/pycodegen.pytbitOpÀs   cCs|i|idƒS(Nt BINARY_AND(R¼Rº(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitBitandÆscCs|i|idƒS(Nt BINARY_OR(R¼Rº(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitBitorÉscCs|i|idƒS(Nt BINARY_XOR(R¼Rº(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitBitxorÌscCs|idtƒdS(NR®(R‹tEllipsis(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitEllipsisÑscCsK|i|ƒx|iD]}|i|ƒqW|idt|iƒƒdS(NRÄ(R­RºR³R‹R»(R:R^R\((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitTupleÔs   cCsK|i|ƒx|iD]}|i|ƒqW|idt|iƒƒdS(NR(R­RºR³R‹R»(R:R^R\((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitListÚs   cCs>x|iD]}|i|ƒq W|idt|iƒƒdS(Nt BUILD_SLICE(RºR³R‹R»(R:R^Rî((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitSliceobjàs cCs||i|ƒ|iddƒxX|iD]M\}}|idƒ|i|ƒ|i|ƒ|idƒ|idƒq'WdS(Nt BUILD_MAPiR÷RøR{(R­R‹titemsR³(R:R^tktv((s*/usr/lib64/python2.6/compiler/pycodegen.pyR_ås      N(sRARBRhR¥R.RtRR;RuRwR|R@R‘R•R~R—RšRœRžR™R§R«R­RSRƒR„R…RµR¶RaRbR¸RfRÒRÛRâRäRìRïRðRòRöRÿRR RRR¾RRRRR"R'R.R1R6R9R:R;R<R`R=R>RdReRDRPRSRgRYR\RBR^R`RfRdRsRtRzR}RRŠRR’R“R”RvR|RžR R¢R¤R¥R§R©R«R­R¯R°R²R´R¶R·R¹R»R¼R¾RÀRÂRÄRÅRÆRÈR_(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRm¶sø                             $  !    2  $                                                    tNestedScopeMixincBseZdZd„ZRS(s>Defines initClass() for nested scoping (Python 2.2-compatible)cCs(t|i_t|i_t|i_dS(N(RSRvRƒtFunctionCodeGeneratorR„tClassCodeGeneratorR…(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyRuñs  (RARBRhRu(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRÍïsREcBs)eZeiZdZd„Zd„ZRS(cCsEtid|iƒ|_ti|ƒ|_|iƒt||ƒdS(Ns( Rt PyFlowGraphR%R€Rt find_futuresRt _ModuleCodeGenerator__super_initR(R:R>((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;ûs cCs|S(N((R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR~sN(RARBRmR;RÒR.R“R~(((s*/usr/lib64/python2.6/compiler/pycodegen.pyREös  RCcBs/eZeiZdZdZd„Zd„ZRS(cCs3tid|iƒ|_|iƒt||ƒdS(Ns (RRÐR%R€t$_ExpressionCodeGenerator__super_initR(R:R>((s*/usr/lib64/python2.6/compiler/pycodegen.pyR; s cCs|S(N((R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR~sN(( RARBRmR;RÓR.R“RR~(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRCs   RDcBs8eZeiZdZdZd„Zd„Zd„Z RS(cCsMtid|iƒ|_|iƒ|i|ƒt||ƒ|idƒdS(Ns R°(RRÐR%R€t%_InteractiveCodeGenerator__super_initR­RR‹(R:R>((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;s    cCs|S(N((R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR~ scCs!|i|iƒ|idƒdS(Nt PRINT_EXPR(R³RûR‹(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyR:#sN(( RARBRmR;RÔR.R“RR~R:(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRDs    tAbstractFunctionCodecBsGeZdZdZd„Zd„Zd„Zd„Zd„ZeZ RS(iic CsW||_||_|o't}d|i}|id|_n |i}t|iƒ\}} ti||i |ddƒ|_ ||_ |i ƒ| o|i o|i|i ƒnt|i|i|ƒddƒ} |ii| iƒƒ|io|i itƒn|io|i itƒn|i|ƒ| o|i|iƒndS(Ns iR¥R¯i(RtmoduleRÎt lambdaCountRXtgenerateArgListtargnamesRRÐR%R€R·t super_initR±RRR3RƒRyR²R]tvarargsRR tkwargsRR­tgenerateArgUnpack( R:tfuncR“R·RR)tklassRXRt hasTupleArgR´((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;-s.       !   cCs|iS(N(R×(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR~JscCs<|iiƒ|ip|iddƒn|idƒdS(NR®R°(R€tstartExitBlockR·R‹R.(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR¼Ms  cCsdx]tt|ƒƒD]I}||}t|tƒo)|idd|dƒ|i|ƒqqWdS(Nt LOAD_FASTs.%di(R¿R»RiRJR‹tunpackSequence(R:RRÃR†((s*/usr/lib64/python2.6/compiler/pycodegen.pyRÞSs  cCsƒtdjo|idt|ƒƒn|idt|ƒƒx?|D]7}t|tƒo|i|ƒqD|id|ƒqDWdS(NiRZR]R˜(RBR‹R»RiRJRäR™(R:ttupR\((s*/usr/lib64/python2.6/compiler/pycodegen.pyRäZs ( RARBR¥RØR;R~R¼RÞRät unpackTuple(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRÖ)s     RÎcBs)eZeiZdZeiZd„ZRS(cCsŒ||_|||_|i|||||ƒ|ii|iiƒƒ|ii|iiƒƒ|iidj o|ii t ƒndS(N( R“R£t"_FunctionCodeGenerator__super_initR€t setFreeVarsRt setCellVarst get_cell_varst generatorR.RR(R:RßR“R·RR)((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;ns  N( RARBRmR;RÛR.R“RÖRç(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRÎgs  RcBs)eZeiZdZeiZd„ZRS(cCsu||_|||_|i||d||ƒ|ii|iiƒƒ|ii|iiƒƒ|iit ƒdS(Ni( R“R£t!_GenExprCodeGenerator__super_initR€RèRRéRêRR(R:tgexpR“RR)((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;~s   N( RARBRmR;RÛR.R“RÖRì(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRws  tAbstractClassCodecBs#eZd„Zd„Zd„ZRS(cCs¬|i|_||_ti|i|iddddƒ|_|iƒt|i |i ƒddƒ}|i i |i ƒƒ|iitƒ|io|i|iƒndS(NR¥iRàiR¯(RXRR×RRÐR%R€RÛRR3RƒRyR²R]RRR±R(R:RàR“R×R´((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;ˆs    cCs|iS(N(R×(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR~”scCs+|iiƒ|idƒ|idƒdS(Nt LOAD_LOCALSR°(R€RâR‹(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR¼—s  (RARBR;R~R¼(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRî†s RÏcBs)eZeiZdZeiZd„ZRS(cCs·||_|||_|i|||ƒ|ii|iiƒƒ|ii|iiƒƒ|i|ƒ|i ddƒ|i dƒ|i o$|i d|i ƒ|i dƒndS(NRRARBR®Rh( R“R£t_ClassCodeGenerator__super_initR€RèRRéRêR­R‹RšR±(R:RàR“R×((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;¢s     N( RARBRmR;RÛR.R“RîRð(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRÏœs  cCsÂg}g}d}xŸtt|ƒƒD]‹}||}t|tƒo|i|ƒq%t|tƒo>|it|d|ƒƒ|iti |ƒƒ|d}q%t d|‚q%W|||fS(s&Generate an arg list marking TupleArgsiiisunexpect argument type:( R¿R»RitstrtappendRJRtextendRtflattenR2(targlistRtextratcountRÃR\((s*/usr/lib64/python2.6/compiler/pycodegen.pyRÙ¯s cCs#tƒ}t||ddƒ|iS(s5Find the op (DELETE, LOAD, STORE) in an AssTuple treeR¯i(tOpFinderRRþ(R^RÌ((s*/usr/lib64/python2.6/compiler/pycodegen.pyR[Às RøcBs&eZd„Zd„ZeZeZRS(cCs d|_dS(N(R.Rþ(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;ÇscCsD|idjo|i|_n!|i|ijo td‚ndS(Nsmixed ops in stmt(RþR.R6R2(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyRgÉs(RARBR;RgRYR|(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRøÆs  t DelegatorcBs eZdZd„Zd„ZRS(sBase class to support delegation for augmented assignment nodes To generator code for augmented assignments, we use the following wrapper classes. In visitAugAssign, the left-hand expression node is visited twice. The first time the visit uses the normal method for that node . The second time the visit uses a different method that generates the appropriate code to perform the assignment. These delegator classes wrap the original AST nodes in order to support the variant visit methods. cCs ||_dS(N(tobj(R:Rú((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;ÜscCst|i|ƒS(N(RˆRú(R:tattr((s*/usr/lib64/python2.6/compiler/pycodegen.pyt __getattr__ßs(RARBRhR;Rü(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRùÑs  t AugGetattrcBseZRS((RARB(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRýâstAugNamecBseZRS((RARB(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRþåstAugSlicecBseZRS((RARB(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRÿèst AugSubscriptcBseZRS((RARB(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRëscCst|i|ƒS(N(twrapperRv(R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyRcõst__main__(LRQRJRIRMtsyst cStringIORtcompilerRRRRRRRRtcompiler.constsR R R R R RRRRRRRRtcompiler.pyassemRt version_infoRBtAttributeErrorRƒRÖRæRçRèR*R.R"R9R1R0R!RSRlRmRÍRERCRDRÖRÎRRîRÏRÙR[RøRùRýRþRÿRtGetattrtNametSlicet SubscriptRRcRAtargvtfile(((s*/usr/lib64/python2.6/compiler/pycodegen.pyts‚     """@       + ÿÿÿÿ=>           PK’[Ã!~(m(m pyassem.pycnuW+A„¶Ñò §ÚêLc@sdZddkZddkZddkZddklZddklZlZl Z l Z dfd„ƒYZ d„Z dfd „ƒYZ d Zd Zd Zd Zde fd„ƒYZd„Zdfd„ƒYZd„Zd„Zdfd„ƒYZdfd„ƒYZeƒiZdS(s/A flow graph representation for Python bytecodeiÿÿÿÿN(tmisc(t CO_OPTIMIZEDt CO_NEWLOCALSt CO_VARARGStCO_VARKEYWORDSt FlowGraphcBs˜eZd„Zd„Zdd„Zd„Zd„ZdZd„Z d„Z d„Z d „Z d „Z d „Zd „Zd „Zd„Zd„ZRS(cCs[tƒ|_|_tdƒ|_tiƒ|_|ii|iƒ|ii|iƒdS(Ntexit(tBlocktcurrenttentryRRtSettblockstadd(tself((s(/usr/lib64/python2.6/compiler/pyassem.pyt__init__ s cCsg|ioP|io7dGt|iƒGHdG|iiGHdG|iiƒGHnt|ƒGHn||_dS(Ntends nexts (t_debugRtreprtnextt get_children(R tblock((s(/usr/lib64/python2.6/compiler/pyassem.pyt startBlocks  cCs>|djo|iƒ}n|ii|ƒ|i|ƒdS(N(tNonetnewBlockRtaddNextR(R R((s(/usr/lib64/python2.6/compiler/pyassem.pyt nextBlocks  cCstƒ}|ii|ƒ|S(N(RR R (R tb((s(/usr/lib64/python2.6/compiler/pyassem.pyR5s cCs|i|iƒdS(N(RR(R ((s(/usr/lib64/python2.6/compiler/pyassem.pytstartExitBlock:sicCs d|_dS(Ni(R(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyt _enable_debug?scCs d|_dS(Ni(R(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyt_disable_debugBscGs’|io dG|GHn|ddjo|ii|iƒnt|ƒdjo,t|dtƒo|ii|dƒn|ii|ƒdS(Ns it RETURN_VALUEt YIELD_VALUEii(RR(RRt addOutEdgeRtlent isinstanceRtemit(R tinst((s(/usr/lib64/python2.6/compiler/pyassem.pyR#Es  'cCs¦xL|iiƒD];}||ijoqn|ip|i|iƒqqWt|ihƒ}|iƒ|i||iƒ|i|jo|i |iƒn|S(slReturn the blocks in reverse postorder i.e. each node appears before all of its successors ( R telementsRRRt dfs_postorderR treverset fixupOrdertappend(R Rtorder((s(/usr/lib64/python2.6/compiler/pyassem.pytgetBlocksInOrderNs  cCs$|i||ƒ|i||ƒdS(s"Fixup bad order introduced by DFS.N(tfixupOrderHonorNexttfixupOrderForward(R R t default_next((s(/usr/lib64/python2.6/compiler/pyassem.pyR(csc CsÃh}x(tt|ƒƒD]}|||| 3   c Csïh}g}g}x`|D]X}t|ƒ||<|i|ƒ|io+|id|jo|i|ƒg}qqW|i|ƒx3g}xÐtt|ƒƒD]¼}||} x©| D]¡}x˜|iƒD]Š} || |josd} xA|iD]6} | ddjo| d| jo d} q%qïqïW| pqÈn|i|| |fƒqÈqÈWqµWqžW|pPn|d\} }|| jpt‚||} |i| ƒ|i| | ƒq…|2x,|D]$} x| D]}|i|ƒqÐWqÃWdS(s(Make sure all JUMP_FORWARDs jump forwardit JUMP_FORWARDiN( R!R)RR/RtinstsR0tremovetinsert(R R R.R2tchainsR5Rt constraintsR3R8tct forward_pR$t goes_beforeta_chain((s(/usr/lib64/python2.6/compiler/pyassem.pyR-•sV      '  cCs |iiƒS(N(R R%(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyt getBlocksÃscCs|iS(s/Return nodes appropriate for use with dominator(R (R ((s(/usr/lib64/python2.6/compiler/pyassem.pytgetRootÆscCs4g}x'|iƒD]}|i|iƒƒqW|S(N(RDtextendtgetContainedGraphs(R R8R((s(/usr/lib64/python2.6/compiler/pyassem.pyRGÊs  N(t__name__t __module__RRRRRRRRRR#R+R(R,R-RDRERG(((s(/usr/lib64/python2.6/compiler/pyassem.pyR s         ) .  cCs_g}|||s (RNRP(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyt__repr__çs cCs2tt|iƒ}d|i|idi|ƒfS(Nss (tmaptstrR;RNRPtjoin(R R;((s(/usr/lib64/python2.6/compiler/pyassem.pyt__str__íscCsG|d}|d djo|ii|dƒn|ii|ƒdS(NiitJUMPi(RMR R;R)(R R$top((s(/usr/lib64/python2.6/compiler/pyassem.pyR#òs cCs|iS(N(R;(R ((s(/usr/lib64/python2.6/compiler/pyassem.pytgetInstructionsøscCs|ii|ƒdS(N(RLR (R R((s(/usr/lib64/python2.6/compiler/pyassem.pyt addInEdgeûscCs|ii|ƒdS(N(RMR (R R((s(/usr/lib64/python2.6/compiler/pyassem.pyR þscCs@|ii|ƒt|iƒdjpttt|iƒ‚dS(Ni(RR)R!R0RRRS(R R((s(/usr/lib64/python2.6/compiler/pyassem.pyRsRt RAISE_VARARGSRt JUMP_ABSOLUTER:t CONTINUE_LOOPcCsUy|id\}}Wnttfj odSX||ijo g|_ndS(sLRemove bogus edge for unconditional transfers Each block has a next edge that accounts for implicit control transfers, e.g. from a JUMP_IF_FALSE to the block that will be executed if the test is true. These edges must remain for the current assembler code to work. If they are removed, the dfs_postorder gets things in weird orders. However, they shouldn't be there for other purposes, e.g. conversion to SSA form. This method will remove the next edge when it follows an unconditional control transfer. iÿÿÿÿN(R;t IndexErrort ValueErrort_uncond_transferR(R RWtarg((s(/usr/lib64/python2.6/compiler/pyassem.pyt pruneNexts cCsP|io2|id|ijo|ii|idƒn|iiƒ|iS(Ni(RRMR<R%(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyRs!cCsfg}xY|iD]N}t|ƒdjoqn|d}t|dƒo|i|iƒqqW|S(s¨Return all graphs contained within this block. For example, a MAKE_FUNCTION block will contain a reference to the graph for the function body. itgraph(R;R!thasattrR)Rb(R t containedR$RW((s(/usr/lib64/python2.6/compiler/pyassem.pyRG"s  (s RETURN_VALUERZs YIELD_VALUER[s JUMP_FORWARDR\(RHRIRORRQRUR#RXRYR RR_RaRRG(((s(/usr/lib64/python2.6/compiler/pyassem.pyRÛs         tRAWtFLATtCONVtDONEt PyFlowGraphc BsIeZeiZdddd„Zd„Zd„Zd„Zd„Z d„Z d„Z dd„Z d „Z d „ZeiƒZx%eiD]Zeieieƒq‹WeiƒZx%eiD]Zeieieƒq¿Wd „Zd „Zd „ZhZd„Zd„ZeZeZd„Zd„Z e Z!e Z"e Z#e Z$e Z%e Z&e Z'e Z(e Z)e Z*d„Z+e+Z,e+Z-d„Z.e/ei0ƒZ1d„Z2xFe3ƒi4ƒD]5\Z5Z6e5d djoe5dZe6ee|iD]3}t|tƒo|iƒ}n|i|ƒqWt|ƒS(s›Return a tuple for the const slot of the code object Must convert references to code (MAKE_FUNCTION) to code objects recursively. (RsR"RiR‹R)R¿(R R8R7((s(/usr/lib64/python2.6/compiler/pyassem.pyR¾]s (N(>RHRIRRRjRR€R‚RƒR„R…R‹R”R†R‡RR RtdisR3R R“RŸRˆR£RªR¤R«R¬t_convert_STORE_FASTt_convert_DELETE_FASTR­R®t_convert_STORE_NAMEt_convert_DELETE_NAMEt_convert_IMPORT_NAMEt_convert_IMPORT_FROMt_convert_STORE_ATTRt_convert_LOAD_ATTRt_convert_DELETE_ATTRt_convert_LOAD_GLOBALt_convert_STORE_GLOBALt_convert_DELETE_GLOBALR¯t_convert_LOAD_DEREFt_convert_STORE_DEREFR°Rxtcmp_opR±R²tlocalstitemsRktobjR‰R·R/R!tnumRŠR¾(((s(/usr/lib64/python2.6/compiler/pyassem.pyRi9sv         !                  cCs|d djodSdS(NiRVi((R“((s(/usr/lib64/python2.6/compiler/pyassem.pytisJumpjsRzcBs)eZdZd„Zd„Zd„ZRS(s:Helper for marking func defs with nested tuples in arglistcCs||_||_dS(N(tcountRt(R RØRt((s(/usr/lib64/python2.6/compiler/pyassem.pyRps cCsd|i|ifS(NsTupleArg(%s, %s)(RØRt(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyRQsscCs d|iS(Ns.%d(RØ(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyR{us(RHRIt__doc__RRQR{(((s(/usr/lib64/python2.6/compiler/pyassem.pyRzns  cCsbt|ƒ}|oKxH|D]<}t|tƒo&tti|iƒƒ}||}qqWn|S(N(R!R"RzRtflattenRt(RnRpR`tnumNames((s(/usr/lib64/python2.6/compiler/pyassem.pyRoxs cCs$t|tƒpt‚t|dƒS(s/Convert an int argument into high and low bytesi(R"tintR0tdivmod(tval((s(/usr/lib64/python2.6/compiler/pyassem.pyR¹sR´cBs;eZdZd„Zd„Zd„Zd„Zd„ZRS(s(lnotab This class builds the lnotab, which is documented in compile.c. Here's a brief recap: For each SET_LINENO instruction after the first one, two bytes are added to lnotab. (In some cases, multiple two-byte entries are added.) The first byte is the distance in bytes between the instruction for the last SET_LINENO and the current SET_LINENO. The second byte is offset in line numbers. If either offset is greater than 255, multiple two-byte entries are added -- see compile.c for the delicate details. cCs:g|_d|_d|_d|_d|_g|_dS(Ni(tcodet codeOffsetRÀtlastlinetlastoffRµ(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyR•s      cGsAx$|D]}|iit|ƒƒqW|it|ƒ|_dS(N(RßR)tchrRàR!(R RnR`((s(/usr/lib64/python2.6/compiler/pyassem.pyR¶scCs|idjo||_||_nî|i|i}||i}|djoÃ|ii}x0|djo"|dƒ|dƒ|d8}q_Wx6|djo(||ƒ|dƒ|d8}d}q’W|djp |djo||ƒ||ƒn||_|i|_ndS(Niiÿ(RÀRáRàRâRµR)(R tlinenotaddrtlinetpush((s(/usr/lib64/python2.6/compiler/pyassem.pyR¸¢s.            cCsdi|iƒS(NRK(RTRß(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyR‹ÂscCsditt|iƒƒS(NRK(RTRRRãRµ(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyRÁÅs(RHRIRÙRR¶R¸R‹RÁ(((s(/usr/lib64/python2.6/compiler/pyassem.pyR´†s     tStackDepthTrackercBs…eZdd„Zh$dd6dd6dd6dd6dd 6dd 6dd 6dd 6dd 6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd 6dd!6dd"6dd#6dd$6dd%6d&d'6d&d(6dd)6dd*6Zd8d9gZd-„Zd.„Zd/„Zd0„Zd1„Z d2„Z d3„Z d4„Z d5„Z d6„Zd7„ZRS(:ic Cs#d}d}x|D]}|d}|o|Gn|ii|dƒ}|dj o||}nxC|iD]8\}} |t|ƒ |jo| }||}PqlqlW|djo;t||dƒ} | dj o|| |dƒ}qðn||jo |}n|o |G|GHqqW|S(Nii(teffectR¥RtpatternsR!tgetattr( R R;tdebugRštmaxDepthR3R“tdeltatpatt pat_deltatmeth((s(/usr/lib64/python2.6/compiler/pyassem.pyR›Ìs2         iÿÿÿÿtPOP_TOPitDUP_TOPiþÿÿÿt LIST_APPENDsSLICE+1sSLICE+2sSLICE+3s STORE_SLICE+0s STORE_SLICE+1s STORE_SLICE+2iýÿÿÿs STORE_SLICE+3sDELETE_SLICE+0sDELETE_SLICE+1sDELETE_SLICE+2sDELETE_SLICE+3t STORE_SUBSCRt DELETE_SUBSCRt PRINT_ITEMRRt EXEC_STMTt BUILD_CLASSt STORE_NAMEt STORE_ATTRt DELETE_ATTRt STORE_GLOBALt BUILD_MAPt COMPARE_OPt STORE_FASTt IMPORT_STARt IMPORT_NAMEt IMPORT_FROMt LOAD_ATTRit SETUP_EXCEPTt SETUP_FINALLYtFOR_ITERt WITH_CLEANUPtBINARY_tLOAD_cCs|dS(Ni((R RØ((s(/usr/lib64/python2.6/compiler/pyassem.pytUNPACK_SEQUENCEscCs | dS(Ni((R RØ((s(/usr/lib64/python2.6/compiler/pyassem.pyt BUILD_TUPLEscCs | dS(Ni((R RØ((s(/usr/lib64/python2.6/compiler/pyassem.pyt BUILD_LISTscCs"t|dƒ\}}||d S(Nii(RÝ(R targcRºR»((s(/usr/lib64/python2.6/compiler/pyassem.pyt CALL_FUNCTIONscCs|i|ƒdS(Ni(R(R R((s(/usr/lib64/python2.6/compiler/pyassem.pytCALL_FUNCTION_VARscCs|i|ƒdS(Ni(R(R R((s(/usr/lib64/python2.6/compiler/pyassem.pytCALL_FUNCTION_KW!scCs|i|ƒdS(Ni(R(R R((s(/usr/lib64/python2.6/compiler/pyassem.pytCALL_FUNCTION_VAR_KW#scCs| S(N((R R((s(/usr/lib64/python2.6/compiler/pyassem.pyt MAKE_FUNCTION%scCs| S(N((R R((s(/usr/lib64/python2.6/compiler/pyassem.pyt MAKE_CLOSURE'scCs(|djodS|djodSdS(Niiÿÿÿÿiiþÿÿÿ((R R((s(/usr/lib64/python2.6/compiler/pyassem.pyt BUILD_SLICE*s  cCs|S(N((R R((s(/usr/lib64/python2.6/compiler/pyassem.pytDUP_TOPX/s(R iÿÿÿÿ(R i(RHRIR›RéRêR R R RRRRRRRR(((s(/usr/lib64/python2.6/compiler/pyassem.pyRèÈsf             (RÙRÃR¼RtcompilerRtcompiler.constsRRRRRR&RReRfRgRhRiR×RzRoR¹R´RèR›(((s(/usr/lib64/python2.6/compiler/pyassem.pyts*   "Å Yÿ2  BjPK’[â.@\\ syntax.pyonuW+A„¶Ñò §ÚêLc@s?dZddklZlZdd„Zddd„ƒYZdS(s8Check for errs in the AST. The Python parser does not catch all syntax errors. Others, like assignments with invalid targets, are caught in the code generation phase. The compiler package catches some errors in the transformer module. But it seems clearer to write checkers that use the AST to detect errors. iÿÿÿÿ(tasttwalkcCs t|ƒ}t||ƒ|iS(N(tSyntaxErrorCheckerRterrors(ttreetmultitv((s'/usr/lib64/python2.6/compiler/syntax.pytchecks  RcBs,eZdZdd„Zd„Zd„ZRS(s+A visitor to find syntax errors in the AST.cCs||_d|_dS(s¸Create new visitor object. If optional argument multi is not None, then print messages for each error rather than raising a SyntaxError for the first. iN(RR(tselfR((s'/usr/lib64/python2.6/compiler/syntax.pyt__init__s cCs\|id|_|idj od|i|i|fGHntd||i|if‚dS(Nis %s:%s: %ss %s (%s:%s)(RRtNonetfilenametlinenot SyntaxError(Rtnodetmsg((s'/usr/lib64/python2.6/compiler/syntax.pyterror scCsdS(N((RR((s'/usr/lib64/python2.6/compiler/syntax.pyt visitAssign'sN(t__name__t __module__t__doc__R R RR(((s'/usr/lib64/python2.6/compiler/syntax.pyRs N((RtcompilerRRR RR(((s'/usr/lib64/python2.6/compiler/syntax.pyt s PK’[Ln&$misc.pynuW+A„¶ def flatten(tup): elts = [] for elt in tup: if isinstance(elt, tuple): elts = elts + flatten(elt) else: elts.append(elt) return elts class Set: def __init__(self): self.elts = {} def __len__(self): return len(self.elts) def __contains__(self, elt): return elt in self.elts def add(self, elt): self.elts[elt] = elt def elements(self): return self.elts.keys() def has_elt(self, elt): return elt in self.elts def remove(self, elt): del self.elts[elt] def copy(self): c = Set() c.elts.update(self.elts) return c class Stack: def __init__(self): self.stack = [] self.pop = self.stack.pop def __len__(self): return len(self.stack) def push(self, elt): self.stack.append(elt) def top(self): return self.stack[-1] def __getitem__(self, index): # needed by visitContinue() return self.stack[index] MANGLE_LEN = 256 # magic constant from compile.c def mangle(name, klass): if not name.startswith('__'): return name if len(name) + 2 >= MANGLE_LEN: return name if name.endswith('__'): return name try: i = 0 while klass[i] == '_': i = i + 1 except IndexError: return name klass = klass[i:] tlen = len(klass) + len(name) if tlen > MANGLE_LEN: klass = klass[:MANGLE_LEN-tlen] return "_%s%s" % (klass, name) def set_filename(filename, tree): """Set the filename attribute to filename on every node in tree""" worklist = [tree] while worklist: node = worklist.pop(0) node.filename = filename worklist.extend(node.getChildNodes()) PK’[l1I~´´ consts.pyonuW+A„¶Ñò §ÚêLc@svdZdZdZdZdZdZdZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZdS(t OP_ASSIGNt OP_DELETEtOP_APPLYiiiiiiii ii i@i€iN(RRRtSC_LOCALt SC_GLOBALtSC_FREEtSC_CELLt SC_UNKNOWNt CO_OPTIMIZEDt CO_NEWLOCALSt CO_VARARGStCO_VARKEYWORDSt CO_NESTEDt CO_GENERATORtCO_GENERATOR_ALLOWEDtCO_FUTURE_DIVISIONtCO_FUTURE_ABSIMPORTtCO_FUTURE_WITH_STATEMENTtCO_FUTURE_PRINT_FUNCTION(((s'/usr/lib64/python2.6/compiler/consts.pyts$PK’[s"Á=¢ ¢ future.pyonuW+A„¶Ñò §ÚêLc@sÓdZddklZlZd„Zdd d„ƒYZddd„ƒYZd„Zed jondd k Z dd kl Z lZxIe i d D]6Z e GHe e ƒZ eƒZee eƒeiGHHq‘Wnd S(sParser for future statements iÿÿÿÿ(tasttwalkcCs5t|tiƒpdS|idjodSdSdS(s:Return true if statement is a well-formed future statementit __future__iN(t isinstanceRtFromtmodname(tstmt((s'/usr/lib64/python2.6/compiler/future.pyt is_futures t FutureParsercBs2eZd Zd„Zd„Zd „Zd „ZRS( t nested_scopest generatorstdivisiontabsolute_importtwith_statementtprint_functiontunicode_literalscCs h|_dS(N(tfound(tself((s'/usr/lib64/python2.6/compiler/future.pyt__init__scCs6|i}x&|iD]}|i|ƒpPqqWdS(N(tnodetnodest check_stmt(RRRts((s'/usr/lib64/python2.6/compiler/future.pyt visitModules   cCsgt|ƒoVxE|iD]:\}}||ijod|i|s        PK’[ÆN««misc.pycnuW+A„¶Ñò §ÚêLc@sKd„Zdd d„ƒYZdd d„ƒYZdZd„Zd„ZdS( cCsLg}x?|D]7}t|tƒo|t|ƒ}q |i|ƒq W|S(N(t isinstancettupletflattentappend(ttupteltstelt((s%/usr/lib64/python2.6/compiler/misc.pyRstSetcBsPeZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z RS(cCs h|_dS(N(R(tself((s%/usr/lib64/python2.6/compiler/misc.pyt__init__ scCs t|iƒS(N(tlenR(R((s%/usr/lib64/python2.6/compiler/misc.pyt__len__scCs ||ijS(N(R(RR((s%/usr/lib64/python2.6/compiler/misc.pyt __contains__scCs||i|s   PK’[)¥ƒø‹ø‹ast.pynuW+A„¶"""Python abstract syntax node definitions This file is automatically generated by Tools/compiler/astgen.py """ from compiler.consts import CO_VARARGS, CO_VARKEYWORDS def flatten(seq): l = [] for elt in seq: t = type(elt) if t is tuple or t is list: for elt2 in flatten(elt): l.append(elt2) else: l.append(elt) return l def flatten_nodes(seq): return [n for n in flatten(seq) if isinstance(n, Node)] nodes = {} class Node: """Abstract base class for ast nodes.""" def getChildren(self): pass # implemented by subclasses def __iter__(self): for n in self.getChildren(): yield n def asList(self): # for backwards compatibility return self.getChildren() def getChildNodes(self): pass # implemented by subclasses class EmptyNode(Node): pass class Expression(Node): # Expression is an artificial node class to support "eval" nodes["expression"] = "Expression" def __init__(self, node): self.node = node def getChildren(self): return self.node, def getChildNodes(self): return self.node, def __repr__(self): return "Expression(%s)" % (repr(self.node)) class Add(Node): def __init__(self, leftright, lineno=None): self.left = leftright[0] self.right = leftright[1] self.lineno = lineno def getChildren(self): return self.left, self.right def getChildNodes(self): return self.left, self.right def __repr__(self): return "Add((%s, %s))" % (repr(self.left), repr(self.right)) class And(Node): def __init__(self, nodes, lineno=None): self.nodes = nodes self.lineno = lineno def getChildren(self): return tuple(flatten(self.nodes)) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.nodes)) return tuple(nodelist) def __repr__(self): return "And(%s)" % (repr(self.nodes),) class AssAttr(Node): def __init__(self, expr, attrname, flags, lineno=None): self.expr = expr self.attrname = attrname self.flags = flags self.lineno = lineno def getChildren(self): return self.expr, self.attrname, self.flags def getChildNodes(self): return self.expr, def __repr__(self): return "AssAttr(%s, %s, %s)" % (repr(self.expr), repr(self.attrname), repr(self.flags)) class AssList(Node): def __init__(self, nodes, lineno=None): self.nodes = nodes self.lineno = lineno def getChildren(self): return tuple(flatten(self.nodes)) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.nodes)) return tuple(nodelist) def __repr__(self): return "AssList(%s)" % (repr(self.nodes),) class AssName(Node): def __init__(self, name, flags, lineno=None): self.name = name self.flags = flags self.lineno = lineno def getChildren(self): return self.name, self.flags def getChildNodes(self): return () def __repr__(self): return "AssName(%s, %s)" % (repr(self.name), repr(self.flags)) class AssTuple(Node): def __init__(self, nodes, lineno=None): self.nodes = nodes self.lineno = lineno def getChildren(self): return tuple(flatten(self.nodes)) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.nodes)) return tuple(nodelist) def __repr__(self): return "AssTuple(%s)" % (repr(self.nodes),) class Assert(Node): def __init__(self, test, fail, lineno=None): self.test = test self.fail = fail self.lineno = lineno def getChildren(self): children = [] children.append(self.test) children.append(self.fail) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.append(self.test) if self.fail is not None: nodelist.append(self.fail) return tuple(nodelist) def __repr__(self): return "Assert(%s, %s)" % (repr(self.test), repr(self.fail)) class Assign(Node): def __init__(self, nodes, expr, lineno=None): self.nodes = nodes self.expr = expr self.lineno = lineno def getChildren(self): children = [] children.extend(flatten(self.nodes)) children.append(self.expr) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.nodes)) nodelist.append(self.expr) return tuple(nodelist) def __repr__(self): return "Assign(%s, %s)" % (repr(self.nodes), repr(self.expr)) class AugAssign(Node): def __init__(self, node, op, expr, lineno=None): self.node = node self.op = op self.expr = expr self.lineno = lineno def getChildren(self): return self.node, self.op, self.expr def getChildNodes(self): return self.node, self.expr def __repr__(self): return "AugAssign(%s, %s, %s)" % (repr(self.node), repr(self.op), repr(self.expr)) class Backquote(Node): def __init__(self, expr, lineno=None): self.expr = expr self.lineno = lineno def getChildren(self): return self.expr, def getChildNodes(self): return self.expr, def __repr__(self): return "Backquote(%s)" % (repr(self.expr),) class Bitand(Node): def __init__(self, nodes, lineno=None): self.nodes = nodes self.lineno = lineno def getChildren(self): return tuple(flatten(self.nodes)) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.nodes)) return tuple(nodelist) def __repr__(self): return "Bitand(%s)" % (repr(self.nodes),) class Bitor(Node): def __init__(self, nodes, lineno=None): self.nodes = nodes self.lineno = lineno def getChildren(self): return tuple(flatten(self.nodes)) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.nodes)) return tuple(nodelist) def __repr__(self): return "Bitor(%s)" % (repr(self.nodes),) class Bitxor(Node): def __init__(self, nodes, lineno=None): self.nodes = nodes self.lineno = lineno def getChildren(self): return tuple(flatten(self.nodes)) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.nodes)) return tuple(nodelist) def __repr__(self): return "Bitxor(%s)" % (repr(self.nodes),) class Break(Node): def __init__(self, lineno=None): self.lineno = lineno def getChildren(self): return () def getChildNodes(self): return () def __repr__(self): return "Break()" class CallFunc(Node): def __init__(self, node, args, star_args = None, dstar_args = None, lineno=None): self.node = node self.args = args self.star_args = star_args self.dstar_args = dstar_args self.lineno = lineno def getChildren(self): children = [] children.append(self.node) children.extend(flatten(self.args)) children.append(self.star_args) children.append(self.dstar_args) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.append(self.node) nodelist.extend(flatten_nodes(self.args)) if self.star_args is not None: nodelist.append(self.star_args) if self.dstar_args is not None: nodelist.append(self.dstar_args) return tuple(nodelist) def __repr__(self): return "CallFunc(%s, %s, %s, %s)" % (repr(self.node), repr(self.args), repr(self.star_args), repr(self.dstar_args)) class Class(Node): def __init__(self, name, bases, doc, code, decorators = None, lineno=None): self.name = name self.bases = bases self.doc = doc self.code = code self.decorators = decorators self.lineno = lineno def getChildren(self): children = [] children.append(self.name) children.extend(flatten(self.bases)) children.append(self.doc) children.append(self.code) children.append(self.decorators) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.bases)) nodelist.append(self.code) if self.decorators is not None: nodelist.append(self.decorators) return tuple(nodelist) def __repr__(self): return "Class(%s, %s, %s, %s, %s)" % (repr(self.name), repr(self.bases), repr(self.doc), repr(self.code), repr(self.decorators)) class Compare(Node): def __init__(self, expr, ops, lineno=None): self.expr = expr self.ops = ops self.lineno = lineno def getChildren(self): children = [] children.append(self.expr) children.extend(flatten(self.ops)) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.append(self.expr) nodelist.extend(flatten_nodes(self.ops)) return tuple(nodelist) def __repr__(self): return "Compare(%s, %s)" % (repr(self.expr), repr(self.ops)) class Const(Node): def __init__(self, value, lineno=None): self.value = value self.lineno = lineno def getChildren(self): return self.value, def getChildNodes(self): return () def __repr__(self): return "Const(%s)" % (repr(self.value),) class Continue(Node): def __init__(self, lineno=None): self.lineno = lineno def getChildren(self): return () def getChildNodes(self): return () def __repr__(self): return "Continue()" class Decorators(Node): def __init__(self, nodes, lineno=None): self.nodes = nodes self.lineno = lineno def getChildren(self): return tuple(flatten(self.nodes)) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.nodes)) return tuple(nodelist) def __repr__(self): return "Decorators(%s)" % (repr(self.nodes),) class Dict(Node): def __init__(self, items, lineno=None): self.items = items self.lineno = lineno def getChildren(self): return tuple(flatten(self.items)) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.items)) return tuple(nodelist) def __repr__(self): return "Dict(%s)" % (repr(self.items),) class Discard(Node): def __init__(self, expr, lineno=None): self.expr = expr self.lineno = lineno def getChildren(self): return self.expr, def getChildNodes(self): return self.expr, def __repr__(self): return "Discard(%s)" % (repr(self.expr),) class Div(Node): def __init__(self, leftright, lineno=None): self.left = leftright[0] self.right = leftright[1] self.lineno = lineno def getChildren(self): return self.left, self.right def getChildNodes(self): return self.left, self.right def __repr__(self): return "Div((%s, %s))" % (repr(self.left), repr(self.right)) class Ellipsis(Node): def __init__(self, lineno=None): self.lineno = lineno def getChildren(self): return () def getChildNodes(self): return () def __repr__(self): return "Ellipsis()" class Exec(Node): def __init__(self, expr, locals, globals, lineno=None): self.expr = expr self.locals = locals self.globals = globals self.lineno = lineno def getChildren(self): children = [] children.append(self.expr) children.append(self.locals) children.append(self.globals) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.append(self.expr) if self.locals is not None: nodelist.append(self.locals) if self.globals is not None: nodelist.append(self.globals) return tuple(nodelist) def __repr__(self): return "Exec(%s, %s, %s)" % (repr(self.expr), repr(self.locals), repr(self.globals)) class FloorDiv(Node): def __init__(self, leftright, lineno=None): self.left = leftright[0] self.right = leftright[1] self.lineno = lineno def getChildren(self): return self.left, self.right def getChildNodes(self): return self.left, self.right def __repr__(self): return "FloorDiv((%s, %s))" % (repr(self.left), repr(self.right)) class For(Node): def __init__(self, assign, list, body, else_, lineno=None): self.assign = assign self.list = list self.body = body self.else_ = else_ self.lineno = lineno def getChildren(self): children = [] children.append(self.assign) children.append(self.list) children.append(self.body) children.append(self.else_) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.append(self.assign) nodelist.append(self.list) nodelist.append(self.body) if self.else_ is not None: nodelist.append(self.else_) return tuple(nodelist) def __repr__(self): return "For(%s, %s, %s, %s)" % (repr(self.assign), repr(self.list), repr(self.body), repr(self.else_)) class From(Node): def __init__(self, modname, names, level, lineno=None): self.modname = modname self.names = names self.level = level self.lineno = lineno def getChildren(self): return self.modname, self.names, self.level def getChildNodes(self): return () def __repr__(self): return "From(%s, %s, %s)" % (repr(self.modname), repr(self.names), repr(self.level)) class Function(Node): def __init__(self, decorators, name, argnames, defaults, flags, doc, code, lineno=None): self.decorators = decorators self.name = name self.argnames = argnames self.defaults = defaults self.flags = flags self.doc = doc self.code = code self.lineno = lineno self.varargs = self.kwargs = None if flags & CO_VARARGS: self.varargs = 1 if flags & CO_VARKEYWORDS: self.kwargs = 1 def getChildren(self): children = [] children.append(self.decorators) children.append(self.name) children.append(self.argnames) children.extend(flatten(self.defaults)) children.append(self.flags) children.append(self.doc) children.append(self.code) return tuple(children) def getChildNodes(self): nodelist = [] if self.decorators is not None: nodelist.append(self.decorators) nodelist.extend(flatten_nodes(self.defaults)) nodelist.append(self.code) return tuple(nodelist) def __repr__(self): return "Function(%s, %s, %s, %s, %s, %s, %s)" % (repr(self.decorators), repr(self.name), repr(self.argnames), repr(self.defaults), repr(self.flags), repr(self.doc), repr(self.code)) class GenExpr(Node): def __init__(self, code, lineno=None): self.code = code self.lineno = lineno self.argnames = ['.0'] self.varargs = self.kwargs = None def getChildren(self): return self.code, def getChildNodes(self): return self.code, def __repr__(self): return "GenExpr(%s)" % (repr(self.code),) class GenExprFor(Node): def __init__(self, assign, iter, ifs, lineno=None): self.assign = assign self.iter = iter self.ifs = ifs self.lineno = lineno self.is_outmost = False def getChildren(self): children = [] children.append(self.assign) children.append(self.iter) children.extend(flatten(self.ifs)) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.append(self.assign) nodelist.append(self.iter) nodelist.extend(flatten_nodes(self.ifs)) return tuple(nodelist) def __repr__(self): return "GenExprFor(%s, %s, %s)" % (repr(self.assign), repr(self.iter), repr(self.ifs)) class GenExprIf(Node): def __init__(self, test, lineno=None): self.test = test self.lineno = lineno def getChildren(self): return self.test, def getChildNodes(self): return self.test, def __repr__(self): return "GenExprIf(%s)" % (repr(self.test),) class GenExprInner(Node): def __init__(self, expr, quals, lineno=None): self.expr = expr self.quals = quals self.lineno = lineno def getChildren(self): children = [] children.append(self.expr) children.extend(flatten(self.quals)) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.append(self.expr) nodelist.extend(flatten_nodes(self.quals)) return tuple(nodelist) def __repr__(self): return "GenExprInner(%s, %s)" % (repr(self.expr), repr(self.quals)) class Getattr(Node): def __init__(self, expr, attrname, lineno=None): self.expr = expr self.attrname = attrname self.lineno = lineno def getChildren(self): return self.expr, self.attrname def getChildNodes(self): return self.expr, def __repr__(self): return "Getattr(%s, %s)" % (repr(self.expr), repr(self.attrname)) class Global(Node): def __init__(self, names, lineno=None): self.names = names self.lineno = lineno def getChildren(self): return self.names, def getChildNodes(self): return () def __repr__(self): return "Global(%s)" % (repr(self.names),) class If(Node): def __init__(self, tests, else_, lineno=None): self.tests = tests self.else_ = else_ self.lineno = lineno def getChildren(self): children = [] children.extend(flatten(self.tests)) children.append(self.else_) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.tests)) if self.else_ is not None: nodelist.append(self.else_) return tuple(nodelist) def __repr__(self): return "If(%s, %s)" % (repr(self.tests), repr(self.else_)) class IfExp(Node): def __init__(self, test, then, else_, lineno=None): self.test = test self.then = then self.else_ = else_ self.lineno = lineno def getChildren(self): return self.test, self.then, self.else_ def getChildNodes(self): return self.test, self.then, self.else_ def __repr__(self): return "IfExp(%s, %s, %s)" % (repr(self.test), repr(self.then), repr(self.else_)) class Import(Node): def __init__(self, names, lineno=None): self.names = names self.lineno = lineno def getChildren(self): return self.names, def getChildNodes(self): return () def __repr__(self): return "Import(%s)" % (repr(self.names),) class Invert(Node): def __init__(self, expr, lineno=None): self.expr = expr self.lineno = lineno def getChildren(self): return self.expr, def getChildNodes(self): return self.expr, def __repr__(self): return "Invert(%s)" % (repr(self.expr),) class Keyword(Node): def __init__(self, name, expr, lineno=None): self.name = name self.expr = expr self.lineno = lineno def getChildren(self): return self.name, self.expr def getChildNodes(self): return self.expr, def __repr__(self): return "Keyword(%s, %s)" % (repr(self.name), repr(self.expr)) class Lambda(Node): def __init__(self, argnames, defaults, flags, code, lineno=None): self.argnames = argnames self.defaults = defaults self.flags = flags self.code = code self.lineno = lineno self.varargs = self.kwargs = None if flags & CO_VARARGS: self.varargs = 1 if flags & CO_VARKEYWORDS: self.kwargs = 1 def getChildren(self): children = [] children.append(self.argnames) children.extend(flatten(self.defaults)) children.append(self.flags) children.append(self.code) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.defaults)) nodelist.append(self.code) return tuple(nodelist) def __repr__(self): return "Lambda(%s, %s, %s, %s)" % (repr(self.argnames), repr(self.defaults), repr(self.flags), repr(self.code)) class LeftShift(Node): def __init__(self, leftright, lineno=None): self.left = leftright[0] self.right = leftright[1] self.lineno = lineno def getChildren(self): return self.left, self.right def getChildNodes(self): return self.left, self.right def __repr__(self): return "LeftShift((%s, %s))" % (repr(self.left), repr(self.right)) class List(Node): def __init__(self, nodes, lineno=None): self.nodes = nodes self.lineno = lineno def getChildren(self): return tuple(flatten(self.nodes)) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.nodes)) return tuple(nodelist) def __repr__(self): return "List(%s)" % (repr(self.nodes),) class ListComp(Node): def __init__(self, expr, quals, lineno=None): self.expr = expr self.quals = quals self.lineno = lineno def getChildren(self): children = [] children.append(self.expr) children.extend(flatten(self.quals)) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.append(self.expr) nodelist.extend(flatten_nodes(self.quals)) return tuple(nodelist) def __repr__(self): return "ListComp(%s, %s)" % (repr(self.expr), repr(self.quals)) class ListCompFor(Node): def __init__(self, assign, list, ifs, lineno=None): self.assign = assign self.list = list self.ifs = ifs self.lineno = lineno def getChildren(self): children = [] children.append(self.assign) children.append(self.list) children.extend(flatten(self.ifs)) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.append(self.assign) nodelist.append(self.list) nodelist.extend(flatten_nodes(self.ifs)) return tuple(nodelist) def __repr__(self): return "ListCompFor(%s, %s, %s)" % (repr(self.assign), repr(self.list), repr(self.ifs)) class ListCompIf(Node): def __init__(self, test, lineno=None): self.test = test self.lineno = lineno def getChildren(self): return self.test, def getChildNodes(self): return self.test, def __repr__(self): return "ListCompIf(%s)" % (repr(self.test),) class Mod(Node): def __init__(self, leftright, lineno=None): self.left = leftright[0] self.right = leftright[1] self.lineno = lineno def getChildren(self): return self.left, self.right def getChildNodes(self): return self.left, self.right def __repr__(self): return "Mod((%s, %s))" % (repr(self.left), repr(self.right)) class Module(Node): def __init__(self, doc, node, lineno=None): self.doc = doc self.node = node self.lineno = lineno def getChildren(self): return self.doc, self.node def getChildNodes(self): return self.node, def __repr__(self): return "Module(%s, %s)" % (repr(self.doc), repr(self.node)) class Mul(Node): def __init__(self, leftright, lineno=None): self.left = leftright[0] self.right = leftright[1] self.lineno = lineno def getChildren(self): return self.left, self.right def getChildNodes(self): return self.left, self.right def __repr__(self): return "Mul((%s, %s))" % (repr(self.left), repr(self.right)) class Name(Node): def __init__(self, name, lineno=None): self.name = name self.lineno = lineno def getChildren(self): return self.name, def getChildNodes(self): return () def __repr__(self): return "Name(%s)" % (repr(self.name),) class Not(Node): def __init__(self, expr, lineno=None): self.expr = expr self.lineno = lineno def getChildren(self): return self.expr, def getChildNodes(self): return self.expr, def __repr__(self): return "Not(%s)" % (repr(self.expr),) class Or(Node): def __init__(self, nodes, lineno=None): self.nodes = nodes self.lineno = lineno def getChildren(self): return tuple(flatten(self.nodes)) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.nodes)) return tuple(nodelist) def __repr__(self): return "Or(%s)" % (repr(self.nodes),) class Pass(Node): def __init__(self, lineno=None): self.lineno = lineno def getChildren(self): return () def getChildNodes(self): return () def __repr__(self): return "Pass()" class Power(Node): def __init__(self, leftright, lineno=None): self.left = leftright[0] self.right = leftright[1] self.lineno = lineno def getChildren(self): return self.left, self.right def getChildNodes(self): return self.left, self.right def __repr__(self): return "Power((%s, %s))" % (repr(self.left), repr(self.right)) class Print(Node): def __init__(self, nodes, dest, lineno=None): self.nodes = nodes self.dest = dest self.lineno = lineno def getChildren(self): children = [] children.extend(flatten(self.nodes)) children.append(self.dest) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.nodes)) if self.dest is not None: nodelist.append(self.dest) return tuple(nodelist) def __repr__(self): return "Print(%s, %s)" % (repr(self.nodes), repr(self.dest)) class Printnl(Node): def __init__(self, nodes, dest, lineno=None): self.nodes = nodes self.dest = dest self.lineno = lineno def getChildren(self): children = [] children.extend(flatten(self.nodes)) children.append(self.dest) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.nodes)) if self.dest is not None: nodelist.append(self.dest) return tuple(nodelist) def __repr__(self): return "Printnl(%s, %s)" % (repr(self.nodes), repr(self.dest)) class Raise(Node): def __init__(self, expr1, expr2, expr3, lineno=None): self.expr1 = expr1 self.expr2 = expr2 self.expr3 = expr3 self.lineno = lineno def getChildren(self): children = [] children.append(self.expr1) children.append(self.expr2) children.append(self.expr3) return tuple(children) def getChildNodes(self): nodelist = [] if self.expr1 is not None: nodelist.append(self.expr1) if self.expr2 is not None: nodelist.append(self.expr2) if self.expr3 is not None: nodelist.append(self.expr3) return tuple(nodelist) def __repr__(self): return "Raise(%s, %s, %s)" % (repr(self.expr1), repr(self.expr2), repr(self.expr3)) class Return(Node): def __init__(self, value, lineno=None): self.value = value self.lineno = lineno def getChildren(self): return self.value, def getChildNodes(self): return self.value, def __repr__(self): return "Return(%s)" % (repr(self.value),) class RightShift(Node): def __init__(self, leftright, lineno=None): self.left = leftright[0] self.right = leftright[1] self.lineno = lineno def getChildren(self): return self.left, self.right def getChildNodes(self): return self.left, self.right def __repr__(self): return "RightShift((%s, %s))" % (repr(self.left), repr(self.right)) class Slice(Node): def __init__(self, expr, flags, lower, upper, lineno=None): self.expr = expr self.flags = flags self.lower = lower self.upper = upper self.lineno = lineno def getChildren(self): children = [] children.append(self.expr) children.append(self.flags) children.append(self.lower) children.append(self.upper) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.append(self.expr) if self.lower is not None: nodelist.append(self.lower) if self.upper is not None: nodelist.append(self.upper) return tuple(nodelist) def __repr__(self): return "Slice(%s, %s, %s, %s)" % (repr(self.expr), repr(self.flags), repr(self.lower), repr(self.upper)) class Sliceobj(Node): def __init__(self, nodes, lineno=None): self.nodes = nodes self.lineno = lineno def getChildren(self): return tuple(flatten(self.nodes)) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.nodes)) return tuple(nodelist) def __repr__(self): return "Sliceobj(%s)" % (repr(self.nodes),) class Stmt(Node): def __init__(self, nodes, lineno=None): self.nodes = nodes self.lineno = lineno def getChildren(self): return tuple(flatten(self.nodes)) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.nodes)) return tuple(nodelist) def __repr__(self): return "Stmt(%s)" % (repr(self.nodes),) class Sub(Node): def __init__(self, leftright, lineno=None): self.left = leftright[0] self.right = leftright[1] self.lineno = lineno def getChildren(self): return self.left, self.right def getChildNodes(self): return self.left, self.right def __repr__(self): return "Sub((%s, %s))" % (repr(self.left), repr(self.right)) class Subscript(Node): def __init__(self, expr, flags, subs, lineno=None): self.expr = expr self.flags = flags self.subs = subs self.lineno = lineno def getChildren(self): children = [] children.append(self.expr) children.append(self.flags) children.extend(flatten(self.subs)) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.append(self.expr) nodelist.extend(flatten_nodes(self.subs)) return tuple(nodelist) def __repr__(self): return "Subscript(%s, %s, %s)" % (repr(self.expr), repr(self.flags), repr(self.subs)) class TryExcept(Node): def __init__(self, body, handlers, else_, lineno=None): self.body = body self.handlers = handlers self.else_ = else_ self.lineno = lineno def getChildren(self): children = [] children.append(self.body) children.extend(flatten(self.handlers)) children.append(self.else_) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.append(self.body) nodelist.extend(flatten_nodes(self.handlers)) if self.else_ is not None: nodelist.append(self.else_) return tuple(nodelist) def __repr__(self): return "TryExcept(%s, %s, %s)" % (repr(self.body), repr(self.handlers), repr(self.else_)) class TryFinally(Node): def __init__(self, body, final, lineno=None): self.body = body self.final = final self.lineno = lineno def getChildren(self): return self.body, self.final def getChildNodes(self): return self.body, self.final def __repr__(self): return "TryFinally(%s, %s)" % (repr(self.body), repr(self.final)) class Tuple(Node): def __init__(self, nodes, lineno=None): self.nodes = nodes self.lineno = lineno def getChildren(self): return tuple(flatten(self.nodes)) def getChildNodes(self): nodelist = [] nodelist.extend(flatten_nodes(self.nodes)) return tuple(nodelist) def __repr__(self): return "Tuple(%s)" % (repr(self.nodes),) class UnaryAdd(Node): def __init__(self, expr, lineno=None): self.expr = expr self.lineno = lineno def getChildren(self): return self.expr, def getChildNodes(self): return self.expr, def __repr__(self): return "UnaryAdd(%s)" % (repr(self.expr),) class UnarySub(Node): def __init__(self, expr, lineno=None): self.expr = expr self.lineno = lineno def getChildren(self): return self.expr, def getChildNodes(self): return self.expr, def __repr__(self): return "UnarySub(%s)" % (repr(self.expr),) class While(Node): def __init__(self, test, body, else_, lineno=None): self.test = test self.body = body self.else_ = else_ self.lineno = lineno def getChildren(self): children = [] children.append(self.test) children.append(self.body) children.append(self.else_) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.append(self.test) nodelist.append(self.body) if self.else_ is not None: nodelist.append(self.else_) return tuple(nodelist) def __repr__(self): return "While(%s, %s, %s)" % (repr(self.test), repr(self.body), repr(self.else_)) class With(Node): def __init__(self, expr, vars, body, lineno=None): self.expr = expr self.vars = vars self.body = body self.lineno = lineno def getChildren(self): children = [] children.append(self.expr) children.append(self.vars) children.append(self.body) return tuple(children) def getChildNodes(self): nodelist = [] nodelist.append(self.expr) if self.vars is not None: nodelist.append(self.vars) nodelist.append(self.body) return tuple(nodelist) def __repr__(self): return "With(%s, %s, %s)" % (repr(self.expr), repr(self.vars), repr(self.body)) class Yield(Node): def __init__(self, value, lineno=None): self.value = value self.lineno = lineno def getChildren(self): return self.value, def getChildNodes(self): return self.value, def __repr__(self): return "Yield(%s)" % (repr(self.value),) for name, obj in globals().items(): if isinstance(obj, type) and issubclass(obj, Node): nodes[name.lower()] = obj PK’[f<ß5ù×ù× pycodegen.pyonuW+A„¶Ñò §ÚêLc@söddkZddkZddkZddkZddkZddklZddklZl Z l Z l Z ddkl Z l Z lZlZddklZlZlZlZddklZlZlZlZlZlZlZlZlZddklZyei dZ!Wne"j o d Z!nXhd ddf6d d df6d dd f6d d d f6Z#d Z$dZ%dZ&dZ'dd„Z(e)e)d„Z*dfd„ƒYZ+de+fd„ƒYZ,de+fd„ƒYZ-de+fd„ƒYZ.dfd„ƒYZ/d„Z0dfd„ƒYZ1d fd!„ƒYZ2d"e2e1fd#„ƒYZ3d$e2e1fd%„ƒYZ4d&e2e1fd'„ƒYZ5d(fd)„ƒYZ6d*e2e6e1fd+„ƒYZ7d,e2e6e1fd-„ƒYZ8d.fd/„ƒYZ9d0e2e9e1fd1„ƒYZ:d2„Z;d3„Z<d4fd5„ƒYZ=d6fd7„ƒYZ>d8e>fd9„ƒYZ?d:e>fd;„ƒYZ@d<e>fd=„ƒYZAd>e>fd?„ƒYZBhe?eiC6e@eiD6eAeiE6eBeiF6ZGd@„ZHeIdAjo&xeiJd D]ZKe(eKƒqÚWndS(BiÿÿÿÿN(tStringIO(tasttparsetwalktsyntax(tpyassemtmisctfuturetsymbols(tSC_LOCALt SC_GLOBALtSC_FREEtSC_CELL( t CO_VARARGStCO_VARKEYWORDSt CO_NEWLOCALSt CO_NESTEDt CO_GENERATORtCO_FUTURE_DIVISIONtCO_FUTURE_ABSIMPORTtCO_FUTURE_WITH_STATEMENTtCO_FUTURE_PRINT_FUNCTION(tTupleArgiit CALL_FUNCTIONtCALL_FUNCTION_VARtCALL_FUNCTION_KWtCALL_FUNCTION_VAR_KWiiicCsŒt|dƒ}|iƒ}|iƒt||ƒ}y|i|ƒWntj o ‚n,Xt|ddƒ}|i|ƒ|iƒdS(NtUtctwb(topentreadtclosetModuletcompilet SyntaxErrortdump(tfilenametdisplaytftbuftmod((s*/usr/lib64/python2.6/compiler/pycodegen.pyt compileFile$s   cCs¤|dj p |dj o td‚n|djot||ƒ}nM|djot||ƒ}n-|djot||ƒ}n tdƒ‚|iƒ|iS(s*Replacement for builtin compile() functionsnot implemented yettsingletexectevals6compile() 3rd arg must be 'exec' or 'eval' or 'single'N(tNonet RuntimeErrort InteractiveR!t Expressiont ValueErrorR"tcode(tsourceR%tmodetflagst dont_inherittgen((s*/usr/lib64/python2.6/compiler/pycodegen.pyR"2s      tAbstractCompileModecBs2eZdZd„Zd„Zd„Zd„ZRS(cCs||_||_d|_dS(N(R4R%R.R3(tselfR4R%((s*/usr/lib64/python2.6/compiler/pycodegen.pyt__init__Gs  cCs9t|i|iƒ}ti|i|ƒti|ƒ|S(N(RR4R5Rt set_filenameR%Rtcheck(R:ttree((s*/usr/lib64/python2.6/compiler/pycodegen.pyt _get_treeLs cCsdS(N((R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR"RscCs|iS(N(R3(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pytgetCodeUsN(t__name__t __module__R.R5R;R?R"R@(((s*/usr/lib64/python2.6/compiler/pycodegen.pyR9Cs    R1cBseZdZd„ZRS(R-cCs+|iƒ}t|ƒ}|iƒ|_dS(N(R?tExpressionCodeGeneratorR@R3(R:R>R8((s*/usr/lib64/python2.6/compiler/pycodegen.pyR"\s  (RARBR5R"(((s*/usr/lib64/python2.6/compiler/pycodegen.pyR1XsR0cBseZdZd„ZRS(R+cCs+|iƒ}t|ƒ}|iƒ|_dS(N(R?tInteractiveCodeGeneratorR@R3(R:R>R8((s*/usr/lib64/python2.6/compiler/pycodegen.pyR"es  (RARBR5R"(((s*/usr/lib64/python2.6/compiler/pycodegen.pyR0asR!cBs8eZdZdd„Zd„ZeiƒZd„ZRS(R,icCsP|iƒ}t|ƒ}|oddk}|i|ƒGHn|iƒ|_dS(Niÿÿÿÿ(R?tModuleCodeGeneratortpprintR@R3(R:R&R>R8RF((s*/usr/lib64/python2.6/compiler/pycodegen.pyR"ns    cCs*|i|iƒƒti|i|ƒdS(N(twritet getPycHeadertmarshalR$R3(R:R'((s*/usr/lib64/python2.6/compiler/pycodegen.pyR$vscCs2tii|iƒ}tid|ƒ}|i|S(Ns|iiƒD]-}|ii|ƒo|ii|ƒqqW|iS(N(RVtelementsRUthas_elttremove(R:telt((s*/usr/lib64/python2.6/compiler/pycodegen.pyt getLocalss cCsdS(N((R:tnode((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitDict•scCs(x!|iD]}|ii|ƒq WdS(N(RURVRW(R:R^RX((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitGlobal˜s cCs|ii|iƒdS(N(RURWRX(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitFunctionœscCsdS(N((R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitLambdaŸscCs5x.|iD]#\}}|ii|p|ƒq WdS(N(RURW(R:R^RXtalias((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitImport¢s cCs5x.|iD]#\}}|ii|p|ƒq WdS(N(RURW(R:R^RXRc((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitFrom¦s cCs|ii|iƒdS(N(RURWRX(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitClassªscCs|ii|iƒdS(N(RURWRX(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitAssName­s(( RARBt__doc__R;R]R_R`RaRbRdReRfRg(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRS…s         cCs*t|tiƒo|ipdSndS(Nii(t isinstanceRtConsttvalue(R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytis_constant_false°s  t CodeGeneratorcBsBeZdZdZdZdZd„Zd„Zd„Z d„Z d„Z d„Z d„Z d „Zd „Zd „Zd „Zd „Zd„Zd„Zed„ZeZdZdZd„Zd„Zd„Zd„Zdd„Zd„Z d„Z!d„Z"d„Z#d„Z$d„Z%d„Z&d„Z'd„Z(d„Z)d „Z*dZ+d!„Z,d"„Z-d#„Z.d$„Z/d%„Z0d&„Z1d'„Z2d(„Z3d)„Z4d*„Z5d+„Z6d,„Z7dZ8d-„Z9d.„Z:d/„Z;d0„Z<d1„Z=d2„Z>d3„Z?d4„Z@d5„ZAd6„ZBd7„ZCd8„ZDd9„ZEd:„ZFd;d<„ZGeHd=joeGZIeGZJnd>„ZId?„ZJd@„ZKh dAdB6dCdD6dEdF6dGdH6dIdJ6dKdL6dMdN6dOdP6dQdR6dSdT6dUdV6dWdX6ZLdY„ZMdZ„ZNd[„ZOd\„ZPd]„ZQd^„ZRdd_„ZSd`„ZTda„ZUdb„ZVddc„ZWddd„ZXde„ZYdf„ZZdg„Z[dh„Z\di„Z]dj„Z^dk„Z_dl„Z`dm„Zadn„Zbdo„Zcdp„Zddq„Zedr„Zfds„Zgdt„Zhdu„Zidv„Zjdw„Zkdx„Zldy„Zmdz„Znd{„Zod|„Zpd}„Zqd~„ZrRS(€síDefines basic code generator for Python bytecode This class is an abstract base class. Concrete subclasses must define an __init__() that defines self.graph and then calls the __init__() defined in this class. The concrete class must also define the class attributes NameFinder, FunctionGen, and ClassGen. These attributes can be defined in the initClass() method, which is a hook for initializing these methods after all the classes have been defined. icCs|idjo|iƒd|i_n|iƒtiƒ|_tiƒ|_d|_ |i ƒd|_ |i ƒi }x›|D]“}|djo|iitƒd|_ q„|djo|iitƒq„|djo|iitƒq„|djo|iitƒq„q„WdS(Nit BINARY_DIVIDEtdivisiontBINARY_TRUE_DIVIDEtabsolute_importtwith_statementtprint_function(t_CodeGenerator__initializedR.t initClasst __class__t checkClassRtStacktlocalstsetupst last_linenot_setupGraphDelegationt_div_opt get_moduletfuturestgraphtsetFlagRRRR(R:Rtfeature((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;Ès*          cCsdS(s)This method is called once for each classN((R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyRuàscCs9yWn.tj o"}d|ii}t|‚nXdS(s*Verify that class is constructed correctlysBad class construction for %sN(tAssertionErrorRvRA(R:tmsgtintro((s*/usr/lib64/python2.6/compiler/pycodegen.pyRwãs cCsO|ii|_|ii|_|ii|_|ii|_|ii|_dS(N(R€temittnewBlockt startBlockt nextBlockt setDocstring(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR|îs cCs |iiƒS(sReturn a code object(R€R@(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR@õscCs,|idj oti||iƒS|SdS(N(t class_nameR.Rtmangle(R:RX((s*/usr/lib64/python2.6/compiler/pycodegen.pyRŒùscCs tiƒ}t||ƒ|iS(N(Rt SymbolVisitorRtscopes(R:R>ts((s*/usr/lib64/python2.6/compiler/pycodegen.pyt parseSymbolsÿs  cCs td‚dS(Ns#should be implemented by subclasses(R/(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR~scCs|iiƒi|ƒS(N(RyttopRZ(R:RX((s*/usr/lib64/python2.6/compiler/pycodegen.pyt isLocalName scCs|id|ƒdS(NtSTORE(t_nameOp(R:RX((s*/usr/lib64/python2.6/compiler/pycodegen.pyt storeName scCs|id|ƒdS(NtLOAD(R”(R:RX((s*/usr/lib64/python2.6/compiler/pycodegen.pytloadNamescCs|id|ƒdS(NtDELETE(R”(R:RX((s*/usr/lib64/python2.6/compiler/pycodegen.pytdelNamescCsø|i|ƒ}|ii|ƒ}|tjo:|ip|i|d|ƒqô|i|d|ƒn|tjo:|ip|i|d|ƒqô|i|d|ƒnF|tjp |tjo|i|d|ƒnt d||f‚dS(Nt_NAMEt_FASTt_GLOBALt_DEREFs unsupported scope for var %s: %d( RŒtscopet check_nameR t optimizedR†R R R R/(R:tprefixRXRž((s*/usr/lib64/python2.6/compiler/pycodegen.pyR”s    cCs:|io|i|d|ƒn|i|d|ƒdS(sûEmit name ops for names generated implicitly by for loops The interpreter generates names that start with a period or dollar sign. The symbol table ignores these names because they aren't present in the program text. R›RšN(R R†(R:R¡RX((s*/usr/lib64/python2.6/compiler/pycodegen.pyt_implicitNameOp(s cCsXt|ddƒ}|dj o5||ijp|o|id|ƒ||_tStS(søEmit SET_LINENO if necessary. The instruction is considered necessary if the node has a lineno attribute and it is different than the last lineno emitted. Returns true if SET_LINENO was emitted. There are no rules for when an AST node should have a lineno attribute. The transformer and AST code need to be reviewed and a consistent policy implemented and documented. Until then, this method works around missing line numbers. tlinenot SET_LINENON(tgetattrR.R{R†tTruetFalse(R:R^tforceR£((s*/usr/lib64/python2.6/compiler/pycodegen.pyt set_lineno9s cCsÅ|i|ƒ|_|i||_|iddƒ|io$|id|iƒ|idƒnt|i|iƒddƒ}|i i |i ƒƒ|i |iƒ|iddƒ|idƒdS(NR¤it LOAD_CONSTRhtverboset RETURN_VALUE(RRŽRžR†tdocR•RR^t NameFinderRytpushR]tvisitR.(R:R^tlnf((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitModuleWs cCsP|i|ƒ|i|ƒ|_|i||_|i|iƒ|idƒdS(NR¬(R©RRŽRžR°R^R†(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitExpressionds  cCsE|i|ddƒ|io|i|iƒn|i|iƒdS(NtisLambdai(t_visitFuncOrLambdaR­RŠR•RX(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyRaks cCs|i|ddƒdS(NR´i(Rµ(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyRbqscCs| oD|io:x!|iiD]}|i|ƒqWt|iiƒ}nd}|i||i||i|iƒƒ}t|i |ƒ|i ƒ|i |ƒx|i D]}|i|ƒqªW|i |t|i ƒƒx$t|ƒD]}|iddƒqçWdS(NiRi(t decoratorstnodesR°tlent FunctionGenRŽR‹R~RR3tfinishR©tdefaultst _makeClosuretrangeR†(R:R^R´t decoratort ndecoratorsR8tdefaultti((s*/usr/lib64/python2.6/compiler/pycodegen.pyRµts$     cCsÓ|i||i|iƒƒ}t|i|ƒ|iƒ|i|ƒ|id|iƒx|i D]}|i |ƒqbW|idt |i ƒƒ|i |dƒ|iddƒ|idƒ|i |iƒdS(NRªt BUILD_TUPLEiRt BUILD_CLASS(tClassGenRŽR~RR3RºR©R†RXtbasesR°R¸R¼R•(R:R^R8tbase((s*/usr/lib64/python2.6/compiler/pycodegen.pyRf‡s    cCs |iƒ}t|iƒ}x¿t|ƒD]±}|i|\}}t|ƒoq(n|i|ƒ|i|ƒ|iƒ}|id|ƒ|iƒ|idƒ|i|ƒ|id|ƒ|i |ƒ|idƒq(W|i o|i|i ƒn|i|ƒdS(Nt JUMP_IF_FALSEtPOP_TOPt JUMP_FORWARD( R‡R¸ttestsR½RlR©R°R†R‰Rˆtelse_(R:R^tendtnumtestsRÁttesttsuitetnextTest((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitIfšs(           cCs8|i|ƒ|iƒ}|iƒ}|iƒ}|id|ƒ|i|ƒ|iit|fƒ|i|dtƒ|i|i ƒ|id|p|ƒ|iƒ|idƒ|i|i ƒ|id|ƒ|i |ƒ|idƒ|idƒ|ii ƒ|i o|i|i ƒn|i|ƒdS(Nt SETUP_LOOPR¨RÇRÈt JUMP_ABSOLUTEt POP_BLOCK(R©R‡R†R‰RzR¯tLOOPR¦R°RÎtbodyRˆtpopRË(R:R^tloopRËtafter((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitWhile°s*            cCs*|iƒ}|iƒ}|iƒ}|iit|fƒ|i|ƒ|id|ƒ|i|iƒ|idƒ|i|ƒ|i|ddƒ|id|ƒ|i|i ƒ|i|i ƒ|id|ƒ|i|ƒ|idƒ|ii ƒ|i o|i|i ƒn|i|ƒdS(NRÒtGET_ITERR¨itFOR_ITERRÓRÔ( R‡RzR¯RÕR©R†R°tlistR‰tassignRÖR×RË(R:R^tstarttanchorRÙ((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitForÍs(          cCsE|iptd|i|if‚n|i|ƒ|idƒdS(Ns'break' outside loop (%s, %d)t BREAK_LOOP(RzR#R%R£R©R†(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitBreakås   cCsj|iptd|i|if‚n|iiƒ\}}|tjo+|i|ƒ|id|ƒ|iƒnó|t jp |t jo¨|i|ƒt |iƒ}xA|djo3|d}|i|\}}|tjoPq­q­W|tjotd|i|if‚n|id|ƒ|iƒn1|t jo#d}t||i|if‚ndS(Ns 'continue' outside loop (%s, %d)RÓiit CONTINUE_LOOPs7'continue' not allowed inside 'finally' clause (%s, %d)( RzR#R%R£R‘RÕR©R†R‰tEXCEPTt TRY_FINALLYR¸t END_FINALLY(R:R^tkindtblockR‘t loop_blockR„((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitContinueìs2          cCs}|iƒ}xI|id D]:}|i|ƒ|i||ƒ|iƒ|idƒqW|i|idƒ|i|ƒdS(NiÿÿÿÿRÈ(R‡R·R°R†R‰(R:R^tjumpRÌtchild((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitTests   cCs|i|dƒdS(NRÇ(Rî(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitAndscCs|i|dƒdS(Nt JUMP_IF_TRUE(Rî(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitOrscCs |iƒ}|iƒ}|i|iƒ|id|ƒ|idƒ|i|iƒ|id|ƒ|i|ƒ|idƒ|i|iƒ|i|ƒdS(NRÇRÈRÉ(R‡R°RÎR†tthenR‰RË(R:R^tendblockt elseblock((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitIfExps     cCsD|i|iƒ|iƒ}xy|id D]j\}}|i|ƒ|idƒ|idƒ|id|ƒ|id|ƒ|iƒ|idƒq*W|io4|id\}}|i|ƒ|id|ƒnt|iƒdjoT|iƒ}|id|ƒ|i|ƒ|id ƒ|idƒ|i|ƒndS( NiÿÿÿÿtDUP_TOPt ROT_THREEt COMPARE_OPRÇRÈiRÉtROT_TWO(R°texprR‡topsR†R‰R¸Rˆ(R:R^tcleanuptopR3RÌ((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitCompare$s,            c CsÚ|i|ƒd|i}|id|_|iddƒ|idƒ|id|ƒg}x¤ttt|iƒƒ|iƒD]\}}|i|ƒ\}}d}x>|i D]3} |djo|i ƒ}n|i| |ƒq°W|i d|||fƒqW|id|ƒ|i|i ƒ|idƒx‚|D]z\}}}|oG|i ƒ} |id | ƒ|i|ƒ|id ƒ|i| ƒn|id |ƒ|i|ƒq8W|id |ƒ|id|_dS( Ns$list%dit BUILD_LISTiRöR“R–t LIST_APPENDRÉRÈRÓR˜(R©t_CodeGenerator__list_countR†R¢tzipR½R¸tqualsR°R.tifsR‡tinsertRúRˆR‰( R:R^ttmpnametstackRÁtfor_RßRàtconttif_tskip_one((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitListComp?s@   "       cCs‰|iƒ}|iƒ}|i|iƒ|idƒ|i|ƒ|i|dtƒ|id|ƒ|iƒ|i|iƒ||fS(NRÛR¨RÜ(R‡R°RÝR†R‰R©R¦RÞ(R:R^RßRà((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitListCompForcs     cCsN|i|dtƒ|i|iƒ|id|ƒ|iƒ|idƒdS(NR¨RÇRÈ(R©R¦R°RÎR†R‡(R:R^tbranch((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitListCompIfps  cCs•|iiƒ}|o[x|D]}|id|ƒqW|idt|ƒƒ|id|ƒ|id|ƒn!|id|ƒ|id|ƒdS(Nt LOAD_CLOSURERÂRªt MAKE_CLOSUREt MAKE_FUNCTION(Ržt get_free_varsR†R¸(R:R8targstfreesRX((s*/usr/lib64/python2.6/compiler/pycodegen.pyR¼wscCs“t||i|i|iƒƒ}t|i|ƒ|iƒ|i|ƒ|i|dƒ|i |ii di ƒ|i dƒ|i ddƒdS(NiRÛRi( tGenExprCodeGeneratorRŽR‹R~RR3RºR©R¼R°RtiterR†(R:R^R8((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitGenExprƒs   c Cs­|i|ƒg}xªttt|iƒƒ|iƒD]‡\}}|i|ƒ\}}}d}x>|iD]3} |djo|iƒ}n|i| |ƒqiW|i d||||fƒq5W|i|i ƒ|i dƒ|i dƒx¬|D]¤\}}}}|oG|iƒ} |i d| ƒ|i |ƒ|i dƒ|i | ƒn|i d|ƒ|i |ƒ|i dƒ|iiƒ|i |ƒqñW|i ddƒdS(Nit YIELD_VALUERÈRÉRÓRÔRª(R©RR½R¸RR°R.RR‡RRúR†RˆR‰RzR×( R:R^RRÁRRßRàRÌR R R ((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitGenExprInners: "            cCsÙ|iƒ}|iƒ}|iƒ}|iit|fƒ|id|ƒ|io|idƒn|i|iƒ|idƒ|i |ƒ|i |dt ƒ|id|ƒ|i ƒ|i|i ƒ|||fS(NRÒs.0RÛR¨RÜ( R‡RzR¯RÕR†t is_outmostR—R°RR‰R©R¦RÞ(R:R^RßRàRÌ((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitGenExprFor°s       cCsN|i|dtƒ|i|iƒ|id|ƒ|iƒ|idƒdS(NR¨RÇRÈ(R©R¦R°RÎR†R‡(R:R^R((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitGenExprIfÅs  cCsdS(N((R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitAssertÎscCsŸ|i|ƒd}|io|i|iƒ|d}n|io|i|iƒ|d}n|io|i|iƒ|d}n|id|ƒdS(Niit RAISE_VARARGS(R©texpr1R°texpr2texpr3R†(R:R^tn((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitRaiseås    c Csh|iƒ}|iƒ}|iƒ}|io|iƒ}n|}|i|ƒ|id|ƒ|i|ƒ|iit|fƒ|i|i ƒ|idƒ|ii ƒ|id|ƒ|i |ƒt |i ƒd}x>tt |i ƒƒD]'}|i |\}} }|i|ƒ|oa|idƒ|i|ƒ|iddƒ|iƒ} |id| ƒ|iƒ|id ƒn|id ƒ| o|i| ƒn|id ƒ|id ƒ|i|ƒ|id|ƒ|o|i| ƒn |iƒ|o|id ƒqôqôW|id ƒ|io!|i|ƒ|i|iƒn|i|ƒdS( Nt SETUP_EXCEPTRÔRÉiRöRøsexception matchRÇRÈRç(R‡RËR©R†R‰RzR¯RåR°RÖR×RˆR¸thandlersR½( R:R^RÖR&RÌtlElsetlastRÁRúttargettnext((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitTryExceptósZ                      cCsã|iƒ}|iƒ}|i|ƒ|id|ƒ|i|ƒ|iit|fƒ|i|iƒ|idƒ|ii ƒ|iddƒ|i|ƒ|iit |fƒ|i|i ƒ|idƒ|ii ƒdS(Nt SETUP_FINALLYRÔRªRç( R‡R©R†R‰RzR¯RæR°RÖR×R.Rçtfinal(R:R^RÖR-((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitTryFinally%s        cCsÚ|iƒ}|iƒ}d|i}|id7_|i|ƒ|i|iƒ|idƒ|iddƒ|idƒ|iddƒ|idd ƒ|idjo|id ƒn|id |ƒ|id |ƒ|i |ƒ|i i t |fƒ|idj o4|id |ƒ|id|ƒ|i|iƒn|i|i ƒ|idƒ|i iƒ|iddƒ|i |ƒ|i i t|fƒ|idƒ|idƒ|i iƒ|id8_dS(Ns$value%diRöt LOAD_ATTRt__exit__Rùt __enter__RiRÈR“R,R–R˜RÔRªt WITH_CLEANUPRç(R‡t_CodeGenerator__with_countR©R°RúR†tvarsR.R¢R‰RzR¯RæRÖR×Rç(R:R^RÖR-tvaluevar((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitWith8s>             cCs.|i|ƒ|i|iƒ|idƒdS(NRÈ(R©R°RúR†(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitDiscard\s cCs|id|iƒdS(NRª(R†Rk(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitConstascCs'|id|iƒ|i|iƒdS(NRª(R†RXR°Rú(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitKeyworddscCsdS(N((R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyR`hscCs!|i|ƒ|i|iƒdS(N(R©R—RX(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitNamels cCs|i|ƒdS(N(R©(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitPasspscCsÑ|i|ƒ|iitƒodnd}x|iD]’\}}tdjo$|id|ƒ|iddƒn|id|ƒ|idƒd}|o|i |ƒ|i |ƒq7|i |ƒq7WdS(NiiÿÿÿÿiRªt IMPORT_NAMEt.( R©R€t checkFlagRRUtVERSIONR†R.tsplitt _resolveDotsR•(R:R^tlevelRXRcR)((s*/usr/lib64/python2.6/compiler/pycodegen.pyRdss     cCsC|i|ƒ|i}|djo|iitƒ o d}ntd„|iDƒƒ}tdjo$|id|ƒ|id|ƒn|id|i ƒx‘|iD]†\}}tdjo]|djod|_ |idƒdS|id |ƒ|i |ƒ|i |p|ƒq¨|id |ƒq¨W|id ƒdS( Niiÿÿÿÿcssx|]\}}|VqWdS(N((t.0RXRc((s*/usr/lib64/python2.6/compiler/pycodegen.pys ‡s iRªR<t*t IMPORT_STARt IMPORT_FROMRÈ( R©RBR€R>RttupleRUR?R†tmodnamet namespaceRAR•(R:R^RBtfromlistRXRc((s*/usr/lib64/python2.6/compiler/pycodegen.pyRe‚s*  !        cCsP|idƒ}t|ƒdjodSx"|dD]}|id|ƒq2WdS(NR=iR/(R@R¸R†(R:RXteltsR\((s*/usr/lib64/python2.6/compiler/pycodegen.pyRAœs  cCs0|i|iƒ|id|i|iƒƒdS(NR/(R°RúR†RŒtattrname(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitGetattr£scCs£|i|ƒ|i|iƒt|iƒd}xltt|iƒƒD]U}|i|}||jo|idƒnt|ti ƒo|i|ƒqFqFWdS(NiRö( R©R°RúR¸R·R½R†RiRtNode(R:R^tdupsRÁR\((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitAssign©s   cCse|idjo|i|iƒn>|idjo!|i|ƒ|i|iƒn dG|iGHdS(Nt OP_ASSIGNt OP_DELETEtoops(R6R•RXR©R™(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyRg´s  cCs…|i|iƒ|idjo |id|i|iƒƒnB|idjo |id|i|iƒƒndG|iGH|GHdS(NRQt STORE_ATTRRRt DELETE_ATTRswarning: unexpected flags:(R°RúR6R†RŒRL(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitAssAttr½s   tUNPACK_SEQUENCEcCsUt|ƒdjo|i|t|iƒƒnx|iD]}|i|ƒq:WdS(NRR(tfindOpR†R¸R·R°(R:R^RýRí((s*/usr/lib64/python2.6/compiler/pycodegen.pyt_visitAssSequenceÇs  icCs|i|dƒdS(Nt UNPACK_TUPLE(RY(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitAssTupleÑscCs|i|dƒdS(Nt UNPACK_LIST(RY(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitAssListÔscCsg|i|ƒt|iƒ}|i|dƒ|i|iƒ|i|i|iƒ|i|dƒdS(Ntloadtstore(R©twrap_augR^R°RúR†t_augmented_opcodeRý(R:R^taug_node((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitAugAssignÙs  t INPLACE_ADDs+=tINPLACE_SUBTRACTs-=tINPLACE_MULTIPLYs*=tINPLACE_DIVIDEs/=tINPLACE_FLOOR_DIVIDEs//=tINPLACE_MODULOs%=t INPLACE_POWERs**=tINPLACE_RSHIFTs>>=tINPLACE_LSHIFTs<<=t INPLACE_ANDs&=t INPLACE_XORs^=t INPLACE_ORs|=cCsF|djo|i|iƒn"|djo|i|iƒndS(NR^R_(R—RXR•(R:R^R5((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitAugNameðs  cCsˆ|djo=|i|iƒ|idƒ|id|i|iƒƒn;|djo-|idƒ|id|i|iƒƒndS(NR^RöR/R_RùRT(R°RúR†RŒRL(R:R^R5((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitAugGetattrös     cCsÆ|djo|i|dƒn¢|djo”d}|io|dB}n|io|dB}n|djo|idƒn,|djo|idƒn|id ƒ|id |ƒndS( NR^iR_iiRùitROT_FOURR÷sSTORE_SLICE+%d(t visitSlicetlowertupperR†(R:R^R5tslice((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitAugSliceÿs       cCsP|djo|i|dƒn,|djo|idƒ|idƒndS(NR^iR_R÷t STORE_SUBSCR(tvisitSubscriptR†(R:R^R5((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitAugSubscripts    cCs†|i|iƒ|idjo|iddƒn|i|iƒ|idjo|idƒn|i|iƒ|idƒdS(NRªRöt EXEC_STMT(R°RúRyR.R†RV(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitExecscCsd}d}|i|ƒ|i|iƒxI|iD]>}|i|ƒt|tiƒo|d}q3|d}q3W|idj o|i|iƒn|i dj o|i|i ƒn|idj }|i dj }t ||f}|i ||d>|BƒdS(Niii( R©R°R^RRiRtKeywordt star_argsR.t dstar_argstcallfunc_opcode_infoR†(R:R^tpostkwtargt have_start have_dstartopcode((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitCallFunc#s$   cCsÃ|i|ƒ|io|i|iƒnxn|iD]c}|io|idƒn|i|ƒ|io|idƒ|idƒq5|idƒq5W|io| o|idƒndS(NRöRùt PRINT_ITEM_TOt PRINT_ITEMRÈ(R©tdestR°R·R†(R:R^tnewlineRí((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitPrint7s       cCs?|i|ddƒ|io|idƒn|idƒdS(NR‹itPRINT_NEWLINE_TOt PRINT_NEWLINE(RŒRŠR†(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitPrintnlGs cCs.|i|ƒ|i|iƒ|idƒdS(NR¬(R©R°RkR†(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitReturnNs cCs.|i|ƒ|i|iƒ|idƒdS(NR(R©R°RkR†(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitYieldSs cCsB|i|iƒd}|io|i|iƒ|dB}n|io|i|iƒ|dB}n|oS|djo|idƒqÀ|djo|iddƒqÀ|iddƒn|idjo|id|ƒnZ|id jo|id |ƒn5|id jo|id |ƒnd G|iGH‚dS(NiiiRöitDUP_TOPXtOP_APPLYsSLICE+%dRQsSTORE_SLICE+%dRRsDELETE_SLICE+%ds weird slice(R°RúRtRuR†R6(R:R^taug_flagRv((s*/usr/lib64/python2.6/compiler/pycodegen.pyRsZs,     cCsæ|i|iƒx|iD]}|i|ƒqWt|iƒdjo|idt|iƒƒn|o|iddƒn|idjo|idƒnC|idjo|idƒn"|id jo|id ƒndS( NiRÂR’iR“t BINARY_SUBSCRRQRxRRt DELETE_SUBSCR(R°RútsubsR¸R†R6(R:R^R”tsub((s*/usr/lib64/python2.6/compiler/pycodegen.pyRyus cCs1|i|iƒ|i|iƒ|i|ƒdS(N(R°tlefttrightR†(R:R^Rý((s*/usr/lib64/python2.6/compiler/pycodegen.pytbinaryOp†scCs|i|dƒS(Nt BINARY_ADD(R›(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitAdd‹scCs|i|dƒS(NtBINARY_SUBTRACT(R›(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitSubŽscCs|i|dƒS(NtBINARY_MULTIPLY(R›(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitMul‘scCs|i||iƒS(N(R›R}(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitDiv”scCs|i|dƒS(NtBINARY_FLOOR_DIVIDE(R›(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitFloorDiv—scCs|i|dƒS(Nt BINARY_MODULO(R›(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitModšscCs|i|dƒS(Nt BINARY_POWER(R›(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitPowerscCs|i|dƒS(Nt BINARY_LSHIFT(R›(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitLeftShift scCs|i|dƒS(Nt BINARY_RSHIFT(R›(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitRightShift£scCs!|i|iƒ|i|ƒdS(N(R°RúR†(R:R^Rý((s*/usr/lib64/python2.6/compiler/pycodegen.pytunaryOp¨scCs|i|dƒS(Nt UNARY_INVERT(R­(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitInvert¬scCs|i|dƒS(NtUNARY_NEGATIVE(R­(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitUnarySub¯scCs|i|dƒS(NtUNARY_POSITIVE(R­(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitUnaryAdd²scCs|i|dƒS(NR®(R­(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitUnaryInvertµscCs|i|dƒS(Nt UNARY_NOT(R­(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitNot¸scCs|i|dƒS(Nt UNARY_CONVERT(R­(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pytvisitBackquote»scCsD|i|dƒx,|dD] }|i|ƒ|i|ƒqWdS(Nii(R°R†(R:R·RýR^((s*/usr/lib64/python2.6/compiler/pycodegen.pytbitOpÀs   cCs|i|idƒS(Nt BINARY_AND(R¹R·(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitBitandÆscCs|i|idƒS(Nt BINARY_OR(R¹R·(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitBitorÉscCs|i|idƒS(Nt BINARY_XOR(R¹R·(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitBitxorÌscCs|idtƒdS(NRª(R†tEllipsis(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitEllipsisÑscCsK|i|ƒx|iD]}|i|ƒqW|idt|iƒƒdS(NRÂ(R©R·R°R†R¸(R:R^R\((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitTupleÔs   cCsK|i|ƒx|iD]}|i|ƒqW|idt|iƒƒdS(NRÿ(R©R·R°R†R¸(R:R^R\((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitListÚs   cCs>x|iD]}|i|ƒq W|idt|iƒƒdS(Nt BUILD_SLICE(R·R°R†R¸(R:R^Rí((s*/usr/lib64/python2.6/compiler/pycodegen.pyt visitSliceobjàs cCs||i|ƒ|iddƒxX|iD]M\}}|idƒ|i|ƒ|i|ƒ|idƒ|idƒq'WdS(Nt BUILD_MAPiRöR÷Rx(R©R†titemsR°(R:R^tktv((s*/usr/lib64/python2.6/compiler/pycodegen.pyR_ås      N(sRARBRhR R.RtR‹R;RuRwR|R@RŒRR~R’R•R—R™R”R¢R§R©RSR®R¹RÄR²R³RaRbRµRfRÑRÚRáRãRëRîRïRñRõRþRR R RR¼RRRRRR$R+R.R3R6R7R8R9R`R:R;RdReRARMRPRgRVRYR?R[R]RcRaRpRqRwRzR|R‡RŒRRR‘RsRyR›RRŸR¡R¢R¤R¦R¨RªR¬R­R¯R±R³R´R¶R¸R¹R»R½R¿RÁRÂRÃRÅR_(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRm¶sø                             $  !    2  $                                                    tNestedScopeMixincBseZdZd„ZRS(s>Defines initClass() for nested scoping (Python 2.2-compatible)cCs(t|i_t|i_t|i_dS(N(RSRvR®tFunctionCodeGeneratorR¹tClassCodeGeneratorRÄ(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyRuñs  (RARBRhRu(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRÊïsREcBs)eZeiZdZd„Zd„ZRS(cCsEtid|iƒ|_ti|ƒ|_|iƒt||ƒdS(Ns( Rt PyFlowGraphR%R€Rt find_futuresRt _ModuleCodeGenerator__super_initR(R:R>((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;ûs cCs|S(N((R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR~sN(RARBRmR;RÏR.RŽR~(((s*/usr/lib64/python2.6/compiler/pycodegen.pyREös  RCcBs/eZeiZdZdZd„Zd„ZRS(cCs3tid|iƒ|_|iƒt||ƒdS(Ns (RRÍR%R€t$_ExpressionCodeGenerator__super_initR(R:R>((s*/usr/lib64/python2.6/compiler/pycodegen.pyR; s cCs|S(N((R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR~sN(( RARBRmR;RÐR.RŽRR~(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRCs   RDcBs8eZeiZdZdZd„Zd„Zd„Z RS(cCsMtid|iƒ|_|iƒ|i|ƒt||ƒ|idƒdS(Ns R¬(RRÍR%R€t%_InteractiveCodeGenerator__super_initR©RR†(R:R>((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;s    cCs|S(N((R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR~ scCs!|i|iƒ|idƒdS(Nt PRINT_EXPR(R°RúR†(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyR7#sN(( RARBRmR;RÑR.RŽRR~R7(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRDs    tAbstractFunctionCodecBsGeZdZdZd„Zd„Zd„Zd„Zd„ZeZ RS(iic CsW||_||_|o't}d|i}|id|_n |i}t|iƒ\}} ti||i |ddƒ|_ ||_ |i ƒ| o|i o|i|i ƒnt|i|i|ƒddƒ} |ii| iƒƒ|io|i itƒn|io|i itƒn|i|ƒ| o|i|iƒndS(Ns iR R«i(R‹tmoduleRËt lambdaCountRXtgenerateArgListtargnamesRRÍR%R€R´t super_initR­RŠRR3R®RyR¯R]tvarargsRR tkwargsRR©tgenerateArgUnpack( R:tfuncRŽR´R‹R)tklassRXRt hasTupleArgR±((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;-s.       !   cCs|iS(N(RÔ(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR~JscCs<|iiƒ|ip|iddƒn|idƒdS(NRªR¬(R€tstartExitBlockR´R†R.(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyRºMs  cCsdx]tt|ƒƒD]I}||}t|tƒo)|idd|dƒ|i|ƒqqWdS(Nt LOAD_FASTs.%di(R½R¸RiRGR†tunpackSequence(R:RRÁRƒ((s*/usr/lib64/python2.6/compiler/pycodegen.pyRÛSs  cCsƒtdjo|idt|ƒƒn|idt|ƒƒx?|D]7}t|tƒo|i|ƒqD|id|ƒqDWdS(NiRWRZR“(R?R†R¸RiRGRáR”(R:ttupR\((s*/usr/lib64/python2.6/compiler/pycodegen.pyRáZs ( RARBR RÕR;R~RºRÛRát unpackTuple(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRÓ)s     RËcBs)eZeiZdZeiZd„ZRS(cCsŒ||_|||_|i|||||ƒ|ii|iiƒƒ|ii|iiƒƒ|iidj o|ii t ƒndS(N( RŽRžt"_FunctionCodeGenerator__super_initR€t setFreeVarsRt setCellVarst get_cell_varst generatorR.RR(R:RÜRŽR´R‹R)((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;ns  N( RARBRmR;RØR.RŽRÓRä(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRËgs  RcBs)eZeiZdZeiZd„ZRS(cCsu||_|||_|i||d||ƒ|ii|iiƒƒ|ii|iiƒƒ|iit ƒdS(Ni( RŽRžt!_GenExprCodeGenerator__super_initR€RåRRæRçRR(R:tgexpRŽR‹R)((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;~s   N( RARBRmR;RØR.RŽRÓRé(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRws  tAbstractClassCodecBs#eZd„Zd„Zd„ZRS(cCs¬|i|_||_ti|i|iddddƒ|_|iƒt|i |i ƒddƒ}|i i |i ƒƒ|iitƒ|io|i|iƒndS(NR iRÝiR«(RXR‹RÔRRÍR%R€RØRR3R®RyR¯R]RRR­RŠ(R:RÝRŽRÔR±((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;ˆs    cCs|iS(N(RÔ(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR~”scCs+|iiƒ|idƒ|idƒdS(Nt LOAD_LOCALSR¬(R€RßR†(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyRº—s  (RARBR;R~Rº(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRë†s RÌcBs)eZeiZdZeiZd„ZRS(cCs·||_|||_|i|||ƒ|ii|iiƒƒ|ii|iiƒƒ|i|ƒ|i ddƒ|i dƒ|i o$|i d|i ƒ|i dƒndS(Nt LOAD_GLOBALRARBRªRh( RŽRžt_ClassCodeGenerator__super_initR€RåRRæRçR©R†R•R­(R:RÝRŽRÔ((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;¢s     N( RARBRmR;RØR.RŽRëRî(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRÌœs  cCsÂg}g}d}xŸtt|ƒƒD]‹}||}t|tƒo|i|ƒq%t|tƒo>|it|d|ƒƒ|iti |ƒƒ|d}q%t d|‚q%W|||fS(s&Generate an arg list marking TupleArgsiiisunexpect argument type:( R½R¸RitstrtappendRGRtextendRtflattenR2(targlistRtextratcountRÁR\((s*/usr/lib64/python2.6/compiler/pycodegen.pyRÖ¯s cCs#tƒ}t||ddƒ|iS(s5Find the op (DELETE, LOAD, STORE) in an AssTuple treeR«i(tOpFinderRRý(R^RÉ((s*/usr/lib64/python2.6/compiler/pycodegen.pyRXÀs RöcBs&eZd„Zd„ZeZeZRS(cCs d|_dS(N(R.Rý(R:((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;ÇscCsD|idjo|i|_n!|i|ijo td‚ndS(Nsmixed ops in stmt(RýR.R6R2(R:R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyRgÉs(RARBR;RgRVRy(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRöÆs  t DelegatorcBs eZdZd„Zd„ZRS(sBase class to support delegation for augmented assignment nodes To generator code for augmented assignments, we use the following wrapper classes. In visitAugAssign, the left-hand expression node is visited twice. The first time the visit uses the normal method for that node . The second time the visit uses a different method that generates the appropriate code to perform the assignment. These delegator classes wrap the original AST nodes in order to support the variant visit methods. cCs ||_dS(N(tobj(R:Rø((s*/usr/lib64/python2.6/compiler/pycodegen.pyR;ÜscCst|i|ƒS(N(R¥Rø(R:tattr((s*/usr/lib64/python2.6/compiler/pycodegen.pyt __getattr__ßs(RARBRhR;Rú(((s*/usr/lib64/python2.6/compiler/pycodegen.pyR÷Ñs  t AugGetattrcBseZRS((RARB(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRûâstAugNamecBseZRS((RARB(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRüåstAugSlicecBseZRS((RARB(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRýèst AugSubscriptcBseZRS((RARB(((s*/usr/lib64/python2.6/compiler/pycodegen.pyRþëscCst|i|ƒS(N(twrapperRv(R^((s*/usr/lib64/python2.6/compiler/pycodegen.pyR`õst__main__(LRQRJRIRMtsyst cStringIORtcompilerRRRRRRRRtcompiler.constsR R R R R RRRRRRRRtcompiler.pyassemRt version_infoR?tAttributeErrorR€RÕRåRæRçR*R.R"R9R1R0R!RSRlRmRÊRERCRDRÓRËRRëRÌRÖRXRöR÷RûRüRýRþtGetattrtNametSlicet SubscriptRÿR`RAtargvtfile(((s*/usr/lib64/python2.6/compiler/pycodegen.pyts‚     """@       + ÿÿÿÿ=>           PK’[s"Á=¢ ¢ future.pycnuW+A„¶Ñò §ÚêLc@sÓdZddklZlZd„Zdd d„ƒYZddd„ƒYZd„Zed jondd k Z dd kl Z lZxIe i d D]6Z e GHe e ƒZ eƒZee eƒeiGHHq‘Wnd S(sParser for future statements iÿÿÿÿ(tasttwalkcCs5t|tiƒpdS|idjodSdSdS(s:Return true if statement is a well-formed future statementit __future__iN(t isinstanceRtFromtmodname(tstmt((s'/usr/lib64/python2.6/compiler/future.pyt is_futures t FutureParsercBs2eZd Zd„Zd„Zd „Zd „ZRS( t nested_scopest generatorstdivisiontabsolute_importtwith_statementtprint_functiontunicode_literalscCs h|_dS(N(tfound(tself((s'/usr/lib64/python2.6/compiler/future.pyt__init__scCs6|i}x&|iD]}|i|ƒpPqqWdS(N(tnodetnodest check_stmt(RRRts((s'/usr/lib64/python2.6/compiler/future.pyt visitModules   cCsgt|ƒoVxE|iD]:\}}||ijod|i|s        PK’[—Ž‘‘ast.pycnuW+A„¶Ñò §ÚêLc@sûdZddklZlZd„Zd„ZhZddœd„ƒYZdefd„ƒYZd efd „ƒYZ d efd „ƒYZ d efd„ƒYZ defd„ƒYZ defd„ƒYZ defd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd „ƒYZd!efd"„ƒYZd#efd$„ƒYZd%efd&„ƒYZd'efd(„ƒYZd)efd*„ƒYZd+efd,„ƒYZd-efd.„ƒYZd/efd0„ƒYZd1efd2„ƒYZd3efd4„ƒYZd5efd6„ƒYZd7efd8„ƒYZ d9efd:„ƒYZ!d;efd<„ƒYZ"d=efd>„ƒYZ#d?efd@„ƒYZ$dAefdB„ƒYZ%dCefdD„ƒYZ&dEefdF„ƒYZ'dGefdH„ƒYZ(dIefdJ„ƒYZ)dKefdL„ƒYZ*dMefdN„ƒYZ+dOefdP„ƒYZ,dQefdR„ƒYZ-dSefdT„ƒYZ.dUefdV„ƒYZ/dWefdX„ƒYZ0dYefdZ„ƒYZ1d[efd\„ƒYZ2d]efd^„ƒYZ3d_efd`„ƒYZ4daefdb„ƒYZ5dcefdd„ƒYZ6deefdf„ƒYZ7dgefdh„ƒYZ8diefdj„ƒYZ9dkefdl„ƒYZ:dmefdn„ƒYZ;doefdp„ƒYZ<dqefdr„ƒYZ=dsefdt„ƒYZ>duefdv„ƒYZ?dwefdx„ƒYZ@dyefdz„ƒYZAd{efd|„ƒYZBd}efd~„ƒYZCdefd€„ƒYZDdefd‚„ƒYZEdƒefd„„ƒYZFd…efd†„ƒYZGd‡efdˆ„ƒYZHd‰efdŠ„ƒYZId‹efdŒ„ƒYZJdefdŽ„ƒYZKdefd„ƒYZLd‘efd’„ƒYZMd“efd”„ƒYZNd•efd–„ƒYZOd—efd˜„ƒYZPd™efdš„ƒYZQxQeRƒiSƒD]@\ZTZUeVeUeWƒo$eXeUeƒoeUeeTiYƒscCs dt|iƒt|iƒfS(Ns Add((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRAsN(RRtNoneRRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR!5s   tAndcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyREs cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRIscCs&g}|it|iƒƒt|ƒS(N(textendRR R(Rtnodelist((s$/usr/lib64/python2.6/compiler/ast.pyRLscCsdt|iƒfS(NsAnd(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRQsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR'Ds   tAssAttrcBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(texprtattrnametflagsR$(RR+R,R-R$((s$/usr/lib64/python2.6/compiler/ast.pyRUs   cCs|i|i|ifS(N(R+R,R-(R((s$/usr/lib64/python2.6/compiler/ast.pyR[scCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyR^scCs,dt|iƒt|iƒt|iƒfS(NsAssAttr(%s, %s, %s)(RR+R,R-(R((s$/usr/lib64/python2.6/compiler/ast.pyRasN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR*Ts   tAssListcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyRes cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRiscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRlscCsdt|iƒfS(Ns AssList(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRqsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR.ds   tAssNamecBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(tnameR-R$(RR0R-R$((s$/usr/lib64/python2.6/compiler/ast.pyRus  cCs|i|ifS(N(R0R-(R((s$/usr/lib64/python2.6/compiler/ast.pyRzscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyR}scCs dt|iƒt|iƒfS(NsAssName(%s, %s)(RR0R-(R((s$/usr/lib64/python2.6/compiler/ast.pyR€sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR/ts   tAssTuplecBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyR„s cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRˆscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR‹scCsdt|iƒfS(Ns AssTuple(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR1ƒs   tAssertcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(ttesttfailR$(RR3R4R$((s$/usr/lib64/python2.6/compiler/ast.pyR”s  cCs0g}|i|iƒ|i|iƒt|ƒS(N(RR3R4R(Rtchildren((s$/usr/lib64/python2.6/compiler/ast.pyR™scCsDg}|i|iƒ|idj o|i|iƒnt|ƒS(N(RR3R4R&R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRŸs cCs dt|iƒt|iƒfS(NsAssert(%s, %s)(RR3R4(R((s$/usr/lib64/python2.6/compiler/ast.pyR¦sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR2“s   tAssigncBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R R+R$(RR R+R$((s$/usr/lib64/python2.6/compiler/ast.pyRªs  cCs6g}|it|iƒƒ|i|iƒt|ƒS(N(R(RR RR+R(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR¯scCs6g}|it|iƒƒ|i|iƒt|ƒS(N(R(RR RR+R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRµscCs dt|iƒt|iƒfS(NsAssign(%s, %s)(RR R+(R((s$/usr/lib64/python2.6/compiler/ast.pyR»sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR6©s   t AugAssigncBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(RtopR+R$(RRR8R+R$((s$/usr/lib64/python2.6/compiler/ast.pyR¿s   cCs|i|i|ifS(N(RR8R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRÅscCs|i|ifS(N(RR+(R((s$/usr/lib64/python2.6/compiler/ast.pyRÈscCs,dt|iƒt|iƒt|iƒfS(NsAugAssign(%s, %s, %s)(RRR8R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRËsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR7¾s   t BackquotecBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R+R$(RR+R$((s$/usr/lib64/python2.6/compiler/ast.pyRÏs cCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRÓscCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRÖscCsdt|iƒfS(Ns Backquote(%s)(RR+(R((s$/usr/lib64/python2.6/compiler/ast.pyRÙsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR9Îs   tBitandcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyRÝs cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRáscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRäscCsdt|iƒfS(Ns Bitand(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRésN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR:Üs   tBitorcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyRís cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRñscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRôscCsdt|iƒfS(Ns Bitor(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRùsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR;ìs   tBitxorcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyRýs cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRscCsdt|iƒfS(Ns Bitxor(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyR sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR<üs   tBreakcBs/eZdd„Zd„Zd„Zd„ZRS(cCs ||_dS(N(R$(RR$((s$/usr/lib64/python2.6/compiler/ast.pyR scCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRscCsdS(NsBreak()((R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR= s   tCallFunccBs5eZdddd„Zd„Zd„Zd„ZRS(cCs1||_||_||_||_||_dS(N(Rtargst star_argst dstar_argsR$(RRR?R@RAR$((s$/usr/lib64/python2.6/compiler/ast.pyRs     cCsVg}|i|iƒ|it|iƒƒ|i|iƒ|i|iƒt|ƒS(N(RRR(RR?R@RAR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR!s cCs~g}|i|iƒ|it|iƒƒ|idj o|i|iƒn|idj o|i|iƒnt|ƒS(N( RRR(RR?R@R&RAR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR)scCs8dt|iƒt|iƒt|iƒt|iƒfS(NsCallFunc(%s, %s, %s, %s)(RRR?R@RA(R((s$/usr/lib64/python2.6/compiler/ast.pyR3sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR>s  tClasscBs2eZddd„Zd„Zd„Zd„ZRS(cCs:||_||_||_||_||_||_dS(N(R0tbasestdoctcodet decoratorsR$(RR0RCRDRERFR$((s$/usr/lib64/python2.6/compiler/ast.pyR7s      cCsfg}|i|iƒ|it|iƒƒ|i|iƒ|i|iƒ|i|iƒt|ƒS(N( RR0R(RRCRDRERFR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR?scCsZg}|it|iƒƒ|i|iƒ|idj o|i|iƒnt|ƒS(N(R(RRCRRERFR&R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRHs cCsDdt|iƒt|iƒt|iƒt|iƒt|iƒfS(NsClass(%s, %s, %s, %s, %s)(RR0RCRDRERF(R((s$/usr/lib64/python2.6/compiler/ast.pyRPsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRB6s tComparecBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R+topsR$(RR+RHR$((s$/usr/lib64/python2.6/compiler/ast.pyRTs  cCs6g}|i|iƒ|it|iƒƒt|ƒS(N(RR+R(RRHR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRYscCs6g}|i|iƒ|it|iƒƒt|ƒS(N(RR+R(RRHR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR_scCs dt|iƒt|iƒfS(NsCompare(%s, %s)(RR+RH(R((s$/usr/lib64/python2.6/compiler/ast.pyResN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRGSs   tConstcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(tvalueR$(RRJR$((s$/usr/lib64/python2.6/compiler/ast.pyRis cCs |ifS(N(RJ(R((s$/usr/lib64/python2.6/compiler/ast.pyRmscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRpscCsdt|iƒfS(Ns Const(%s)(RRJ(R((s$/usr/lib64/python2.6/compiler/ast.pyRssN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRIhs   tContinuecBs/eZdd„Zd„Zd„Zd„ZRS(cCs ||_dS(N(R$(RR$((s$/usr/lib64/python2.6/compiler/ast.pyRwscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRzscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyR}scCsdS(Ns Continue()((R((s$/usr/lib64/python2.6/compiler/ast.pyR€sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRKvs   t DecoratorscBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyR„s cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRˆscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR‹scCsdt|iƒfS(NsDecorators(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRLƒs   tDictcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(titemsR$(RRNR$((s$/usr/lib64/python2.6/compiler/ast.pyR”s cCstt|iƒƒS(N(RRRN(R((s$/usr/lib64/python2.6/compiler/ast.pyR˜scCs&g}|it|iƒƒt|ƒS(N(R(RRNR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR›scCsdt|iƒfS(NsDict(%s)(RRN(R((s$/usr/lib64/python2.6/compiler/ast.pyR sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRM“s   tDiscardcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R+R$(RR+R$((s$/usr/lib64/python2.6/compiler/ast.pyR¤s cCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyR¨scCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyR«scCsdt|iƒfS(Ns Discard(%s)(RR+(R((s$/usr/lib64/python2.6/compiler/ast.pyR®sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRO£s   tDivcBs/eZdd„Zd„Zd„Zd„ZRS(cCs'|d|_|d|_||_dS(Nii(R"R#R$(RR%R$((s$/usr/lib64/python2.6/compiler/ast.pyR²s  cCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR·scCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRºscCs dt|iƒt|iƒfS(Ns Div((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR½sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRP±s   tEllipsiscBs/eZdd„Zd„Zd„Zd„ZRS(cCs ||_dS(N(R$(RR$((s$/usr/lib64/python2.6/compiler/ast.pyRÁscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRÄscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRÇscCsdS(Ns Ellipsis()((R((s$/usr/lib64/python2.6/compiler/ast.pyRÊsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRQÀs   tExeccBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(R+tlocalstglobalsR$(RR+RSRTR$((s$/usr/lib64/python2.6/compiler/ast.pyRÎs   cCs@g}|i|iƒ|i|iƒ|i|iƒt|ƒS(N(RR+RSRTR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRÔs cCshg}|i|iƒ|idj o|i|iƒn|idj o|i|iƒnt|ƒS(N(RR+RSR&RTR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRÛscCs,dt|iƒt|iƒt|iƒfS(NsExec(%s, %s, %s)(RR+RSRT(R((s$/usr/lib64/python2.6/compiler/ast.pyRäsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRRÍs   tFloorDivcBs/eZdd„Zd„Zd„Zd„ZRS(cCs'|d|_|d|_||_dS(Nii(R"R#R$(RR%R$((s$/usr/lib64/python2.6/compiler/ast.pyRès  cCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRíscCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRðscCs dt|iƒt|iƒfS(NsFloorDiv((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRósN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRUçs   tForcBs/eZdd„Zd„Zd„Zd„ZRS(cCs1||_||_||_||_||_dS(N(tassignRtbodytelse_R$(RRWRRXRYR$((s$/usr/lib64/python2.6/compiler/ast.pyR÷s     cCsPg}|i|iƒ|i|iƒ|i|iƒ|i|iƒt|ƒS(N(RRWRRXRYR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRþs cCsdg}|i|iƒ|i|iƒ|i|iƒ|idj o|i|iƒnt|ƒS(N(RRWRRXRYR&R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRscCs8dt|iƒt|iƒt|iƒt|iƒfS(NsFor(%s, %s, %s, %s)(RRWRRXRY(R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRVös   tFromcBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(tmodnametnamestlevelR$(RR[R\R]R$((s$/usr/lib64/python2.6/compiler/ast.pyRs   cCs|i|i|ifS(N(R[R\R](R((s$/usr/lib64/python2.6/compiler/ast.pyRscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRscCs,dt|iƒt|iƒt|iƒfS(NsFrom(%s, %s, %s)(RR[R\R](R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRZs   tFunctioncBs/eZdd„Zd„Zd„Zd„ZRS(c CsŒ||_||_||_||_||_||_||_||_d|_ |_ |t @o d|_ n|t @o d|_ ndS(Ni( RFR0targnamestdefaultsR-RDRER$R&tvarargstkwargsRR( RRFR0R_R`R-RDRER$((s$/usr/lib64/python2.6/compiler/ast.pyR#s           cCs†g}|i|iƒ|i|iƒ|i|iƒ|it|iƒƒ|i|iƒ|i|iƒ|i|i ƒt |ƒS(N( RRFR0R_R(RR`R-RDRER(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR3scCsZg}|idj o|i|iƒn|it|iƒƒ|i|iƒt|ƒS(N(RFR&RR(RR`RER(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR>s c Cs\dt|iƒt|iƒt|iƒt|iƒt|iƒt|iƒt|iƒfS(Ns$Function(%s, %s, %s, %s, %s, %s, %s)(RRFR0R_R`R-RDRE(R((s$/usr/lib64/python2.6/compiler/ast.pyRFsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR^"s  tGenExprcBs/eZdd„Zd„Zd„Zd„ZRS(cCs2||_||_dg|_d|_|_dS(Ns.0(RER$R_R&RaRb(RRER$((s$/usr/lib64/python2.6/compiler/ast.pyRJs   cCs |ifS(N(RE(R((s$/usr/lib64/python2.6/compiler/ast.pyRQscCs |ifS(N(RE(R((s$/usr/lib64/python2.6/compiler/ast.pyRTscCsdt|iƒfS(Ns GenExpr(%s)(RRE(R((s$/usr/lib64/python2.6/compiler/ast.pyRWsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRcIs   t GenExprForcBs/eZdd„Zd„Zd„Zd„ZRS(cCs1||_||_||_||_t|_dS(N(RWtitertifsR$tFalset is_outmost(RRWReRfR$((s$/usr/lib64/python2.6/compiler/ast.pyR[s     cCsFg}|i|iƒ|i|iƒ|it|iƒƒt|ƒS(N(RRWReR(RRfR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRbs cCsFg}|i|iƒ|i|iƒ|it|iƒƒt|ƒS(N(RRWReR(RRfR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRis cCs,dt|iƒt|iƒt|iƒfS(NsGenExprFor(%s, %s, %s)(RRWReRf(R((s$/usr/lib64/python2.6/compiler/ast.pyRpsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRdZs   t GenExprIfcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R3R$(RR3R$((s$/usr/lib64/python2.6/compiler/ast.pyRts cCs |ifS(N(R3(R((s$/usr/lib64/python2.6/compiler/ast.pyRxscCs |ifS(N(R3(R((s$/usr/lib64/python2.6/compiler/ast.pyR{scCsdt|iƒfS(Ns GenExprIf(%s)(RR3(R((s$/usr/lib64/python2.6/compiler/ast.pyR~sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRiss   t GenExprInnercBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R+tqualsR$(RR+RkR$((s$/usr/lib64/python2.6/compiler/ast.pyR‚s  cCs6g}|i|iƒ|it|iƒƒt|ƒS(N(RR+R(RRkR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR‡scCs6g}|i|iƒ|it|iƒƒt|ƒS(N(RR+R(RRkR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRscCs dt|iƒt|iƒfS(NsGenExprInner(%s, %s)(RR+Rk(R((s$/usr/lib64/python2.6/compiler/ast.pyR“sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRjs   tGetattrcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R+R,R$(RR+R,R$((s$/usr/lib64/python2.6/compiler/ast.pyR—s  cCs|i|ifS(N(R+R,(R((s$/usr/lib64/python2.6/compiler/ast.pyRœscCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRŸscCs dt|iƒt|iƒfS(NsGetattr(%s, %s)(RR+R,(R((s$/usr/lib64/python2.6/compiler/ast.pyR¢sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRl–s   tGlobalcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R\R$(RR\R$((s$/usr/lib64/python2.6/compiler/ast.pyR¦s cCs |ifS(N(R\(R((s$/usr/lib64/python2.6/compiler/ast.pyRªscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyR­scCsdt|iƒfS(Ns Global(%s)(RR\(R((s$/usr/lib64/python2.6/compiler/ast.pyR°sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRm¥s   tIfcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(ttestsRYR$(RRoRYR$((s$/usr/lib64/python2.6/compiler/ast.pyR´s  cCs6g}|it|iƒƒ|i|iƒt|ƒS(N(R(RRoRRYR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR¹scCsJg}|it|iƒƒ|idj o|i|iƒnt|ƒS(N(R(RRoRYR&RR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR¿s cCs dt|iƒt|iƒfS(Ns If(%s, %s)(RRoRY(R((s$/usr/lib64/python2.6/compiler/ast.pyRÆsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRn³s   tIfExpcBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(R3tthenRYR$(RR3RqRYR$((s$/usr/lib64/python2.6/compiler/ast.pyRÊs   cCs|i|i|ifS(N(R3RqRY(R((s$/usr/lib64/python2.6/compiler/ast.pyRÐscCs|i|i|ifS(N(R3RqRY(R((s$/usr/lib64/python2.6/compiler/ast.pyRÓscCs,dt|iƒt|iƒt|iƒfS(NsIfExp(%s, %s, %s)(RR3RqRY(R((s$/usr/lib64/python2.6/compiler/ast.pyRÖsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRpÉs   tImportcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R\R$(RR\R$((s$/usr/lib64/python2.6/compiler/ast.pyRÚs cCs |ifS(N(R\(R((s$/usr/lib64/python2.6/compiler/ast.pyRÞscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRáscCsdt|iƒfS(Ns Import(%s)(RR\(R((s$/usr/lib64/python2.6/compiler/ast.pyRäsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRrÙs   tInvertcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R+R$(RR+R$((s$/usr/lib64/python2.6/compiler/ast.pyRès cCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRìscCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRïscCsdt|iƒfS(Ns Invert(%s)(RR+(R((s$/usr/lib64/python2.6/compiler/ast.pyRòsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRsçs   tKeywordcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R0R+R$(RR0R+R$((s$/usr/lib64/python2.6/compiler/ast.pyRös  cCs|i|ifS(N(R0R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRûscCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRþscCs dt|iƒt|iƒfS(NsKeyword(%s, %s)(RR0R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRtõs   tLambdacBs/eZdd„Zd„Zd„Zd„ZRS(cCsq||_||_||_||_||_d|_|_|t@o d|_n|t @o d|_ndS(Ni( R_R`R-RER$R&RaRbRR(RR_R`R-RER$((s$/usr/lib64/python2.6/compiler/ast.pyRs        cCsVg}|i|iƒ|it|iƒƒ|i|iƒ|i|iƒt|ƒS(N(RR_R(RR`R-RER(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRs cCs6g}|it|iƒƒ|i|iƒt|ƒS(N(R(RR`RRER(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRscCs8dt|iƒt|iƒt|iƒt|iƒfS(NsLambda(%s, %s, %s, %s)(RR_R`R-RE(R((s$/usr/lib64/python2.6/compiler/ast.pyR sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRus  t LeftShiftcBs/eZdd„Zd„Zd„Zd„ZRS(cCs'|d|_|d|_||_dS(Nii(R"R#R$(RR%R$((s$/usr/lib64/python2.6/compiler/ast.pyR$s  cCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR)scCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR,scCs dt|iƒt|iƒfS(NsLeftShift((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR/sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRv#s   tListcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyR3s cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyR7scCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR:scCsdt|iƒfS(NsList(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyR?sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRw2s   tListCompcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R+RkR$(RR+RkR$((s$/usr/lib64/python2.6/compiler/ast.pyRCs  cCs6g}|i|iƒ|it|iƒƒt|ƒS(N(RR+R(RRkR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRHscCs6g}|i|iƒ|it|iƒƒt|ƒS(N(RR+R(RRkR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRNscCs dt|iƒt|iƒfS(NsListComp(%s, %s)(RR+Rk(R((s$/usr/lib64/python2.6/compiler/ast.pyRTsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRxBs   t ListCompForcBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(RWRRfR$(RRWRRfR$((s$/usr/lib64/python2.6/compiler/ast.pyRXs   cCsFg}|i|iƒ|i|iƒ|it|iƒƒt|ƒS(N(RRWRR(RRfR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR^s cCsFg}|i|iƒ|i|iƒ|it|iƒƒt|ƒS(N(RRWRR(RRfR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRes cCs,dt|iƒt|iƒt|iƒfS(NsListCompFor(%s, %s, %s)(RRWRRf(R((s$/usr/lib64/python2.6/compiler/ast.pyRlsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRyWs   t ListCompIfcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R3R$(RR3R$((s$/usr/lib64/python2.6/compiler/ast.pyRps cCs |ifS(N(R3(R((s$/usr/lib64/python2.6/compiler/ast.pyRtscCs |ifS(N(R3(R((s$/usr/lib64/python2.6/compiler/ast.pyRwscCsdt|iƒfS(NsListCompIf(%s)(RR3(R((s$/usr/lib64/python2.6/compiler/ast.pyRzsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRzos   tModcBs/eZdd„Zd„Zd„Zd„ZRS(cCs'|d|_|d|_||_dS(Nii(R"R#R$(RR%R$((s$/usr/lib64/python2.6/compiler/ast.pyR~s  cCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRƒscCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR†scCs dt|iƒt|iƒfS(Ns Mod((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR‰sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR{}s   tModulecBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(RDRR$(RRDRR$((s$/usr/lib64/python2.6/compiler/ast.pyRs  cCs|i|ifS(N(RDR(R((s$/usr/lib64/python2.6/compiler/ast.pyR’scCs |ifS(N(R(R((s$/usr/lib64/python2.6/compiler/ast.pyR•scCs dt|iƒt|iƒfS(NsModule(%s, %s)(RRDR(R((s$/usr/lib64/python2.6/compiler/ast.pyR˜sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR|Œs   tMulcBs/eZdd„Zd„Zd„Zd„ZRS(cCs'|d|_|d|_||_dS(Nii(R"R#R$(RR%R$((s$/usr/lib64/python2.6/compiler/ast.pyRœs  cCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR¡scCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR¤scCs dt|iƒt|iƒfS(Ns Mul((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR§sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR}›s   tNamecBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R0R$(RR0R$((s$/usr/lib64/python2.6/compiler/ast.pyR«s cCs |ifS(N(R0(R((s$/usr/lib64/python2.6/compiler/ast.pyR¯scCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyR²scCsdt|iƒfS(NsName(%s)(RR0(R((s$/usr/lib64/python2.6/compiler/ast.pyRµsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR~ªs   tNotcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R+R$(RR+R$((s$/usr/lib64/python2.6/compiler/ast.pyR¹s cCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyR½scCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRÀscCsdt|iƒfS(NsNot(%s)(RR+(R((s$/usr/lib64/python2.6/compiler/ast.pyRÃsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR¸s   tOrcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyRÇs cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRËscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRÎscCsdt|iƒfS(NsOr(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRÓsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR€Æs   tPasscBs/eZdd„Zd„Zd„Zd„ZRS(cCs ||_dS(N(R$(RR$((s$/usr/lib64/python2.6/compiler/ast.pyR×scCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRÚscCsdS(N(((R((s$/usr/lib64/python2.6/compiler/ast.pyRÝscCsdS(NsPass()((R((s$/usr/lib64/python2.6/compiler/ast.pyRàsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRÖs   tPowercBs/eZdd„Zd„Zd„Zd„ZRS(cCs'|d|_|d|_||_dS(Nii(R"R#R$(RR%R$((s$/usr/lib64/python2.6/compiler/ast.pyRäs  cCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRéscCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRìscCs dt|iƒt|iƒfS(NsPower((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRïsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR‚ãs   tPrintcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R tdestR$(RR R„R$((s$/usr/lib64/python2.6/compiler/ast.pyRós  cCs6g}|it|iƒƒ|i|iƒt|ƒS(N(R(RR RR„R(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRøscCsJg}|it|iƒƒ|idj o|i|iƒnt|ƒS(N(R(RR R„R&RR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRþs cCs dt|iƒt|iƒfS(Ns Print(%s, %s)(RR R„(R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRƒòs   tPrintnlcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(R R„R$(RR R„R$((s$/usr/lib64/python2.6/compiler/ast.pyR s  cCs6g}|it|iƒƒ|i|iƒt|ƒS(N(R(RR RR„R(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRscCsJg}|it|iƒƒ|idj o|i|iƒnt|ƒS(N(R(RR R„R&RR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRs cCs dt|iƒt|iƒfS(NsPrintnl(%s, %s)(RR R„(R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR…s   tRaisecBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(texpr1texpr2texpr3R$(RR‡RˆR‰R$((s$/usr/lib64/python2.6/compiler/ast.pyRs   cCs@g}|i|iƒ|i|iƒ|i|iƒt|ƒS(N(RR‡RˆR‰R(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR%s cCs|g}|idj o|i|iƒn|idj o|i|iƒn|idj o|i|iƒnt|ƒS(N(R‡R&RRˆR‰R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR,scCs,dt|iƒt|iƒt|iƒfS(NsRaise(%s, %s, %s)(RR‡RˆR‰(R((s$/usr/lib64/python2.6/compiler/ast.pyR6sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR†s   tReturncBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(RJR$(RRJR$((s$/usr/lib64/python2.6/compiler/ast.pyR:s cCs |ifS(N(RJ(R((s$/usr/lib64/python2.6/compiler/ast.pyR>scCs |ifS(N(RJ(R((s$/usr/lib64/python2.6/compiler/ast.pyRAscCsdt|iƒfS(Ns Return(%s)(RRJ(R((s$/usr/lib64/python2.6/compiler/ast.pyRDsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRŠ9s   t RightShiftcBs/eZdd„Zd„Zd„Zd„ZRS(cCs'|d|_|d|_||_dS(Nii(R"R#R$(RR%R$((s$/usr/lib64/python2.6/compiler/ast.pyRHs  cCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRMscCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRPscCs dt|iƒt|iƒfS(NsRightShift((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRSsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR‹Gs   tSlicecBs/eZdd„Zd„Zd„Zd„ZRS(cCs1||_||_||_||_||_dS(N(R+R-tlowertupperR$(RR+R-RRŽR$((s$/usr/lib64/python2.6/compiler/ast.pyRWs     cCsPg}|i|iƒ|i|iƒ|i|iƒ|i|iƒt|ƒS(N(RR+R-RRŽR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR^s cCshg}|i|iƒ|idj o|i|iƒn|idj o|i|iƒnt|ƒS(N(RR+RR&RŽR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRfscCs8dt|iƒt|iƒt|iƒt|iƒfS(NsSlice(%s, %s, %s, %s)(RR+R-RRŽ(R((s$/usr/lib64/python2.6/compiler/ast.pyRosN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRŒVs   tSliceobjcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyRss cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRwscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRzscCsdt|iƒfS(Ns Sliceobj(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRrs   tStmtcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyRƒs cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyR‡scCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRŠscCsdt|iƒfS(NsStmt(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR‚s   tSubcBs/eZdd„Zd„Zd„Zd„ZRS(cCs'|d|_|d|_||_dS(Nii(R"R#R$(RR%R$((s$/usr/lib64/python2.6/compiler/ast.pyR“s  cCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR˜scCs|i|ifS(N(R"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyR›scCs dt|iƒt|iƒfS(Ns Sub((%s, %s))(RR"R#(R((s$/usr/lib64/python2.6/compiler/ast.pyRžsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR‘’s   t SubscriptcBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(R+R-tsubsR$(RR+R-R“R$((s$/usr/lib64/python2.6/compiler/ast.pyR¢s   cCsFg}|i|iƒ|i|iƒ|it|iƒƒt|ƒS(N(RR+R-R(RR“R(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR¨s cCs6g}|i|iƒ|it|iƒƒt|ƒS(N(RR+R(RR“R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR¯scCs,dt|iƒt|iƒt|iƒfS(NsSubscript(%s, %s, %s)(RR+R-R“(R((s$/usr/lib64/python2.6/compiler/ast.pyRµsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR’¡s   t TryExceptcBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(RXthandlersRYR$(RRXR•RYR$((s$/usr/lib64/python2.6/compiler/ast.pyR¹s   cCsFg}|i|iƒ|it|iƒƒ|i|iƒt|ƒS(N(RRXR(RR•RYR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR¿s cCsZg}|i|iƒ|it|iƒƒ|idj o|i|iƒnt|ƒS(N(RRXR(RR•RYR&R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRÆs cCs,dt|iƒt|iƒt|iƒfS(NsTryExcept(%s, %s, %s)(RRXR•RY(R((s$/usr/lib64/python2.6/compiler/ast.pyRÎsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR”¸s   t TryFinallycBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(RXtfinalR$(RRXR—R$((s$/usr/lib64/python2.6/compiler/ast.pyRÒs  cCs|i|ifS(N(RXR—(R((s$/usr/lib64/python2.6/compiler/ast.pyR×scCs|i|ifS(N(RXR—(R((s$/usr/lib64/python2.6/compiler/ast.pyRÚscCs dt|iƒt|iƒfS(NsTryFinally(%s, %s)(RRXR—(R((s$/usr/lib64/python2.6/compiler/ast.pyRÝsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR–Ñs   tTuplecBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R R$(RR R$((s$/usr/lib64/python2.6/compiler/ast.pyRás cCstt|iƒƒS(N(RRR (R((s$/usr/lib64/python2.6/compiler/ast.pyRåscCs&g}|it|iƒƒt|ƒS(N(R(RR R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRèscCsdt|iƒfS(Ns Tuple(%s)(RR (R((s$/usr/lib64/python2.6/compiler/ast.pyRísN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR˜às   tUnaryAddcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R+R$(RR+R$((s$/usr/lib64/python2.6/compiler/ast.pyRñs cCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRõscCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRøscCsdt|iƒfS(Ns UnaryAdd(%s)(RR+(R((s$/usr/lib64/python2.6/compiler/ast.pyRûsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR™ðs   tUnarySubcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(R+R$(RR+R$((s$/usr/lib64/python2.6/compiler/ast.pyRÿs cCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRscCs |ifS(N(R+(R((s$/usr/lib64/python2.6/compiler/ast.pyRscCsdt|iƒfS(Ns UnarySub(%s)(RR+(R((s$/usr/lib64/python2.6/compiler/ast.pyR sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRšþs   tWhilecBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(R3RXRYR$(RR3RXRYR$((s$/usr/lib64/python2.6/compiler/ast.pyR s   cCs@g}|i|iƒ|i|iƒ|i|iƒt|ƒS(N(RR3RXRYR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyRs cCsTg}|i|iƒ|i|iƒ|idj o|i|iƒnt|ƒS(N(RR3RXRYR&R(RR)((s$/usr/lib64/python2.6/compiler/ast.pyRs cCs,dt|iƒt|iƒt|iƒfS(NsWhile(%s, %s, %s)(RR3RXRY(R((s$/usr/lib64/python2.6/compiler/ast.pyR"sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyR› s   tWithcBs/eZdd„Zd„Zd„Zd„ZRS(cCs(||_||_||_||_dS(N(R+tvarsRXR$(RR+RRXR$((s$/usr/lib64/python2.6/compiler/ast.pyR&s   cCs@g}|i|iƒ|i|iƒ|i|iƒt|ƒS(N(RR+RRXR(RR5((s$/usr/lib64/python2.6/compiler/ast.pyR,s cCsTg}|i|iƒ|idj o|i|iƒn|i|iƒt|ƒS(N(RR+RR&RXR(RR)((s$/usr/lib64/python2.6/compiler/ast.pyR3s cCs,dt|iƒt|iƒt|iƒfS(NsWith(%s, %s, %s)(RR+RRX(R((s$/usr/lib64/python2.6/compiler/ast.pyR;sN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRœ%s   tYieldcBs/eZdd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(RJR$(RRJR$((s$/usr/lib64/python2.6/compiler/ast.pyR?s cCs |ifS(N(RJ(R((s$/usr/lib64/python2.6/compiler/ast.pyRCscCs |ifS(N(RJ(R((s$/usr/lib64/python2.6/compiler/ast.pyRFscCsdt|iƒfS(Ns Yield(%s)(RRJ(R((s$/usr/lib64/python2.6/compiler/ast.pyRIsN(RRR&RRRR(((s$/usr/lib64/python2.6/compiler/ast.pyRž>s   N((ZRtcompiler.constsRRRRR R RRR!R'R*R.R/R1R2R6R7R9R:R;R<R=R>RBRGRIRKRLRMRORPRQRRRURVRZR^RcRdRiRjRlRmRnRpRrRsRtRuRvRwRxRyRzR{R|R}R~RR€RR‚RƒR…R†RŠR‹RŒRRR‘R’R”R–R˜R™RšR›RœRžRTRNR0tobjR Rt issubclassR(((s$/usr/lib64/python2.6/compiler/ast.pyts¦     '   PK’[ãþÄçç __init__.pynuW+A„¶"""Package for parsing and compiling Python source code There are several functions defined at the top level that are imported from modules contained in the package. parse(buf, mode="exec") -> AST Converts a string containing Python source code to an abstract syntax tree (AST). The AST is defined in compiler.ast. parseFile(path) -> AST The same as parse(open(path)) walk(ast, visitor, verbose=None) Does a pre-order walk over the ast using the visitor instance. See compiler.visitor for details. compile(source, filename, mode, flags=None, dont_inherit=None) Returns a code object. A replacement for the builtin compile() function. compileFile(filename) Generates a .pyc file by compiling filename. """ from warnings import warnpy3k warnpy3k("the compiler package has been removed in Python 3.0", stacklevel=2) del warnpy3k from compiler.transformer import parse, parseFile from compiler.visitor import walk from compiler.pycodegen import compile, compileFile PK’[,®:ç¸ç¸transformer.pycnuW+A„¶Ñò §ÚêLc/@sjdZddkTddkZddkZddkZdefd„ƒYZddklZl Z ddkl Z l Z l Z d„Z d d „Zd „Zd „Zd „Zdfd„ƒYZeieieieieieieieieieieieieiei ei!ei"gZ#hdei$6dei%6dei&6dei'6dei(6dei)6dei*6Z+ei,ei-ei.ei/ei0ei1ei2eiei3ei4ei5ei6ei7ei8ei9ei:ei;ei<ei=ei>ei?ei@eiAeiBeiCeieieieieieieiDeieieieieiei ei!ei"eiEg)ZFeGedƒoeFiHeiIƒneGedƒoeFiHeiJƒneieieieieieieieieieiei ei!g ZKhZLx'eiMiNƒD]\ZOZPePeLeO AST parseFile(path) -> AST iÿÿÿÿ(t*Nt WalkerErrorcBseZRS((t__name__t __module__(((s,/usr/lib64/python2.6/compiler/transformer.pyR!s(t CO_VARARGStCO_VARKEYWORDS(t OP_ASSIGNt OP_DELETEtOP_APPLYcCs3t|dƒ}|iƒd}|iƒt|ƒS(NtUs (topentreadtclosetparse(tpathtftsrc((s,/usr/lib64/python2.6/compiler/transformer.pyt parseFile's texeccCsY|djp |djotƒi|ƒS|djotƒi|ƒStdƒ‚dS(NRtsingletevals4compile() arg 3 must be 'exec' or 'eval' or 'single'(t Transformert parsesuitet parseexprt ValueError(tbuftmode((s,/usr/lib64/python2.6/compiler/transformer.pyR 1s  cCsµg}x¨|D] }t|dƒo|i|iƒƒq t|ƒtdƒjo|itt|ƒƒƒq t|ƒtgƒjo|it|ƒƒq |i|ƒq W|S(NtasList(NN(thasattrtappendRttypetNonettuple(tnodestltitem((s,/usr/lib64/python2.6/compiler/transformer.pyR:scCsht|dtƒp |dSxD|dD]8}t|tƒo"t|ƒ}|dj o|Sq(q(WdS(Nii(t isinstanceR t extractLineNoR(tasttchildtlineno((s,/usr/lib64/python2.6/compiler/transformer.pyR%Hs    cGsx|d}|tjoJyt||dŒSWqttj o!t|Gt|ƒG|GH‚qtXntdt|ƒ‚dS(Niis$Can't find appropriate Node type: %s(R!t TypeErrortlenRtstr(targstkind((s,/usr/lib64/python2.6/compiler/transformer.pytNodeRs   RcBs}eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„Zd„ZeZd„Zd„ZeZeZeZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z!d„Z"d„Z#d„Z$d„Z%d „Z&d!„Z'd"„Z(d#„Z)d$„Z*d%„Z+d&„Z,d'„Z-d(„Z.d)„Z/d*„Z0d+„Z1d,„Z2d-„Z3d.„Z4d/„Z5d0„Z6d1„Z7d2„Z8d3„Z9e9Z:e9Z;e9Z<d4„Z=d5„Z>d6„Z?e?Z@d7„ZAd8„ZBd9„ZCd:„ZDd;„ZEd<„ZFd=„ZGd>„ZHd?„ZId@„ZJdA„ZKdB„ZLdC„ZMdD„ZNdE„ZOdF„ZPdG„ZQdH„ZRdI„ZSdJ„ZTdK„ZUdL„ZVdM„ZWdN„ZXdO„ZYdP„ZZdQ„Z[dR„Z\dS„Z]dT„Z^dU„Z_dV„Z`dW„ZadX„ZbdY„ZcdZ„Zdd[„Zed\„Zfd]„Zgd^„Zhd_„Zid`„Zjda„Zkdb„Zldc„Zmdd„Zneoepdeƒodf„Zqdg„Zrdh„Zsn di„Zqeoepdjƒodk„Ztdl„Zundm„Zvdn„Zwdo„Zxdp„Zydq„Zzdr„Z{ds„Z|dt„Z}du„Z~dwdv„Z€RS(xsêUtility object for transforming Python parse trees. Exposes the following methods: tree = transform(ast_tree) tree = parsesuite(text) tree = parseexpr(text) tree = parsefile(fileob | filename) cCs×h|_xGtiiƒD]6\}}t||ƒot||ƒ|i||dddjpt‚d}x$||ddjo|d7}q%W|d}||dtijo!|i||ƒ}|d7}nd}||ddjpt‚||ddtijo"t|d g|d|dd ƒS||d||ddtij}t||i |ƒ|d|dd ƒSdS( Niitfromt.RUtimportRR(i(RN( RnR0Rttcom_dotted_nameR5tSTARtFromRR8tcom_import_as_names(RGRhtidxtleveltfromnameR_((s,/usr/lib64/python2.6/compiler/transformer.pyt import_fromÆs" 'cCsVg}x5tdt|ƒdƒD]}|i||dƒqWt|d|ddƒS(NiiR(i(RŒR*RtGlobal(RGRhRRj((s,/usr/lib64/python2.6/compiler/transformer.pyt global_stmtÜs cCs•|i|dƒ}t|ƒdjoG|i|dƒ}t|ƒdjo|i|dƒ}qwd}n d}}t|||d|ddƒS( NiiiiiR(ii(RmR*RtExec(RGRhR¸R·R¶((s,/usr/lib64/python2.6/compiler/transformer.pyt exec_stmtãs  cCs^|i|dƒ}t|ƒdjo|i|dƒ}nd}t||d|ddƒS(NiiiR(ii(RmR*RtAssert(RGRhR¸R·((s,/usr/lib64/python2.6/compiler/transformer.pyt assert_stmtñs cCs½g}xetdt|ƒddƒD]G}|i||dƒ}|i||dƒ}|i||fƒq#Wt|ƒddjo|i|dƒ}nd}t||d|ddƒS(NiiiiiÿÿÿÿR(i(RŒR*RmRRtIf(RGRhttestsRjttestNodet suiteNodetelseNode((s,/usr/lib64/python2.6/compiler/transformer.pytif_stmtúscCst|i|dƒ}|i|dƒ}t|ƒdjo|i|dƒ}nd}t|||d|ddƒS(NiiiiR(ii(RmR*RtWhile(RGRhRÑtbodyNodeRÓ((s,/usr/lib64/python2.6/compiler/transformer.pyt while_stmt s cCs|i|dtƒ}|i|dƒ}|i|dƒ}t|ƒdjo|i|dƒ}nd}t||||d|ddƒS(NiiiiR(ii(R—RRmR*RtFor(RGRht assignNodetlistNodeRÖRÓ((s,/usr/lib64/python2.6/compiler/transformer.pytfor_stmtscCs |i|ƒS(N(tcom_try_except_finally(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyttry_stmt%scCs |i|ƒS(N(tcom_with(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyt with_stmt(scCs |i|ƒS(N(t com_with_var(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pytwith_var+scCsnt|ƒdjo|i|dƒSg}x6|D].}|dtijo|i||ƒq2q2Wt|ƒS(Nii(R*RaR0R‹ReRg(RGRhRkR_((s,/usr/lib64/python2.6/compiler/transformer.pyRR.scCs|it|ƒS(N(t com_binarytTuple(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyttestlist>scCs`t|ƒdjo@|ddtijo(|i|dƒ}|i||dƒS|i|ƒS(Niii(R*R0tgen_forRmtcom_generator_expressionRä(RGRhttest((s,/usr/lib64/python2.6/compiler/transformer.pyt testlist_gexpHs+cCsþt|ƒdjo*|ddtijo|i|dƒS|i|dƒ}t|ƒdjo—t|ƒdjpt‚|dddjpt‚|dddjpt‚|i|dƒ}|i|dƒ}t|||d |ddƒS|S( NiiitifitelseiiR((R*R0R\RmRntIfExp(RGRhtthenRçtelse_((s,/usr/lib64/python2.6/compiler/transformer.pyRçNs+cCsMt|ƒdjo*|ddtijo|i|dƒS|it|ƒS(Nii(R*R0R\RâtOr(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pytor_test\s+cCs|it|ƒS(N(RâtAnd(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pytand_testcscCsC|i|dƒ}t|ƒdjot|d|ddƒS|S(NiÿÿÿÿiR(i(RmR*tNot(RGRhtresult((s,/usr/lib64/python2.6/compiler/transformer.pytnot_testgsc Cs|i|dƒ}t|ƒdjo|Sg}xÊtdt|ƒdƒD]°}||d}|d}|dtijoB|d}t|ƒdjo!|djo d}qºd}qÌnt|d}|dd}|i||i||ƒfƒqJWt||d|ƒS( Niiiitnotsnot insis notR((RmR*RŒR5RDt _cmp_typesRtCompare( RGRhR_tresultsRjtnlR`RR(((s,/usr/lib64/python2.6/compiler/transformer.pyt comparisonns$    $cCs|it|ƒS(N(RâtBitor(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyRTscCs|it|ƒS(N(RâtBitxor(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pytxor_expr“scCs|it|ƒS(N(RâtBitand(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pytand_expr—scCsæ|i|dƒ}xÌtdt|ƒdƒD]²}|i||ƒ}||ddtijo$t||gd|ddƒ}q,||ddtijo$t||gd|ddƒ}q,td||dd‚q,W|S(NiiiR(sunexpected token: %s( RmRŒR*R5t LEFTSHIFTt LeftShiftR¢t RightShiftR(RGRhR_Rjtright((s,/usr/lib64/python2.6/compiler/transformer.pyt shift_expr›s$$cCsæ|i|dƒ}xÌtdt|ƒdƒD]²}|i||ƒ}||ddtijo$t||gd|ddƒ}q,||ddtijo$t||gd|ddƒ}q,td||dd‚q,W|S(NiiiR(sunexpected token: %s( RmRŒR*R5tPLUStAddtMINUStSubR(RGRhR_RjR((s,/usr/lib64/python2.6/compiler/transformer.pyt arith_expr¨s$$cCs|i|dƒ}xûtdt|ƒdƒD]á}|i||ƒ}||dd}|tijot||gƒ}n€|tijot||gƒ}nZ|tijot ||gƒ}n4|ti jot ||gƒ}nt d|‚|dd|_ q,W|S(Niiisunexpected token: %s(RmRŒR*R5RÂtMultSLASHtDivtPERCENTtModt DOUBLESLASHtFloorDivRR((RGRhR_RjRtt((s,/usr/lib64/python2.6/compiler/transformer.pytterm´s  cCs­|d}|d}|i|dƒ|ddƒ}|tijot|d|dƒS|tijot|d|dƒS|tijot|d|dƒ}n|S(NiiÿÿÿÿiR(i(R•R5RtUnaryAddRtUnarySubtTILDEtInvert(RGRhteltRR_((s,/usr/lib64/python2.6/compiler/transformer.pytfactorÆs  !cCs“|i|dƒ}xytdt|ƒƒD]b}||}|dtijo,t||i||dƒgd|dƒS|i||ƒ}q)W|S(NiiR(i(RmRŒR*R5t DOUBLESTARtPowertcom_apply_trailer(RGRhR_RjR((s,/usr/lib64/python2.6/compiler/transformer.pytpowerÓs   cCs|i|dd|ƒS(Ni(RE(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pytatomàscCsB|ddtijotdd|ddƒS|i|dƒS(NiiR(i((R5R‡RãRm(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyR7ãscCsB|ddtijotdd|ddƒS|i|dƒS(NiiR(i((R5tRSQBtListtcom_list_constructor(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyR9èscCsB|ddtijotdd|ddƒS|i|dƒS(NiiR(i((R5tRBRACEtDictt com_dictmaker(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyR;íscCst|i|dƒƒS(Ni(t BackquoteRm(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyR=òscCs,t|ddƒ}t|d|ddƒS(NiiR(i(RR°(RGRhtk((s,/usr/lib64/python2.6/compiler/transformer.pyR?õscCs_|ioG|idjot|dƒi|iƒ}ntd|i|fƒSt|ƒSdS(Nsutf-8s iso-8859-1s# coding: %s %s(sutf-8s iso-8859-1(RFtunicodetencodeR(RGtlit((s,/usr/lib64/python2.6/compiler/transformer.pytdecode_literalús  cCsFd}x%|D]}||i|dƒ7}q Wt|d|ddƒS(NRUiR(ii(R)R°(RGRhR%R_((s,/usr/lib64/python2.6/compiler/transformer.pyRAs cCs t|ddd|ddƒS(NiiR(i(tName(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyRC scCs|i|dS(Ni(R/(RGR_((s,/usr/lib64/python2.6/compiler/transformer.pyR•scCs|i|d|dƒS(Nii(R/(RGR_((s,/usr/lib64/python2.6/compiler/transformer.pyRmscGsttdƒƒS(N(RR°R(RGR,((s,/usr/lib64/python2.6/compiler/transformer.pyR4%scCsäg}g}d}d}x¼|t|ƒjo¨||}|dtijp|dtijo×|dtijoO||d}|dtijo)|i|dƒ|tB}|d}qÃn|t|ƒjo\||d}|tijo||d}ntd|‚|i|dƒ|tB}nPn|i|i |ƒƒ|d}|t|ƒjoD||dti jo,|i|i ||dƒƒ|d}nt|ƒo t d‚n|d}qW|||fS(Niiisunexpected token: %sis-non-default argument follows default argument( R*R5RÂRRDRRRRt com_fpdefR–Rmt SyntaxError(RGRhRR‚RƒRjR_R((s,/usr/lib64/python2.6/compiler/transformer.pyR~+s> (   +  cCs6|ddtijo|i|dƒS|ddS(Niii(R5R8t com_fplist(RGR_((s,/usr/lib64/python2.6/compiler/transformer.pyR+]scCsrt|ƒdjo|i|dƒSg}x:tdt|ƒdƒD] }|i|i||ƒƒqDWt|ƒS(Nii(R*R+RŒRR (RGR_RLRj((s,/usr/lib64/python2.6/compiler/transformer.pyR-cscCs_d}xN|D]F}t|ƒtdƒjo'|ddjo||dd}q q W|d S(NRUiiR¿iÿÿÿÿ((R(RGR_RIR`((s,/usr/lib64/python2.6/compiler/transformer.pyRÁls *cCs§|dtijpt‚|d}|i|ddƒ}t|ƒdjo |dfS|dddjpt‚|ddtijpt‚||ddfS(Niitasi(R0tdotted_as_nameRnRÁR*RR5RD(RGR_tdot((s,/usr/lib64/python2.6/compiler/transformer.pytcom_dotted_as_namets  cCs||dtijpt‚|d}|i|dƒg}x:tdt|ƒdƒD] }|i|i||ƒƒqTW|S(Niii(R0tdotted_as_namesRnR1RŒR*R(RGR_RRj((s,/usr/lib64/python2.6/compiler/transformer.pyR¼~s cCsÂ|dtijpt‚|d}|ddtijpt‚t|ƒdjo|dddfS|dddjp t|‚|ddtijpt‚|dd|ddfS(NiiR.i(R0timport_as_nameRnR5RDR*R(RGR_((s,/usr/lib64/python2.6/compiler/transformer.pytcom_import_as_name†s cCs||dtijpt‚|d}|i|dƒg}x:tdt|ƒdƒD] }|i|i||ƒƒqTW|S(Niii(R0timport_as_namesRnR4RŒR*R(RGR_RRj((s,/usr/lib64/python2.6/compiler/transformer.pyRÄs cCsGg}x:tdt|ƒdƒD] }|i|i||ƒƒqW|S(Nii(RŒR*RRm(RGR_RŠRj((s,/usr/lib64/python2.6/compiler/transformer.pyRˆ˜s c Csû|ddtijo6t|i|dƒ|i|dƒd|ddƒSg}d}d}x@tdt|ƒdƒD]&}||}|dtijo’t|ƒdjoJ|i|dƒ}t|ƒdjo|i |dt ƒ}qd}n d}}|i |||i||dƒfƒn|dtijo\|ddjo|i||dƒ}qŸ|dd jo|i||dƒ}qŸqyqyWt |i|dƒ||d|ddƒ} |ot| |d|ddƒS| SdS( NiiiiR(iiRêtfinally( R5RDt TryFinallyRmRRŒR*R0t except_clauseR—RRt TryExcept( RGRhtclausesRÓt finallyNodeRjR_R¸R·t try_except((s,/usr/lib64/python2.6/compiler/transformer.pyRÜžs8   +#cCs€|i|dƒ}|i|dƒ}|ddtijo d}n|i|ddtƒ}t|||d|ddƒS(NiiÿÿÿÿiiR((RmR5R†RR—RtWith(RGRhRTtbodytvar((s,/usr/lib64/python2.6/compiler/transformer.pyRÞÇs  cCs|i|dƒS(Ni(Rm(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyRàÑscCs#|dtijpt‚|dS(Nii(R0t augassignRn(RGR_((s,/usr/lib64/python2.6/compiler/transformer.pyRšÕscCsG|i|ƒ}|ittttfjo|Std|ii‚dS(s…Return node suitable for lvalue of augmented assignment Names, slices, and attributes are the only allowable nodes. scan't assign to %sN(Rmt __class__R*tSlicet SubscriptRpR,R(RGR_R"((s,/usr/lib64/python2.6/compiler/transformer.pyR™ÙscCspxi|d}|titititifjo2t|ƒdjo|i||ƒS|d}q|tjo.t|ƒdjo td‚n|d}q|ti joÒ|ddti jo td‚nt|ƒdjoŒ|i |dƒ}x^t dt|ƒdƒD]C}||}|dt ijo td‚n|i||ƒ}qW|i||d|ƒS|d}q|ti joË|dd}|t ijo/|d}|dt ijo td‚qXqi|t ijo<|d}|dt ijo td‚n|i||ƒS|t ijo|i|d|ƒStd‚qtd |‚qdS( Niiiscan't assign to operatoriÿÿÿÿscan't assign to ()scan't assign to []scan't assign to literalsbad assignment (%s)(R0texprlistRät testlist_safeRèR*tcom_assign_tuplet _assign_typesR,RRRmRŒR5RRtcom_assign_trailerR8R‡R:Rtcom_assign_listRDtcom_assign_name(RGR_t assigningRtprimaryRjtch((s,/usr/lib64/python2.6/compiler/transformer.pyR—ãsN %         cCs\g}x=tdt|ƒdƒD]#}|i|i|||ƒƒqWt|dt|ƒƒS(NiiR((RŒR*RR—tAssTupleR%(RGR_RKtassignsRj((s,/usr/lib64/python2.6/compiler/transformer.pyRFs !cCsÎg}x¯tdt|ƒdƒD]•}|dt|ƒjo[||ddtijo td‚n||ddtijpt||d‚n|i|i |||ƒƒqWt |dt |ƒƒS(Niiis"can't assign to list comprehensionR(( RŒR*R0tlist_forR,R5R£RnRR—tAssListR%(RGR_RKRORj((s,/usr/lib64/python2.6/compiler/transformer.pyRIs 2!cCst|d|d|dƒS(NiR(i(tAssName(RGR_RK((s,/usr/lib64/python2.6/compiler/transformer.pyRJscCsŒ|dd}|tijo|i||d|ƒS|tijo|i||d|ƒS|tijo td‚ntd|‚dS(Niiiscan't assign to function callsunknown trailer type: %s(R5Rotcom_assign_attrR:tcom_subscriptlistR8R,(RGRLR_RKR((s,/usr/lib64/python2.6/compiler/transformer.pyRH"s cCst||d|d|dƒS(NiR(iÿÿÿÿ(tAssAttr(RGRLR_RK((s,/usr/lib64/python2.6/compiler/transformer.pyRS,scCsžt|ƒ}|djo"|d}|i|ƒ|dƒSg}xDtd|dƒD]0}||}|i|i|ƒ|dƒƒqTW||dt|ƒƒS(s=Compile 'NODE (OP NODE)*' into (type, [ node1, ..., nodeN ]).iiiR((R*R•RŒRR%(RGt constructorRhR"R`R2Rj((s,/usr/lib64/python2.6/compiler/transformer.pyRâ/s    $cCsO|i|ƒ|dƒ}|dj pt‚t|tƒo|St|gƒS(Ni(R•RRnR$Rg(RGR_Ró((s,/usr/lib64/python2.6/compiler/transformer.pyRa;s cCsb|i|ƒ|dƒ}|dj pt‚t|tƒo|i|iƒn|i|ƒdS(Ni(R•RRnR$RgtextendR!R(RGRkR_Ró((s,/usr/lib64/python2.6/compiler/transformer.pyReBs RPcCsÅg}x¥tdt|ƒƒD]Ž}||dtijo7t||ƒdjpt‚|i|d||ƒS||dtijoqn|i|i ||ƒƒqWt |d|di ƒS(NiiR(( RŒR*R0RPRntcom_list_comprehensionR5R£RRmRR((RGRhtvaluesRj((s,/usr/lib64/python2.6/compiler/transformer.pyR Ks  c Cso|dd}g}xE|o=|dd}|djo|i|dtƒ}|i|dƒ}t||gƒ}|dd|_|i|ƒt|ƒdjo d}qW|i|dƒ}q|djoq|i|dƒ} t | d|ddƒ} |i i| ƒt|ƒdjo d}qW|i|dƒ}qt d ||f‚qWt ||d|ƒS( NiitforiiRéR(is,unexpected list comprehension element: %s %d( R—RRmt ListCompForR(RR*Rt com_list_itert ListCompIftifsR,tListComp( RGRTR_R(tforsRRÙRÚtnewforRçtnewif((s,/usr/lib64/python2.6/compiler/transformer.pyRXXs2     cCs#|dtijpt‚|dS(Nii(R0t list_iterRn(RGR_((s,/usr/lib64/python2.6/compiler/transformer.pyR\{scCsZg}x:tdt|ƒdƒD] }|i|i||ƒƒqWt|d|diƒS(NiiR(i(RŒR*RRmRR((RGRhRYRj((s,/usr/lib64/python2.6/compiler/transformer.pyR s Råc Cs|dd}g}xB|o:|dd}|djoŠ|i|dtƒ}|i|dƒ}t||gd|ddƒ}|i|ƒt|ƒdjo d}qT|i|dƒ}q|djoq|i|dƒ} t| d|ddƒ} |i i| ƒt|ƒdjo d}qT|i|dƒ}qt d ||f‚qWt |d _ t t||ƒd|ƒS( NiiRZiR(iRéis.unexpected generator expression element: %s %di(R—RRmt GenExprForRR*Rt com_gen_itert GenExprIfR^R,tTruet is_outmosttGenExprt GenExprInner( RGRTR_R(R`RRÙtgenNodeRaRçRb((s,/usr/lib64/python2.6/compiler/transformer.pyRæ†s4      cCs#|dtijpt‚|dS(Nii(R0tgen_iterRn(RGR_((s,/usr/lib64/python2.6/compiler/transformer.pyRe¨scCsug}xQtdt|ƒdƒD]7}|i|i||ƒ|i||dƒfƒqWt|d|ddiƒS(NiiiR(i(RŒR*RRmR"R((RGRhR2Rj((s,/usr/lib64/python2.6/compiler/transformer.pyR#¬s cCs‘|dd}|tijo|i||dƒS|tijo|i||dƒS|tijo|i||dtƒStd|‚dS(Niiisunknown node type: %s( R5R8RuRotcom_select_memberR:RTRR,(RGt primaryNodeRhR((s,/usr/lib64/python2.6/compiler/transformer.pyR´scCs<|dtijo td‚nt||dd|dƒS(Nismember must be a nameiR(i(R5RDR,Rp(RGRnRh((s,/usr/lib64/python2.6/compiler/transformer.pyRm¿s c CsÇ|dtijot|gdt|ƒƒSg}d}d}}t|ƒ}d}xO||joA||} | dtijoB|dj o td‚n|i||dƒ}|d}qYnW| dti joB|dj o td‚n|i||dƒ}|d}qYn|i | ||ƒ\}} |djoHt | t ƒo8t| ƒdjo%| ddt ijo td‚n|i| ƒ|d}qYWt||||dt|ƒƒS( NiR(is$already have the varargs indentifieris#already have the kwargs indentifieris&generator expression needs parenthesis(R5R‡tCallFuncR%RR*RÂR,RmRt com_argumentR$RiR0RåR( RGRnRhR,tkwt star_nodet dstar_nodet len_nodelistRjR_Ró((s,/usr/lib64/python2.6/compiler/transformer.pyRuÄs<          +  cCsRt|ƒdjoF|ddtijo.|i|dƒ}d|i||dƒfSt|ƒdjo@|o td‚n|o td‚nd|i|dƒfS|i|dƒ}|d}x6t|ƒdjo"|dtijo|d}qÌW|dtijotd|d‚nt|d|d|dƒ}d|fS( Niiiis!non-keyword arg after keyword args+only named arguments may follow *expressions#keyword can't be an expression (%s)R(( R*R0RåRmRæR,R5RDtKeyword(RGRhRqRrRçRóR`R_((s,/usr/lib64/python2.6/compiler/transformer.pyRpës$+   'c Csït|ƒdjo}|d}|ddtijp+t|ƒdjo-|ddtijo,|ddtijo|i|||ƒSng}x:tdt|ƒdƒD] }|i|i||ƒƒq¯Wt |||dt |ƒƒS(NiiiiÿÿÿÿR(( R*R5R†R0R“t com_sliceRŒRt com_subscriptRCR%(RGRLRhRKtsubt subscriptsRj((s,/usr/lib64/python2.6/compiler/transformer.pyRTþs +cCs‚|d}|d}|tijo |ddtijotƒS|tijpt|ƒdjo|i|ƒS|i|ƒS(Niii(R5RotEllipsisR†R*t com_sliceobjRm(RGR_RMR((s,/usr/lib64/python2.6/compiler/transformer.pyRws  (#cCsEg}|ddtijo|itdƒƒd}n!|i|i|dƒƒd}|t|ƒjo@||dtijo(|i|i||ƒƒ|d}n|itdƒƒxkt |t|ƒƒD]T}||}t|ƒdjo|itdƒƒq×|i|i|dƒƒq×Wt |dt |ƒƒS(NiiiiR(( R5R†RR°RRmR*R0RçRŒtSliceobjR%(RGR_R2RjtjRM((s,/usr/lib64/python2.6/compiler/transformer.pyR{s"  + cCs¿d}}t|ƒdjoF|ddtijo|i|dƒ}q |i|dƒ}n>t|ƒdjo*|i|dƒ}|i|dƒ}nt||||dt|ƒƒS(NiiiiiR((RR*R5R†RmRBR%(RGRLR_RKtlowertupper((s,/usr/lib64/python2.6/compiler/transformer.pyRv@s c Cs¯|djo|d}|d}n|tijo]t|ƒdjo|i|dƒSx0|D](}|dtijo|i|ƒSqaWdS|tijo8x0|D](}|dtijo|i|ƒSq©WdS|tijoM|ddti jo0d}x"|D]}|t |dƒ}qW|SdS|tijp |ti jp|ti jo|i|dƒS|t jo%t|ƒdjo|i|dƒSdS(NiiRU(RR0RRR*RcR‹RZRR5RBRRt small_stmtt _doc_nodes(RGR_R`RxtsR((s,/usr/lib64/python2.6/compiler/transformer.pyRcNs>    N(RRt__doc__RJRQRRRWRORYRZR[RrRwRzR|R]R\t old_lambdefR^R‹R€t flow_stmtt compound_stmtRRŽR}RRRtR‘R’R“R”R¡R¨R©RªR¬R®R±R²R´R¹RºR½RÈRÊRÌRÎRÔR×RÛRÝRßRáRRRäREt testlist1RDRèRçRïtold_testRñRôRúRTRýRÿRR RRRRR7R9R;R=R?R)RARCR•RmR4R~R+R-RÁR1R¼R4RÄRˆRÜRÞRàRšR™R—RFRIRJRHRSRâRaReRR0R RXR\RæReR#RRmRuRpRTRwR{RvRRc(((s,/usr/lib64/python2.6/compiler/transformer.pyR^sþ          !                                         !                2      )   ,      #   "    '   $ ts==s<=s>=s!=R²R´cCs|g}xo|D]g}t|tƒo|iti||ƒƒq t|tƒo|i|ƒq |it|ƒƒq W|S(N(R$tintRt_namestgetR+t debug_tree(RPR"R((s,/usr/lib64/python2.6/compiler/transformer.pyRŽÒs(SRƒt compiler.astRMR0R5t StandardErrorRtcompiler.constsRRRRRRR RR%R.RR¡RäRERçRïRñRôRúRTRýRÿRR RRRRtLESStGREATERtEQEQUALR–t LESSEQUALt GREATEREQUALtNOTEQUALRöR]R^R‹R€R…RR†R¨R©RªR¬R®R±R¹RºRÊRÌRÎRÔR×RÛRÝRßRRRDRt_legal_node_typesRRR²R´RGRŒR1R2R%tvttok_nameRŽ(((s,/usr/lib64/python2.6/compiler/transformer.pyt sÖ      ÿÿÿÿÿ            PK’[ÆN««misc.pyonuW+A„¶Ñò §ÚêLc@sKd„Zdd d„ƒYZdd d„ƒYZdZd„Zd„ZdS( cCsLg}x?|D]7}t|tƒo|t|ƒ}q |i|ƒq W|S(N(t isinstancettupletflattentappend(ttupteltstelt((s%/usr/lib64/python2.6/compiler/misc.pyRstSetcBsPeZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z RS(cCs h|_dS(N(R(tself((s%/usr/lib64/python2.6/compiler/misc.pyt__init__ scCs t|iƒS(N(tlenR(R((s%/usr/lib64/python2.6/compiler/misc.pyt__len__scCs ||ijS(N(R(RR((s%/usr/lib64/python2.6/compiler/misc.pyt __contains__scCs||i|s   PK’[<›ÿÿ __init__.pyonuW+A„¶Ñò §ÚêLc@sidZddklZedddƒ[ddklZlZddklZddkl Z l Z d S( sÞPackage for parsing and compiling Python source code There are several functions defined at the top level that are imported from modules contained in the package. parse(buf, mode="exec") -> AST Converts a string containing Python source code to an abstract syntax tree (AST). The AST is defined in compiler.ast. parseFile(path) -> AST The same as parse(open(path)) walk(ast, visitor, verbose=None) Does a pre-order walk over the ast using the visitor instance. See compiler.visitor for details. compile(source, filename, mode, flags=None, dont_inherit=None) Returns a code object. A replacement for the builtin compile() function. compileFile(filename) Generates a .pyc file by compiling filename. iÿÿÿÿ(twarnpy3ks3the compiler package has been removed in Python 3.0t stackleveli(tparset parseFile(twalk(tcompilet compileFileN( t__doc__twarningsRtcompiler.transformerRRtcompiler.visitorRtcompiler.pycodegenRR(((s)/usr/lib64/python2.6/compiler/__init__.pyts PK’[ž&6b)f)f pyassem.pynuW+A„¶"""A flow graph representation for Python bytecode""" import dis import types import sys from compiler import misc from compiler.consts \ import CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS class FlowGraph: def __init__(self): self.current = self.entry = Block() self.exit = Block("exit") self.blocks = misc.Set() self.blocks.add(self.entry) self.blocks.add(self.exit) def startBlock(self, block): if self._debug: if self.current: print "end", repr(self.current) print " next", self.current.next print " ", self.current.get_children() print repr(block) self.current = block def nextBlock(self, block=None): # XXX think we need to specify when there is implicit transfer # from one block to the next. might be better to represent this # with explicit JUMP_ABSOLUTE instructions that are optimized # out when they are unnecessary. # # I think this strategy works: each block has a child # designated as "next" which is returned as the last of the # children. because the nodes in a graph are emitted in # reverse post order, the "next" block will always be emitted # immediately after its parent. # Worry: maintaining this invariant could be tricky if block is None: block = self.newBlock() # Note: If the current block ends with an unconditional # control transfer, then it is incorrect to add an implicit # transfer to the block graph. The current code requires # these edges to get the blocks emitted in the right order, # however. :-( If a client needs to remove these edges, call # pruneEdges(). self.current.addNext(block) self.startBlock(block) def newBlock(self): b = Block() self.blocks.add(b) return b def startExitBlock(self): self.startBlock(self.exit) _debug = 0 def _enable_debug(self): self._debug = 1 def _disable_debug(self): self._debug = 0 def emit(self, *inst): if self._debug: print "\t", inst if inst[0] in ['RETURN_VALUE', 'YIELD_VALUE']: self.current.addOutEdge(self.exit) if len(inst) == 2 and isinstance(inst[1], Block): self.current.addOutEdge(inst[1]) self.current.emit(inst) def getBlocksInOrder(self): """Return the blocks in reverse postorder i.e. each node appears before all of its successors """ # XXX make sure every node that doesn't have an explicit next # is set so that next points to exit for b in self.blocks.elements(): if b is self.exit: continue if not b.next: b.addNext(self.exit) order = dfs_postorder(self.entry, {}) order.reverse() self.fixupOrder(order, self.exit) # hack alert if not self.exit in order: order.append(self.exit) return order def fixupOrder(self, blocks, default_next): """Fixup bad order introduced by DFS.""" # XXX This is a total mess. There must be a better way to get # the code blocks in the right order. self.fixupOrderHonorNext(blocks, default_next) self.fixupOrderForward(blocks, default_next) def fixupOrderHonorNext(self, blocks, default_next): """Fix one problem with DFS. The DFS uses child block, but doesn't know about the special "next" block. As a result, the DFS can order blocks so that a block isn't next to the right block for implicit control transfers. """ index = {} for i in range(len(blocks)): index[blocks[i]] = i for i in range(0, len(blocks) - 1): b = blocks[i] n = blocks[i + 1] if not b.next or b.next[0] == default_next or b.next[0] == n: continue # The blocks are in the wrong order. Find the chain of # blocks to insert where they belong. cur = b chain = [] elt = cur while elt.next and elt.next[0] != default_next: chain.append(elt.next[0]) elt = elt.next[0] # Now remove the blocks in the chain from the current # block list, so that they can be re-inserted. l = [] for b in chain: assert index[b] > i l.append((index[b], b)) l.sort() l.reverse() for j, b in l: del blocks[index[b]] # Insert the chain in the proper location blocks[i:i + 1] = [cur] + chain # Finally, re-compute the block indexes for i in range(len(blocks)): index[blocks[i]] = i def fixupOrderForward(self, blocks, default_next): """Make sure all JUMP_FORWARDs jump forward""" index = {} chains = [] cur = [] for b in blocks: index[b] = len(chains) cur.append(b) if b.next and b.next[0] == default_next: chains.append(cur) cur = [] chains.append(cur) while 1: constraints = [] for i in range(len(chains)): l = chains[i] for b in l: for c in b.get_children(): if index[c] < i: forward_p = 0 for inst in b.insts: if inst[0] == 'JUMP_FORWARD': if inst[1] == c: forward_p = 1 if not forward_p: continue constraints.append((index[c], i)) if not constraints: break # XXX just do one for now # do swaps to get things in the right order goes_before, a_chain = constraints[0] assert a_chain > goes_before c = chains[a_chain] chains.remove(c) chains.insert(goes_before, c) del blocks[:] for c in chains: for b in c: blocks.append(b) def getBlocks(self): return self.blocks.elements() def getRoot(self): """Return nodes appropriate for use with dominator""" return self.entry def getContainedGraphs(self): l = [] for b in self.getBlocks(): l.extend(b.getContainedGraphs()) return l def dfs_postorder(b, seen): """Depth-first search of tree rooted at b, return in postorder""" order = [] seen[b] = b for c in b.get_children(): if c in seen: continue order = order + dfs_postorder(c, seen) order.append(b) return order class Block: _count = 0 def __init__(self, label=''): self.insts = [] self.inEdges = misc.Set() self.outEdges = misc.Set() self.label = label self.bid = Block._count self.next = [] Block._count = Block._count + 1 def __repr__(self): if self.label: return "" % (self.label, self.bid) else: return "" % (self.bid) def __str__(self): insts = map(str, self.insts) return "" % (self.label, self.bid, '\n'.join(insts)) def emit(self, inst): op = inst[0] if op[:4] == 'JUMP': self.outEdges.add(inst[1]) self.insts.append(inst) def getInstructions(self): return self.insts def addInEdge(self, block): self.inEdges.add(block) def addOutEdge(self, block): self.outEdges.add(block) def addNext(self, block): self.next.append(block) assert len(self.next) == 1, map(str, self.next) _uncond_transfer = ('RETURN_VALUE', 'RAISE_VARARGS', 'YIELD_VALUE', 'JUMP_ABSOLUTE', 'JUMP_FORWARD', 'CONTINUE_LOOP') def pruneNext(self): """Remove bogus edge for unconditional transfers Each block has a next edge that accounts for implicit control transfers, e.g. from a JUMP_IF_FALSE to the block that will be executed if the test is true. These edges must remain for the current assembler code to work. If they are removed, the dfs_postorder gets things in weird orders. However, they shouldn't be there for other purposes, e.g. conversion to SSA form. This method will remove the next edge when it follows an unconditional control transfer. """ try: op, arg = self.insts[-1] except (IndexError, ValueError): return if op in self._uncond_transfer: self.next = [] def get_children(self): if self.next and self.next[0] in self.outEdges: self.outEdges.remove(self.next[0]) return self.outEdges.elements() + self.next def getContainedGraphs(self): """Return all graphs contained within this block. For example, a MAKE_FUNCTION block will contain a reference to the graph for the function body. """ contained = [] for inst in self.insts: if len(inst) == 1: continue op = inst[1] if hasattr(op, 'graph'): contained.append(op.graph) return contained # flags for code objects # the FlowGraph is transformed in place; it exists in one of these states RAW = "RAW" FLAT = "FLAT" CONV = "CONV" DONE = "DONE" class PyFlowGraph(FlowGraph): super_init = FlowGraph.__init__ def __init__(self, name, filename, args=(), optimized=0, klass=None): self.super_init() self.name = name self.filename = filename self.docstring = None self.args = args # XXX self.argcount = getArgCount(args) self.klass = klass if optimized: self.flags = CO_OPTIMIZED | CO_NEWLOCALS else: self.flags = 0 self.consts = [] self.names = [] # Free variables found by the symbol table scan, including # variables used only in nested scopes, are included here. self.freevars = [] self.cellvars = [] # The closure list is used to track the order of cell # variables and free variables in the resulting code object. # The offsets used by LOAD_CLOSURE/LOAD_DEREF refer to both # kinds of variables. self.closure = [] self.varnames = list(args) or [] for i in range(len(self.varnames)): var = self.varnames[i] if isinstance(var, TupleArg): self.varnames[i] = var.getName() self.stage = RAW def setDocstring(self, doc): self.docstring = doc def setFlag(self, flag): self.flags = self.flags | flag if flag == CO_VARARGS: self.argcount = self.argcount - 1 def checkFlag(self, flag): if self.flags & flag: return 1 def setFreeVars(self, names): self.freevars = list(names) def setCellVars(self, names): self.cellvars = names def getCode(self): """Get a Python code object""" assert self.stage == RAW self.computeStackDepth() self.flattenGraph() assert self.stage == FLAT self.convertArgs() assert self.stage == CONV self.makeByteCode() assert self.stage == DONE return self.newCodeObject() def dump(self, io=None): if io: save = sys.stdout sys.stdout = io pc = 0 for t in self.insts: opname = t[0] if opname == "SET_LINENO": print if len(t) == 1: print "\t", "%3d" % pc, opname pc = pc + 1 else: print "\t", "%3d" % pc, opname, t[1] pc = pc + 3 if io: sys.stdout = save def computeStackDepth(self): """Compute the max stack depth. Approach is to compute the stack effect of each basic block. Then find the path through the code with the largest total effect. """ depth = {} exit = None for b in self.getBlocks(): depth[b] = findDepth(b.getInstructions()) seen = {} def max_depth(b, d): if b in seen: return d seen[b] = 1 d = d + depth[b] children = b.get_children() if children: return max([max_depth(c, d) for c in children]) else: if not b.label == "exit": return max_depth(self.exit, d) else: return d self.stacksize = max_depth(self.entry, 0) def flattenGraph(self): """Arrange the blocks in order and resolve jumps""" assert self.stage == RAW self.insts = insts = [] pc = 0 begin = {} end = {} for b in self.getBlocksInOrder(): begin[b] = pc for inst in b.getInstructions(): insts.append(inst) if len(inst) == 1: pc = pc + 1 elif inst[0] != "SET_LINENO": # arg takes 2 bytes pc = pc + 3 end[b] = pc pc = 0 for i in range(len(insts)): inst = insts[i] if len(inst) == 1: pc = pc + 1 elif inst[0] != "SET_LINENO": pc = pc + 3 opname = inst[0] if self.hasjrel.has_elt(opname): oparg = inst[1] offset = begin[oparg] - pc insts[i] = opname, offset elif self.hasjabs.has_elt(opname): insts[i] = opname, begin[inst[1]] self.stage = FLAT hasjrel = misc.Set() for i in dis.hasjrel: hasjrel.add(dis.opname[i]) hasjabs = misc.Set() for i in dis.hasjabs: hasjabs.add(dis.opname[i]) def convertArgs(self): """Convert arguments from symbolic to concrete form""" assert self.stage == FLAT self.consts.insert(0, self.docstring) self.sort_cellvars() for i in range(len(self.insts)): t = self.insts[i] if len(t) == 2: opname, oparg = t conv = self._converters.get(opname, None) if conv: self.insts[i] = opname, conv(self, oparg) self.stage = CONV def sort_cellvars(self): """Sort cellvars in the order of varnames and prune from freevars. """ cells = {} for name in self.cellvars: cells[name] = 1 self.cellvars = [name for name in self.varnames if name in cells] for name in self.cellvars: del cells[name] self.cellvars = self.cellvars + cells.keys() self.closure = self.cellvars + self.freevars def _lookupName(self, name, list): """Return index of name in list, appending if necessary This routine uses a list instead of a dictionary, because a dictionary can't store two different keys if the keys have the same value but different types, e.g. 2 and 2L. The compiler must treat these two separately, so it does an explicit type comparison before comparing the values. """ t = type(name) for i in range(len(list)): if t == type(list[i]) and list[i] == name: return i end = len(list) list.append(name) return end _converters = {} def _convert_LOAD_CONST(self, arg): if hasattr(arg, 'getCode'): arg = arg.getCode() return self._lookupName(arg, self.consts) def _convert_LOAD_FAST(self, arg): self._lookupName(arg, self.names) return self._lookupName(arg, self.varnames) _convert_STORE_FAST = _convert_LOAD_FAST _convert_DELETE_FAST = _convert_LOAD_FAST def _convert_LOAD_NAME(self, arg): if self.klass is None: self._lookupName(arg, self.varnames) return self._lookupName(arg, self.names) def _convert_NAME(self, arg): if self.klass is None: self._lookupName(arg, self.varnames) return self._lookupName(arg, self.names) _convert_STORE_NAME = _convert_NAME _convert_DELETE_NAME = _convert_NAME _convert_IMPORT_NAME = _convert_NAME _convert_IMPORT_FROM = _convert_NAME _convert_STORE_ATTR = _convert_NAME _convert_LOAD_ATTR = _convert_NAME _convert_DELETE_ATTR = _convert_NAME _convert_LOAD_GLOBAL = _convert_NAME _convert_STORE_GLOBAL = _convert_NAME _convert_DELETE_GLOBAL = _convert_NAME def _convert_DEREF(self, arg): self._lookupName(arg, self.names) self._lookupName(arg, self.varnames) return self._lookupName(arg, self.closure) _convert_LOAD_DEREF = _convert_DEREF _convert_STORE_DEREF = _convert_DEREF def _convert_LOAD_CLOSURE(self, arg): self._lookupName(arg, self.varnames) return self._lookupName(arg, self.closure) _cmp = list(dis.cmp_op) def _convert_COMPARE_OP(self, arg): return self._cmp.index(arg) # similarly for other opcodes... for name, obj in locals().items(): if name[:9] == "_convert_": opname = name[9:] _converters[opname] = obj del name, obj, opname def makeByteCode(self): assert self.stage == CONV self.lnotab = lnotab = LineAddrTable() for t in self.insts: opname = t[0] if len(t) == 1: lnotab.addCode(self.opnum[opname]) else: oparg = t[1] if opname == "SET_LINENO": lnotab.nextLine(oparg) continue hi, lo = twobyte(oparg) try: lnotab.addCode(self.opnum[opname], lo, hi) except ValueError: print opname, oparg print self.opnum[opname], lo, hi raise self.stage = DONE opnum = {} for num in range(len(dis.opname)): opnum[dis.opname[num]] = num del num def newCodeObject(self): assert self.stage == DONE if (self.flags & CO_NEWLOCALS) == 0: nlocals = 0 else: nlocals = len(self.varnames) argcount = self.argcount if self.flags & CO_VARKEYWORDS: argcount = argcount - 1 return types.CodeType(argcount, nlocals, self.stacksize, self.flags, self.lnotab.getCode(), self.getConsts(), tuple(self.names), tuple(self.varnames), self.filename, self.name, self.lnotab.firstline, self.lnotab.getTable(), tuple(self.freevars), tuple(self.cellvars)) def getConsts(self): """Return a tuple for the const slot of the code object Must convert references to code (MAKE_FUNCTION) to code objects recursively. """ l = [] for elt in self.consts: if isinstance(elt, PyFlowGraph): elt = elt.getCode() l.append(elt) return tuple(l) def isJump(opname): if opname[:4] == 'JUMP': return 1 class TupleArg: """Helper for marking func defs with nested tuples in arglist""" def __init__(self, count, names): self.count = count self.names = names def __repr__(self): return "TupleArg(%s, %s)" % (self.count, self.names) def getName(self): return ".%d" % self.count def getArgCount(args): argcount = len(args) if args: for arg in args: if isinstance(arg, TupleArg): numNames = len(misc.flatten(arg.names)) argcount = argcount - numNames return argcount def twobyte(val): """Convert an int argument into high and low bytes""" assert isinstance(val, int) return divmod(val, 256) class LineAddrTable: """lnotab This class builds the lnotab, which is documented in compile.c. Here's a brief recap: For each SET_LINENO instruction after the first one, two bytes are added to lnotab. (In some cases, multiple two-byte entries are added.) The first byte is the distance in bytes between the instruction for the last SET_LINENO and the current SET_LINENO. The second byte is offset in line numbers. If either offset is greater than 255, multiple two-byte entries are added -- see compile.c for the delicate details. """ def __init__(self): self.code = [] self.codeOffset = 0 self.firstline = 0 self.lastline = 0 self.lastoff = 0 self.lnotab = [] def addCode(self, *args): for arg in args: self.code.append(chr(arg)) self.codeOffset = self.codeOffset + len(args) def nextLine(self, lineno): if self.firstline == 0: self.firstline = lineno self.lastline = lineno else: # compute deltas addr = self.codeOffset - self.lastoff line = lineno - self.lastline # Python assumes that lineno always increases with # increasing bytecode address (lnotab is unsigned char). # Depending on when SET_LINENO instructions are emitted # this is not always true. Consider the code: # a = (1, # b) # In the bytecode stream, the assignment to "a" occurs # after the loading of "b". This works with the C Python # compiler because it only generates a SET_LINENO instruction # for the assignment. if line >= 0: push = self.lnotab.append while addr > 255: push(255); push(0) addr -= 255 while line > 255: push(addr); push(255) line -= 255 addr = 0 if addr > 0 or line > 0: push(addr); push(line) self.lastline = lineno self.lastoff = self.codeOffset def getCode(self): return ''.join(self.code) def getTable(self): return ''.join(map(chr, self.lnotab)) class StackDepthTracker: # XXX 1. need to keep track of stack depth on jumps # XXX 2. at least partly as a result, this code is broken def findDepth(self, insts, debug=0): depth = 0 maxDepth = 0 for i in insts: opname = i[0] if debug: print i, delta = self.effect.get(opname, None) if delta is not None: depth = depth + delta else: # now check patterns for pat, pat_delta in self.patterns: if opname[:len(pat)] == pat: delta = pat_delta depth = depth + delta break # if we still haven't found a match if delta is None: meth = getattr(self, opname, None) if meth is not None: depth = depth + meth(i[1]) if depth > maxDepth: maxDepth = depth if debug: print depth, maxDepth return maxDepth effect = { 'POP_TOP': -1, 'DUP_TOP': 1, 'LIST_APPEND': -2, 'SLICE+1': -1, 'SLICE+2': -1, 'SLICE+3': -2, 'STORE_SLICE+0': -1, 'STORE_SLICE+1': -2, 'STORE_SLICE+2': -2, 'STORE_SLICE+3': -3, 'DELETE_SLICE+0': -1, 'DELETE_SLICE+1': -2, 'DELETE_SLICE+2': -2, 'DELETE_SLICE+3': -3, 'STORE_SUBSCR': -3, 'DELETE_SUBSCR': -2, # PRINT_EXPR? 'PRINT_ITEM': -1, 'RETURN_VALUE': -1, 'YIELD_VALUE': -1, 'EXEC_STMT': -3, 'BUILD_CLASS': -2, 'STORE_NAME': -1, 'STORE_ATTR': -2, 'DELETE_ATTR': -1, 'STORE_GLOBAL': -1, 'BUILD_MAP': 1, 'COMPARE_OP': -1, 'STORE_FAST': -1, 'IMPORT_STAR': -1, 'IMPORT_NAME': -1, 'IMPORT_FROM': 1, 'LOAD_ATTR': 0, # unlike other loads # close enough... 'SETUP_EXCEPT': 3, 'SETUP_FINALLY': 3, 'FOR_ITER': 1, 'WITH_CLEANUP': -1, } # use pattern match patterns = [ ('BINARY_', -1), ('LOAD_', 1), ] def UNPACK_SEQUENCE(self, count): return count-1 def BUILD_TUPLE(self, count): return -count+1 def BUILD_LIST(self, count): return -count+1 def CALL_FUNCTION(self, argc): hi, lo = divmod(argc, 256) return -(lo + hi * 2) def CALL_FUNCTION_VAR(self, argc): return self.CALL_FUNCTION(argc)-1 def CALL_FUNCTION_KW(self, argc): return self.CALL_FUNCTION(argc)-1 def CALL_FUNCTION_VAR_KW(self, argc): return self.CALL_FUNCTION(argc)-2 def MAKE_FUNCTION(self, argc): return -argc def MAKE_CLOSURE(self, argc): # XXX need to account for free variables too! return -argc def BUILD_SLICE(self, argc): if argc == 2: return -1 elif argc == 3: return -2 def DUP_TOPX(self, argc): return argc findDepth = StackDepthTracker().findDepth PK’[ákþï²²transformer.pyonuW+A„¶Ñò §ÚêLc/@sjdZddkTddkZddkZddkZdefd„ƒYZddklZl Z ddkl Z l Z l Z d„Z d d „Zd „Zd „Zd „Zdfd„ƒYZeieieieieieieieieieieieieiei ei!ei"gZ#hdei$6dei%6dei&6dei'6dei(6dei)6dei*6Z+ei,ei-ei.ei/ei0ei1ei2eiei3ei4ei5ei6ei7ei8ei9ei:ei;ei<ei=ei>ei?ei@eiAeiBeiCeieieieieieieiDeieieieieiei ei!ei"eiEg)ZFeGedƒoeFiHeiIƒneGedƒoeFiHeiJƒneieieieieieieieieieiei ei!g ZKhZLx'eiMiNƒD]\ZOZPePeLeO AST parseFile(path) -> AST iÿÿÿÿ(t*Nt WalkerErrorcBseZRS((t__name__t __module__(((s,/usr/lib64/python2.6/compiler/transformer.pyR!s(t CO_VARARGStCO_VARKEYWORDS(t OP_ASSIGNt OP_DELETEtOP_APPLYcCs3t|dƒ}|iƒd}|iƒt|ƒS(NtUs (topentreadtclosetparse(tpathtftsrc((s,/usr/lib64/python2.6/compiler/transformer.pyt parseFile's texeccCsY|djp |djotƒi|ƒS|djotƒi|ƒStdƒ‚dS(NRtsingletevals4compile() arg 3 must be 'exec' or 'eval' or 'single'(t Transformert parsesuitet parseexprt ValueError(tbuftmode((s,/usr/lib64/python2.6/compiler/transformer.pyR 1s  cCsµg}x¨|D] }t|dƒo|i|iƒƒq t|ƒtdƒjo|itt|ƒƒƒq t|ƒtgƒjo|it|ƒƒq |i|ƒq W|S(NtasList(NN(thasattrtappendRttypetNonettuple(tnodestltitem((s,/usr/lib64/python2.6/compiler/transformer.pyR:scCsht|dtƒp |dSxD|dD]8}t|tƒo"t|ƒ}|dj o|Sq(q(WdS(Nii(t isinstanceR t extractLineNoR(tasttchildtlineno((s,/usr/lib64/python2.6/compiler/transformer.pyR%Hs    cGsx|d}|tjoJyt||dŒSWqttj o!t|Gt|ƒG|GH‚qtXntdt|ƒ‚dS(Niis$Can't find appropriate Node type: %s(R!t TypeErrortlenRtstr(targstkind((s,/usr/lib64/python2.6/compiler/transformer.pytNodeRs   RcBs}eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„Zd„ZeZd„Zd„ZeZeZeZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z!d„Z"d„Z#d„Z$d„Z%d „Z&d!„Z'd"„Z(d#„Z)d$„Z*d%„Z+d&„Z,d'„Z-d(„Z.d)„Z/d*„Z0d+„Z1d,„Z2d-„Z3d.„Z4d/„Z5d0„Z6d1„Z7d2„Z8d3„Z9e9Z:e9Z;e9Z<d4„Z=d5„Z>d6„Z?e?Z@d7„ZAd8„ZBd9„ZCd:„ZDd;„ZEd<„ZFd=„ZGd>„ZHd?„ZId@„ZJdA„ZKdB„ZLdC„ZMdD„ZNdE„ZOdF„ZPdG„ZQdH„ZRdI„ZSdJ„ZTdK„ZUdL„ZVdM„ZWdN„ZXdO„ZYdP„ZZdQ„Z[dR„Z\dS„Z]dT„Z^dU„Z_dV„Z`dW„ZadX„ZbdY„ZcdZ„Zdd[„Zed\„Zfd]„Zgd^„Zhd_„Zid`„Zjda„Zkdb„Zldc„Zmdd„Zneoepdeƒodf„Zqdg„Zrdh„Zsn di„Zqeoepdjƒodk„Ztdl„Zundm„Zvdn„Zwdo„Zxdp„Zydq„Zzdr„Z{ds„Z|dt„Z}du„Z~dwdv„Z€RS(xsêUtility object for transforming Python parse trees. Exposes the following methods: tree = transform(ast_tree) tree = parsesuite(text) tree = parseexpr(text) tree = parsefile(fileob | filename) cCs×h|_xGtiiƒD]6\}}t||ƒot||ƒ|i|scCs`t|ƒdjo@|ddtijo(|i|dƒ}|i||dƒS|i|ƒS(Niii(R*R0tgen_forRmtcom_generator_expressionRß(RGRhttest((s,/usr/lib64/python2.6/compiler/transformer.pyt testlist_gexpHs+cCs¬t|ƒdjo*|ddtijo|i|dƒS|i|dƒ}t|ƒdjoE|i|dƒ}|i|dƒ}t|||d|ddƒS|S(NiiiiR((R*R0R\RmtIfExp(RGRhtthenRâtelse_((s,/usr/lib64/python2.6/compiler/transformer.pyRâNs+cCsMt|ƒdjo*|ddtijo|i|dƒS|it|ƒS(Nii(R*R0R\RÝtOr(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pytor_test\s+cCs|it|ƒS(N(RÝtAnd(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pytand_testcscCsC|i|dƒ}t|ƒdjot|d|ddƒS|S(NiÿÿÿÿiR(i(RmR*tNot(RGRhtresult((s,/usr/lib64/python2.6/compiler/transformer.pytnot_testgsc Cs|i|dƒ}t|ƒdjo|Sg}xÊtdt|ƒdƒD]°}||d}|d}|dtijoB|d}t|ƒdjo!|djo d}qºd}qÌnt|d}|dd}|i||i||ƒfƒqJWt||d|ƒS( Niiiitnotsnot insis notR((RmR*R‡R5RDt _cmp_typesRtCompare( RGRhR_tresultsRjtnlR`RR(((s,/usr/lib64/python2.6/compiler/transformer.pyt comparisonns$    $cCs|it|ƒS(N(RÝtBitor(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyRTscCs|it|ƒS(N(RÝtBitxor(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pytxor_expr“scCs|it|ƒS(N(RÝtBitand(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pytand_expr—scCsæ|i|dƒ}xÌtdt|ƒdƒD]²}|i||ƒ}||ddtijo$t||gd|ddƒ}q,||ddtijo$t||gd|ddƒ}q,td||dd‚q,W|S(NiiiR(sunexpected token: %s( RmR‡R*R5t LEFTSHIFTt LeftShiftRŸt RightShiftR(RGRhR_Rjtright((s,/usr/lib64/python2.6/compiler/transformer.pyt shift_expr›s$$cCsæ|i|dƒ}xÌtdt|ƒdƒD]²}|i||ƒ}||ddtijo$t||gd|ddƒ}q,||ddtijo$t||gd|ddƒ}q,td||dd‚q,W|S(NiiiR(sunexpected token: %s( RmR‡R*R5tPLUStAddtMINUStSubR(RGRhR_RjRü((s,/usr/lib64/python2.6/compiler/transformer.pyt arith_expr¨s$$cCs|i|dƒ}xûtdt|ƒdƒD]á}|i||ƒ}||dd}|tijot||gƒ}n€|tijot||gƒ}nZ|tijot ||gƒ}n4|ti jot ||gƒ}nt d|‚|dd|_ q,W|S(Niiisunexpected token: %s(RmR‡R*R5R½tMultSLASHtDivtPERCENTtModt DOUBLESLASHtFloorDivRR((RGRhR_RjRütt((s,/usr/lib64/python2.6/compiler/transformer.pytterm´s  cCs­|d}|d}|i|dƒ|ddƒ}|tijot|d|dƒS|tijot|d|dƒS|tijot|d|dƒ}n|S(NiiÿÿÿÿiR(i(R‘R5RþtUnaryAddRtUnarySubtTILDEtInvert(RGRhteltR R_((s,/usr/lib64/python2.6/compiler/transformer.pytfactorÆs  !cCs“|i|dƒ}xytdt|ƒƒD]b}||}|dtijo,t||i||dƒgd|dƒS|i||ƒ}q)W|S(NiiR(i(RmR‡R*R5t DOUBLESTARtPowertcom_apply_trailer(RGRhR_RjR((s,/usr/lib64/python2.6/compiler/transformer.pytpowerÓs   cCs|i|dd|ƒS(Ni(RE(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pytatomàscCsB|ddtijotdd|ddƒS|i|dƒS(NiiR(i((R5R‚RÞRm(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyR7ãscCsB|ddtijotdd|ddƒS|i|dƒS(NiiR(i((R5tRSQBtListtcom_list_constructor(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyR9èscCsB|ddtijotdd|ddƒS|i|dƒS(NiiR(i((R5tRBRACEtDictt com_dictmaker(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyR;íscCst|i|dƒƒS(Ni(t BackquoteRm(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyR=òscCs,t|ddƒ}t|d|ddƒS(NiiR(i(RR­(RGRhtk((s,/usr/lib64/python2.6/compiler/transformer.pyR?õscCs_|ioG|idjot|dƒi|iƒ}ntd|i|fƒSt|ƒSdS(Nsutf-8s iso-8859-1s# coding: %s %s(sutf-8s iso-8859-1(RFtunicodetencodeR(RGtlit((s,/usr/lib64/python2.6/compiler/transformer.pytdecode_literalús  cCsFd}x%|D]}||i|dƒ7}q Wt|d|ddƒS(NRUiR(ii(R"R­(RGRhRR_((s,/usr/lib64/python2.6/compiler/transformer.pyRAs cCs t|ddd|ddƒS(NiiR(i(tName(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyRC scCs|i|dS(Ni(R/(RGR_((s,/usr/lib64/python2.6/compiler/transformer.pyR‘scCs|i|d|dƒS(Nii(R/(RGR_((s,/usr/lib64/python2.6/compiler/transformer.pyRmscGsttdƒƒS(N(R’R­R(RGR,((s,/usr/lib64/python2.6/compiler/transformer.pyR4%scCsäg}g}d}d}x¼|t|ƒjo¨||}|dtijp|dtijo×|dtijoO||d}|dtijo)|i|dƒ|tB}|d}qÃn|t|ƒjo\||d}|tijo||d}ntd|‚|i|dƒ|tB}nPn|i|i |ƒƒ|d}|t|ƒjoD||dti jo,|i|i ||dƒƒ|d}nt|ƒo t d‚n|d}qW|||fS(Niiisunexpected token: %sis-non-default argument follows default argument( R*R5R½RRDRRRRt com_fpdefR“Rmt SyntaxError(RGRhR|R}R~RjR_R ((s,/usr/lib64/python2.6/compiler/transformer.pyRz+s> (   +  cCs6|ddtijo|i|dƒS|ddS(Niii(R5R8t com_fplist(RGR_((s,/usr/lib64/python2.6/compiler/transformer.pyR$]scCsrt|ƒdjo|i|dƒSg}x:tdt|ƒdƒD] }|i|i||ƒƒqDWt|ƒS(Nii(R*R$R‡RR (RGR_RLRj((s,/usr/lib64/python2.6/compiler/transformer.pyR&cscCs_d}xN|D]F}t|ƒtdƒjo'|ddjo||dd}q q W|d S(NRUiiR»iÿÿÿÿ((R(RGR_RIR`((s,/usr/lib64/python2.6/compiler/transformer.pyR¼ls *cCsQ|d}|i|ddƒ}t|ƒdjo |dfS||ddfS(Niii(R¼R*R(RGR_tdot((s,/usr/lib64/python2.6/compiler/transformer.pytcom_dotted_as_namets   cCsa|d}|i|dƒg}x:tdt|ƒdƒD] }|i|i||ƒƒq9W|S(Niii(R(R‡R*R(RGR_R|Rj((s,/usr/lib64/python2.6/compiler/transformer.pyR¹~s  cCsJ|d}t|ƒdjo|dddfS|dd|ddfS(Niii(R*R(RGR_((s,/usr/lib64/python2.6/compiler/transformer.pytcom_import_as_name†s cCsa|d}|i|dƒg}x:tdt|ƒdƒD] }|i|i||ƒƒq9W|S(Niii(R)R‡R*R(RGR_R|Rj((s,/usr/lib64/python2.6/compiler/transformer.pyR¿s  cCsGg}x:tdt|ƒdƒD] }|i|i||ƒƒqW|S(Nii(R‡R*RRm(RGR_R…Rj((s,/usr/lib64/python2.6/compiler/transformer.pyRƒ˜s c Csû|ddtijo6t|i|dƒ|i|dƒd|ddƒSg}d}d}x@tdt|ƒdƒD]&}||}|dtijo’t|ƒdjoJ|i|dƒ}t|ƒdjo|i |dt ƒ}qd}n d}}|i |||i||dƒfƒn|dtijo\|ddjo|i||dƒ}qŸ|dd jo|i||dƒ}qŸqyqyWt |i|dƒ||d|ddƒ} |ot| |d|ddƒS| SdS( NiiiiR(iitelsetfinally( R5RDt TryFinallyRmRR‡R*R0t except_clauseR”RRt TryExcept( RGRhtclausesRÎt finallyNodeRjR_RµR´t try_except((s,/usr/lib64/python2.6/compiler/transformer.pyRמs8   +#cCs€|i|dƒ}|i|dƒ}|ddtijo d}n|i|ddtƒ}t|||d|ddƒS(NiiÿÿÿÿiiR((RmR5RRR”RtWith(RGRhRTtbodytvar((s,/usr/lib64/python2.6/compiler/transformer.pyRÙÇs  cCs|i|dƒS(Ni(Rm(RGRh((s,/usr/lib64/python2.6/compiler/transformer.pyRÛÑscCs|dS(Ni((RGR_((s,/usr/lib64/python2.6/compiler/transformer.pyR—ÕscCsG|i|ƒ}|ittttfjo|Std|ii‚dS(s…Return node suitable for lvalue of augmented assignment Names, slices, and attributes are the only allowable nodes. scan't assign to %sN(Rmt __class__R#tSlicet SubscriptRnR%R(RGR_R"((s,/usr/lib64/python2.6/compiler/transformer.pyR–ÙscCspxi|d}|titititifjo2t|ƒdjo|i||ƒS|d}q|tjo.t|ƒdjo td‚n|d}q|ti joÒ|ddti jo td‚nt|ƒdjoŒ|i |dƒ}x^t dt|ƒdƒD]C}||}|dt ijo td‚n|i||ƒ}qW|i||d|ƒS|d}q|ti joË|dd}|t ijo/|d}|dt ijo td‚qXqi|t ijo<|d}|dt ijo td‚n|i||ƒS|t ijo|i|d|ƒStd‚qtd |‚qdS( Niiiscan't assign to operatoriÿÿÿÿscan't assign to ()scan't assign to []scan't assign to literalsbad assignment (%s)(R0texprlistRßt testlist_safeRãR*tcom_assign_tuplet _assign_typesR%RRRmR‡R5RRtcom_assign_trailerR8R‚R:Rtcom_assign_listRDtcom_assign_name(RGR_t assigningR tprimaryRjtch((s,/usr/lib64/python2.6/compiler/transformer.pyR”ãsN %         cCs\g}x=tdt|ƒdƒD]#}|i|i|||ƒƒqWt|dt|ƒƒS(NiiR((R‡R*RR”tAssTupleR%(RGR_R?tassignsRj((s,/usr/lib64/python2.6/compiler/transformer.pyR:s !cCs g}xtdt|ƒdƒD]g}|dt|ƒjo-||ddtijo td‚qin|i|i|||ƒƒqWt|dt|ƒƒS(Niiis"can't assign to list comprehensionR(( R‡R*R0tlist_forR%RR”tAssListR%(RGR_R?RCRj((s,/usr/lib64/python2.6/compiler/transformer.pyR=s !cCst|d|d|dƒS(NiR(i(tAssName(RGR_R?((s,/usr/lib64/python2.6/compiler/transformer.pyR>scCsŒ|dd}|tijo|i||d|ƒS|tijo|i||d|ƒS|tijo td‚ntd|‚dS(Niiiscan't assign to function callsunknown trailer type: %s(R5tDOTtcom_assign_attrR:tcom_subscriptlistR8R%(RGR@R_R?R ((s,/usr/lib64/python2.6/compiler/transformer.pyR<"s cCst||d|d|dƒS(NiR(iÿÿÿÿ(tAssAttr(RGR@R_R?((s,/usr/lib64/python2.6/compiler/transformer.pyRH,scCsžt|ƒ}|djo"|d}|i|ƒ|dƒSg}xDtd|dƒD]0}||}|i|i|ƒ|dƒƒqTW||dt|ƒƒS(s=Compile 'NODE (OP NODE)*' into (type, [ node1, ..., nodeN ]).iiiR((R*R‘R‡RR%(RGt constructorRhR"R`R2Rj((s,/usr/lib64/python2.6/compiler/transformer.pyRÝ/s    $cCs;|i|ƒ|dƒ}t|tƒo|St|gƒS(Ni(R‘R$Rg(RGR_Rì((s,/usr/lib64/python2.6/compiler/transformer.pyRa;scCsN|i|ƒ|dƒ}t|tƒo|i|iƒn|i|ƒdS(Ni(R‘R$RgtextendR!R(RGRkR_Rì((s,/usr/lib64/python2.6/compiler/transformer.pyReBsRDcCs§g}x‡tdt|ƒƒD]p}||dtijo|i|d||ƒS||dtijoqn|i|i||ƒƒqWt |d|di ƒS(NiiR(( R‡R*R0RDtcom_list_comprehensionR5R RRmRR((RGRhtvaluesRj((s,/usr/lib64/python2.6/compiler/transformer.pyRKs  c Cso|dd}g}xE|o=|dd}|djo|i|dtƒ}|i|dƒ}t||gƒ}|dd|_|i|ƒt|ƒdjo d}qW|i|dƒ}q|djoq|i|dƒ} t | d|ddƒ} |i i| ƒt|ƒdjo d}qW|i|dƒ}qt d ||f‚qWt ||d|ƒS( NiitforiitifR(is,unexpected list comprehension element: %s %d( R”RRmt ListCompForR(RR*Rt com_list_itert ListCompIftifsR%tListComp( RGRTR_R(tforsR RÔRÕtnewforRâtnewif((s,/usr/lib64/python2.6/compiler/transformer.pyRMXs2     cCs|dS(Ni((RGR_((s,/usr/lib64/python2.6/compiler/transformer.pyRR{scCsZg}x:tdt|ƒdƒD] }|i|i||ƒƒqWt|d|diƒS(NiiR(i(R‡R*RRmRR((RGRhRNRj((s,/usr/lib64/python2.6/compiler/transformer.pyRs Ràc Cs|dd}g}xB|o:|dd}|djoŠ|i|dtƒ}|i|dƒ}t||gd|ddƒ}|i|ƒt|ƒdjo d}qT|i|dƒ}q|djoq|i|dƒ} t| d|ddƒ} |i i| ƒt|ƒdjo d}qT|i|dƒ}qt d ||f‚qWt |d _ t t||ƒd|ƒS( NiiROiR(iRPis.unexpected generator expression element: %s %di(R”RRmt GenExprForRR*Rt com_gen_itert GenExprIfRTR%tTruet is_outmosttGenExprt GenExprInner( RGRTR_R(RVR RÔtgenNodeRWRâRX((s,/usr/lib64/python2.6/compiler/transformer.pyRá†s4      cCs|dS(Ni((RGR_((s,/usr/lib64/python2.6/compiler/transformer.pyRZ¨scCsug}xQtdt|ƒdƒD]7}|i|i||ƒ|i||dƒfƒqWt|d|ddiƒS(NiiiR(i(R‡R*RRmRR((RGRhR2Rj((s,/usr/lib64/python2.6/compiler/transformer.pyR¬s cCs‘|dd}|tijo|i||dƒS|tijo|i||dƒS|tijo|i||dtƒStd|‚dS(Niiisunknown node type: %s( R5R8RqRGtcom_select_memberR:RIRR%(RGt primaryNodeRhR ((s,/usr/lib64/python2.6/compiler/transformer.pyR´scCs<|dtijo td‚nt||dd|dƒS(Nismember must be a nameiR(i(R5RDR%Rn(RGRbRh((s,/usr/lib64/python2.6/compiler/transformer.pyRa¿s c CsÇ|dtijot|gdt|ƒƒSg}d}d}}t|ƒ}d}xO||joA||} | dtijoB|dj o td‚n|i||dƒ}|d}qYnW| dti joB|dj o td‚n|i||dƒ}|d}qYn|i | ||ƒ\}} |djoHt | t ƒo8t| ƒdjo%| ddt ijo td‚n|i| ƒ|d}qYWt||||dt|ƒƒS( NiR(is$already have the varargs indentifieris#already have the kwargs indentifieris&generator expression needs parenthesis(R5R‚tCallFuncR%RR*R½R%RmRt com_argumentR$R^R0RàR( RGRbRhR,tkwt star_nodet dstar_nodet len_nodelistRjR_Rì((s,/usr/lib64/python2.6/compiler/transformer.pyRqÄs<          +  cCsRt|ƒdjoF|ddtijo.|i|dƒ}d|i||dƒfSt|ƒdjo@|o td‚n|o td‚nd|i|dƒfS|i|dƒ}|d}x6t|ƒdjo"|dtijo|d}qÌW|dtijotd|d‚nt|d|d|dƒ}d|fS( Niiiis!non-keyword arg after keyword args+only named arguments may follow *expressions#keyword can't be an expression (%s)R(( R*R0RàRmRáR%R5RDtKeyword(RGRhReRfRâRìR`R_((s,/usr/lib64/python2.6/compiler/transformer.pyRdës$+   'c Csït|ƒdjo}|d}|ddtijp+t|ƒdjo-|ddtijo,|ddtijo|i|||ƒSng}x:tdt|ƒdƒD] }|i|i||ƒƒq¯Wt |||dt |ƒƒS(NiiiiÿÿÿÿR(( R*R5RR0Rt com_sliceR‡Rt com_subscriptR7R%(RGR@RhR?tsubt subscriptsRj((s,/usr/lib64/python2.6/compiler/transformer.pyRIþs +cCs‚|d}|d}|tijo |ddtijotƒS|tijpt|ƒdjo|i|ƒS|i|ƒS(Niii(R5RGtEllipsisRR*t com_sliceobjRm(RGR_RAR ((s,/usr/lib64/python2.6/compiler/transformer.pyRks  (#cCsEg}|ddtijo|itdƒƒd}n!|i|i|dƒƒd}|t|ƒjo@||dtijo(|i|i||ƒƒ|d}n|itdƒƒxkt |t|ƒƒD]T}||}t|ƒdjo|itdƒƒq×|i|i|dƒƒq×Wt |dt |ƒƒS(NiiiiR(( R5RRR­RRmR*R0RâR‡tSliceobjR%(RGR_R2RjtjRA((s,/usr/lib64/python2.6/compiler/transformer.pyRos"  + cCs¿d}}t|ƒdjoF|ddtijo|i|dƒ}q |i|dƒ}n>t|ƒdjo*|i|dƒ}|i|dƒ}nt||||dt|ƒƒS(NiiiiiR((RR*R5RRmR6R%(RGR@R_R?tlowertupper((s,/usr/lib64/python2.6/compiler/transformer.pyRj@s c Cs¯|djo|d}|d}n|tijo]t|ƒdjo|i|dƒSx0|D](}|dtijo|i|ƒSqaWdS|tijo8x0|D](}|dtijo|i|ƒSq©WdS|tijoM|ddti jo0d}x"|D]}|t |dƒ}qW|SdS|tijp |ti jp|ti jo|i|dƒS|t jo%t|ƒdjo|i|dƒSdS(NiiRU(RR0RRR*RcR†RZRR5RBRRˆt small_stmtt _doc_nodes(RGR_R`RltsR ((s,/usr/lib64/python2.6/compiler/transformer.pyRcNs>    N(RRt__doc__RJRQRRRWRORYRZR[RpRsRvRxR]R\t old_lambdefR^R†Rtt flow_stmtt compound_stmtRˆR‰RyRŠR‹RŒRRŽRRRžR¥R¦R§R©R«R®R¯R±R¶R·RºRÃRÅRÇRÉRÏRÒRÖRØRÚRÜRRRßR9t testlist1R8RãRâRètold_testRêRíRóRTRöRøRýRR RRRR7R9R;R=R?R"RARCR‘RmR4RzR$R&R¼R(R¹R)R¿RƒR×RÙRÛR—R–R”R:R=R>R<RHRÝRaReRR0RRMRRRáRZRRRaRqRdRIRkRoRjRRc(((s,/usr/lib64/python2.6/compiler/transformer.pyR^sþ          !                                         !                2      )   ,      #   "    '   $ ts==s<=s>=s!=R¯R±cCs|g}xo|D]g}t|tƒo|iti||ƒƒq t|tƒo|i|ƒq |it|ƒƒq W|S(N(R$tintRt_namestgetR+t debug_tree(RPR"R((s,/usr/lib64/python2.6/compiler/transformer.pyR‚Òs(SRwt compiler.astRMR0R5t StandardErrorRtcompiler.constsRRRRRRR RR%R.RRžRßR9RâRèRêRíRóRTRöRøRýRR RRRutLESStGREATERtEQEQUALR“t LESSEQUALt GREATEREQUALtNOTEQUALRïR]R^R†RtRyRˆRzR¥R¦R§R©R«R®R¶R·RÅRÇRÉRÏRÒRÖRØRÚRRR8Rt_legal_node_typesRRR¯R±R;R€R1R2Rtvttok_nameR‚(((s,/usr/lib64/python2.6/compiler/transformer.pyt sÖ      ÿÿÿÿÿ            PK’[ûÆÁ@¤¤ syntax.pynuW+A„¶"""Check for errs in the AST. The Python parser does not catch all syntax errors. Others, like assignments with invalid targets, are caught in the code generation phase. The compiler package catches some errors in the transformer module. But it seems clearer to write checkers that use the AST to detect errors. """ from compiler import ast, walk def check(tree, multi=None): v = SyntaxErrorChecker(multi) walk(tree, v) return v.errors class SyntaxErrorChecker: """A visitor to find syntax errors in the AST.""" def __init__(self, multi=None): """Create new visitor object. If optional argument multi is not None, then print messages for each error rather than raising a SyntaxError for the first. """ self.multi = multi self.errors = 0 def error(self, node, msg): self.errors = self.errors + 1 if self.multi is not None: print "%s:%s: %s" % (node.filename, node.lineno, msg) else: raise SyntaxError, "%s (%s:%s)" % (msg, node.filename, node.lineno) def visitAssign(self, node): # the transformer module handles many of these pass ## for target in node.nodes: ## if isinstance(target, ast.AssList): ## if target.lineno is None: ## target.lineno = node.lineno ## self.error(target, "can't assign to list comprehension") PK’[÷1Pww visitor.pycnuW+A„¶Ñò §ÚêLc@s[ddklZdd d„ƒYZdefd„ƒYZeZddd„Zd„ZdS( iÿÿÿÿ(tastt ASTVisitorcBs8eZdZdZd„Zd„Zd„Zd„ZRS(sPerforms a depth-first walk of the AST The ASTVisitor will walk the AST, performing either a preorder or postorder traversal depending on which method is called. methods: preorder(tree, visitor) postorder(tree, visitor) tree: an instance of ast.Node visitor: an instance with visitXXX methods The ASTVisitor is responsible for walking over the tree in the correct order. For each node, it checks the visitor argument for a method named 'visitNodeType' where NodeType is the name of the node's class, e.g. Class. If the method exists, it is called with the node as its sole argument. The visitor method for a particular node type can control how child nodes are visited during a preorder walk. (It can't control the order during a postorder walk, because it is called _after_ the walk has occurred.) The ASTVisitor modifies the visitor argument by adding a visit method to the visitor; this method can be used to visit a child node of arbitrary type. icCsd|_h|_dS(N(tNonetnodet_cache(tself((s(/usr/lib64/python2.6/compiler/visitor.pyt__init__"s cGs+x$|iƒD]}|i||Œq WdS(N(t getChildNodestdispatch(RRtargstchild((s(/usr/lib64/python2.6/compiler/visitor.pytdefault&s cGsw||_|i}|ii|dƒ}|djo6|i}t|id||iƒ}||i|s ;#PK’[C¶ ž]k]k pyassem.pyonuW+A„¶Ñò §ÚêLc@sdZddkZddkZddkZddklZddklZlZl Z l Z dfd„ƒYZ d„Z dfd „ƒYZ d Zd Zd Zd Zde fd„ƒYZd„Zdfd„ƒYZd„Zd„Zdfd„ƒYZdfd„ƒYZeƒiZdS(s/A flow graph representation for Python bytecodeiÿÿÿÿN(tmisc(t CO_OPTIMIZEDt CO_NEWLOCALSt CO_VARARGStCO_VARKEYWORDSt FlowGraphcBs˜eZd„Zd„Zdd„Zd„Zd„ZdZd„Z d„Z d„Z d „Z d „Z d „Zd „Zd „Zd„Zd„ZRS(cCs[tƒ|_|_tdƒ|_tiƒ|_|ii|iƒ|ii|iƒdS(Ntexit(tBlocktcurrenttentryRRtSettblockstadd(tself((s(/usr/lib64/python2.6/compiler/pyassem.pyt__init__ s cCsg|ioP|io7dGt|iƒGHdG|iiGHdG|iiƒGHnt|ƒGHn||_dS(Ntends nexts (t_debugRtreprtnextt get_children(R tblock((s(/usr/lib64/python2.6/compiler/pyassem.pyt startBlocks  cCs>|djo|iƒ}n|ii|ƒ|i|ƒdS(N(tNonetnewBlockRtaddNextR(R R((s(/usr/lib64/python2.6/compiler/pyassem.pyt nextBlocks  cCstƒ}|ii|ƒ|S(N(RR R (R tb((s(/usr/lib64/python2.6/compiler/pyassem.pyR5s cCs|i|iƒdS(N(RR(R ((s(/usr/lib64/python2.6/compiler/pyassem.pytstartExitBlock:sicCs d|_dS(Ni(R(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyt _enable_debug?scCs d|_dS(Ni(R(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyt_disable_debugBscGs’|io dG|GHn|ddjo|ii|iƒnt|ƒdjo,t|dtƒo|ii|dƒn|ii|ƒdS(Ns it RETURN_VALUEt YIELD_VALUEii(RR(RRt addOutEdgeRtlent isinstanceRtemit(R tinst((s(/usr/lib64/python2.6/compiler/pyassem.pyR#Es  'cCs¦xL|iiƒD];}||ijoqn|ip|i|iƒqqWt|ihƒ}|iƒ|i||iƒ|i|jo|i |iƒn|S(slReturn the blocks in reverse postorder i.e. each node appears before all of its successors ( R telementsRRRt dfs_postorderR treverset fixupOrdertappend(R Rtorder((s(/usr/lib64/python2.6/compiler/pyassem.pytgetBlocksInOrderNs  cCs$|i||ƒ|i||ƒdS(s"Fixup bad order introduced by DFS.N(tfixupOrderHonorNexttfixupOrderForward(R R t default_next((s(/usr/lib64/python2.6/compiler/pyassem.pyR(csc Cs«h}x(tt|ƒƒD]}||||s (RMRO(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyt__repr__çs cCs2tt|iƒ}d|i|idi|ƒfS(Nss (tmaptstrR:RMROtjoin(R R:((s(/usr/lib64/python2.6/compiler/pyassem.pyt__str__íscCsG|d}|d djo|ii|dƒn|ii|ƒdS(NiitJUMPi(RLR R:R)(R R$top((s(/usr/lib64/python2.6/compiler/pyassem.pyR#òs cCs|iS(N(R:(R ((s(/usr/lib64/python2.6/compiler/pyassem.pytgetInstructionsøscCs|ii|ƒdS(N(RKR (R R((s(/usr/lib64/python2.6/compiler/pyassem.pyt addInEdgeûscCs|ii|ƒdS(N(RLR (R R((s(/usr/lib64/python2.6/compiler/pyassem.pyR þscCs|ii|ƒdS(N(RR)(R R((s(/usr/lib64/python2.6/compiler/pyassem.pyRsRt RAISE_VARARGSRt JUMP_ABSOLUTER9t CONTINUE_LOOPcCsUy|id\}}Wnttfj odSX||ijo g|_ndS(sLRemove bogus edge for unconditional transfers Each block has a next edge that accounts for implicit control transfers, e.g. from a JUMP_IF_FALSE to the block that will be executed if the test is true. These edges must remain for the current assembler code to work. If they are removed, the dfs_postorder gets things in weird orders. However, they shouldn't be there for other purposes, e.g. conversion to SSA form. This method will remove the next edge when it follows an unconditional control transfer. iÿÿÿÿN(R:t IndexErrort ValueErrort_uncond_transferR(R RVtarg((s(/usr/lib64/python2.6/compiler/pyassem.pyt pruneNexts cCsP|io2|id|ijo|ii|idƒn|iiƒ|iS(Ni(RRLR;R%(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyRs!cCsfg}xY|iD]N}t|ƒdjoqn|d}t|dƒo|i|iƒqqW|S(s¨Return all graphs contained within this block. For example, a MAKE_FUNCTION block will contain a reference to the graph for the function body. itgraph(R:R!thasattrR)Ra(R t containedR$RV((s(/usr/lib64/python2.6/compiler/pyassem.pyRF"s  (s RETURN_VALUERYs YIELD_VALUERZs JUMP_FORWARDR[(RGRHRNRRPRTR#RWRXR RR^R`RRF(((s(/usr/lib64/python2.6/compiler/pyassem.pyRÛs         tRAWtFLATtCONVtDONEt PyFlowGraphc BsIeZeiZdddd„Zd„Zd„Zd„Zd„Z d„Z d„Z dd„Z d „Z d „ZeiƒZx%eiD]Zeieieƒq‹WeiƒZx%eiD]Zeieieƒq¿Wd „Zd „Zd „ZhZd„Zd„ZeZeZd„Zd„Z e Z!e Z"e Z#e Z$e Z%e Z&e Z'e Z(e Z)e Z*d„Z+e+Z,e+Z-d„Z.e/ei0ƒZ1d„Z2xFe3ƒi4ƒD]5\Z5Z6e5d djoe5dZe6ee         cCs¹|iid|iƒ|iƒx‰tt|iƒƒD]r}|i|}t|ƒdjoL|\}}|ii|dƒ}|o ||||ƒf|i||iD]3}t|tƒo|iƒ}n|i|ƒqWt|ƒS(s›Return a tuple for the const slot of the code object Must convert references to code (MAKE_FUNCTION) to code objects recursively. (RrR"RhRŠR)R¾(R R7R6((s(/usr/lib64/python2.6/compiler/pyassem.pyR½]s (N(>RGRHRRRiRRRR‚RƒR„RŠR“R…R†RR RœtdisR2R R’RžR‡R¢R©R£RªR«t_convert_STORE_FASTt_convert_DELETE_FASTR¬R­t_convert_STORE_NAMEt_convert_DELETE_NAMEt_convert_IMPORT_NAMEt_convert_IMPORT_FROMt_convert_STORE_ATTRt_convert_LOAD_ATTRt_convert_DELETE_ATTRt_convert_LOAD_GLOBALt_convert_STORE_GLOBALt_convert_DELETE_GLOBALR®t_convert_LOAD_DEREFt_convert_STORE_DEREFR¯Rwtcmp_opR°R±tlocalstitemsRjtobjRˆR¶R/R!tnumR‰R½(((s(/usr/lib64/python2.6/compiler/pyassem.pyRh9sv         !                  cCs|d djodSdS(NiRUi((R’((s(/usr/lib64/python2.6/compiler/pyassem.pytisJumpjsRycBs)eZdZd„Zd„Zd„ZRS(s:Helper for marking func defs with nested tuples in arglistcCs||_||_dS(N(tcountRs(R R×Rs((s(/usr/lib64/python2.6/compiler/pyassem.pyRps cCsd|i|ifS(NsTupleArg(%s, %s)(R×Rs(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyRPsscCs d|iS(Ns.%d(R×(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyRzus(RGRHt__doc__RRPRz(((s(/usr/lib64/python2.6/compiler/pyassem.pyRyns  cCsbt|ƒ}|oKxH|D]<}t|tƒo&tti|iƒƒ}||}qqWn|S(N(R!R"RyRtflattenRs(RmRoR_tnumNames((s(/usr/lib64/python2.6/compiler/pyassem.pyRnxs cCs t|dƒS(s/Convert an int argument into high and low bytesi(tdivmod(tval((s(/usr/lib64/python2.6/compiler/pyassem.pyR¸sR³cBs;eZdZd„Zd„Zd„Zd„Zd„ZRS(s(lnotab This class builds the lnotab, which is documented in compile.c. Here's a brief recap: For each SET_LINENO instruction after the first one, two bytes are added to lnotab. (In some cases, multiple two-byte entries are added.) The first byte is the distance in bytes between the instruction for the last SET_LINENO and the current SET_LINENO. The second byte is offset in line numbers. If either offset is greater than 255, multiple two-byte entries are added -- see compile.c for the delicate details. cCs:g|_d|_d|_d|_d|_g|_dS(Ni(tcodet codeOffsetR¿tlastlinetlastoffR´(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyR•s      cGsAx$|D]}|iit|ƒƒqW|it|ƒ|_dS(N(RÝR)tchrRÞR!(R RmR_((s(/usr/lib64/python2.6/compiler/pyassem.pyRµscCs|idjo||_||_nî|i|i}||i}|djoÃ|ii}x0|djo"|dƒ|dƒ|d8}q_Wx6|djo(||ƒ|dƒ|d8}d}q’W|djp |djo||ƒ||ƒn||_|i|_ndS(Niiÿ(R¿RßRÞRàR´R)(R tlinenotaddrtlinetpush((s(/usr/lib64/python2.6/compiler/pyassem.pyR·¢s.            cCsdi|iƒS(NRJ(RSRÝ(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyRŠÂscCsditt|iƒƒS(NRJ(RSRQRáR´(R ((s(/usr/lib64/python2.6/compiler/pyassem.pyRÀÅs(RGRHRØRRµR·RŠRÀ(((s(/usr/lib64/python2.6/compiler/pyassem.pyR³†s     tStackDepthTrackercBs…eZdd„Zh$dd6dd6dd6dd6dd 6dd 6dd 6dd 6dd 6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd 6dd!6dd"6dd#6dd$6dd%6d&d'6d&d(6dd)6dd*6Zd8d9gZd-„Zd.„Zd/„Zd0„Zd1„Z d2„Z d3„Z d4„Z d5„Z d6„Zd7„ZRS(:ic Cs#d}d}x|D]}|d}|o|Gn|ii|dƒ}|dj o||}nxC|iD]8\}} |t|ƒ |jo| }||}PqlqlW|djo;t||dƒ} | dj o|| |dƒ}qðn||jo |}n|o |G|GHqqW|S(Nii(teffectR¤RtpatternsR!tgetattr( R R:tdebugR™tmaxDepthR2R’tdeltatpatt pat_deltatmeth((s(/usr/lib64/python2.6/compiler/pyassem.pyRšÌs2         iÿÿÿÿtPOP_TOPitDUP_TOPiþÿÿÿt LIST_APPENDsSLICE+1sSLICE+2sSLICE+3s STORE_SLICE+0s STORE_SLICE+1s STORE_SLICE+2iýÿÿÿs STORE_SLICE+3sDELETE_SLICE+0sDELETE_SLICE+1sDELETE_SLICE+2sDELETE_SLICE+3t STORE_SUBSCRt DELETE_SUBSCRt PRINT_ITEMRRt EXEC_STMTt BUILD_CLASSt STORE_NAMEt STORE_ATTRt DELETE_ATTRt STORE_GLOBALt BUILD_MAPt COMPARE_OPt STORE_FASTt IMPORT_STARt IMPORT_NAMEt IMPORT_FROMt LOAD_ATTRit SETUP_EXCEPTt SETUP_FINALLYtFOR_ITERt WITH_CLEANUPtBINARY_tLOAD_cCs|dS(Ni((R R×((s(/usr/lib64/python2.6/compiler/pyassem.pytUNPACK_SEQUENCEscCs | dS(Ni((R R×((s(/usr/lib64/python2.6/compiler/pyassem.pyt BUILD_TUPLEscCs | dS(Ni((R R×((s(/usr/lib64/python2.6/compiler/pyassem.pyt BUILD_LISTscCs"t|dƒ\}}||d S(Nii(RÛ(R targcR¹Rº((s(/usr/lib64/python2.6/compiler/pyassem.pyt CALL_FUNCTIONscCs|i|ƒdS(Ni(R (R R ((s(/usr/lib64/python2.6/compiler/pyassem.pytCALL_FUNCTION_VARscCs|i|ƒdS(Ni(R (R R ((s(/usr/lib64/python2.6/compiler/pyassem.pytCALL_FUNCTION_KW!scCs|i|ƒdS(Ni(R (R R ((s(/usr/lib64/python2.6/compiler/pyassem.pytCALL_FUNCTION_VAR_KW#scCs| S(N((R R ((s(/usr/lib64/python2.6/compiler/pyassem.pyt MAKE_FUNCTION%scCs| S(N((R R ((s(/usr/lib64/python2.6/compiler/pyassem.pyt MAKE_CLOSURE'scCs(|djodS|djodSdS(Niiÿÿÿÿiiþÿÿÿ((R R ((s(/usr/lib64/python2.6/compiler/pyassem.pyt BUILD_SLICE*s  cCs|S(N((R R ((s(/usr/lib64/python2.6/compiler/pyassem.pytDUP_TOPX/s(Riÿÿÿÿ(Ri(RGRHRšRçRèR R R R RRRRRRR(((s(/usr/lib64/python2.6/compiler/pyassem.pyRæÈsf             (RØRÂR»RŒtcompilerRtcompiler.constsRRRRRR&RRdReRfRgRhRÖRyRnR¸R³RæRš(((s(/usr/lib64/python2.6/compiler/pyassem.pyts*   "Å Yÿ2  BjPK’[â.@\\ syntax.pycnuW+A„¶Ñò §ÚêLc@s?dZddklZlZdd„Zddd„ƒYZdS(s8Check for errs in the AST. The Python parser does not catch all syntax errors. Others, like assignments with invalid targets, are caught in the code generation phase. The compiler package catches some errors in the transformer module. But it seems clearer to write checkers that use the AST to detect errors. iÿÿÿÿ(tasttwalkcCs t|ƒ}t||ƒ|iS(N(tSyntaxErrorCheckerRterrors(ttreetmultitv((s'/usr/lib64/python2.6/compiler/syntax.pytchecks  RcBs,eZdZdd„Zd„Zd„ZRS(s+A visitor to find syntax errors in the AST.cCs||_d|_dS(s¸Create new visitor object. If optional argument multi is not None, then print messages for each error rather than raising a SyntaxError for the first. iN(RR(tselfR((s'/usr/lib64/python2.6/compiler/syntax.pyt__init__s cCs\|id|_|idj od|i|i|fGHntd||i|if‚dS(Nis %s:%s: %ss %s (%s:%s)(RRtNonetfilenametlinenot SyntaxError(Rtnodetmsg((s'/usr/lib64/python2.6/compiler/syntax.pyterror scCsdS(N((RR((s'/usr/lib64/python2.6/compiler/syntax.pyt visitAssign'sN(t__name__t __module__t__doc__R R RR(((s'/usr/lib64/python2.6/compiler/syntax.pyRs N((RtcompilerRRR RR(((s'/usr/lib64/python2.6/compiler/syntax.pyt s PK’[^ë7ú©E©E symbols.pycnuW+A„¶Ñò §ÚêLc@sNdZddklZddklZlZlZlZlZddk l Z ddk Z ddk Z dZ ddd„ƒYZd efd „ƒYZd efd „ƒYZd efd„ƒYZdefd„ƒYZdefd„ƒYZddd„ƒYZd„Zedjo4ddk Z ddklZlZddkZd„Zxúe idD]çZeGHeeƒZeiƒZ ei!ƒeie edƒZ"ee"ƒZ#eeƒZ$eƒZ%ee$e%ƒe%i&e$iƒZ'ee#e'ƒp1HdGeGHe(e#ƒGHe(e'ƒGHe i)dƒnhZ*e*i+e%i&ƒe*e$=e*i,ƒZ&[*xôe"i-ƒD]æZ%e%i.ƒoÓgZ/e&D]'Z0e0i1e%i2ƒjo e/e0qvqv[/Z3e4e3ƒdjodGe%i2ƒGHq>eee%i5ƒƒe3diƒƒpHe%i2ƒGHe(ee%i5ƒƒƒGHe(e3diƒƒGHe i)dƒq>qXqXWq[WndS( sModule symbol-table generatoriÿÿÿÿ(tast(tSC_LOCALt SC_GLOBALtSC_FREEtSC_CELLt SC_UNKNOWN(tmangleNitScopecBs¤eZdd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zd „Zd „Zd„Zd„Zd„ZRS(cCsÁ||_||_h|_h|_h|_h|_h|_h|_g|_d|_ d|_ d|_ |dj oDxAt t|ƒƒD])}||djo|||_ PqŒqŒWndS(Nt_(tnametmoduletdefstusestglobalstparamstfreestcellstchildrentNonetnestedt generatortklasstrangetlen(tselfR R Rti((s(/usr/lib64/python2.6/compiler/symbols.pyt__init__s$              cCsd|ii|ifS(Ns<%s: %s>(t __class__t__name__R (R((s(/usr/lib64/python2.6/compiler/symbols.pyt__repr__$scCs%|idjo|St||iƒS(N(RRR(RR ((s(/usr/lib64/python2.6/compiler/symbols.pyR'scCsd|i|i|ƒs.0(t_GenExprScope__countert_GenExprScope__super_initR"(RR RR((s(/usr/lib64/python2.6/compiler/symbols.pyR¹s cCsti|ƒ}|S(N(RR&(RR$((s(/usr/lib64/python2.6/compiler/symbols.pyR&¿sN(RR<RRRBRARR&(((s(/usr/lib64/python2.6/compiler/symbols.pyR@´s  t LambdaScopecBs#eZeiZdZdd„ZRS(icCs3|i}|id7_|id|||ƒdS(Nis lambda.%d(t_LambdaScope__countert_LambdaScope__super_init(RR RR((s(/usr/lib64/python2.6/compiler/symbols.pyRÈs N(RR<RRRERDR(((s(/usr/lib64/python2.6/compiler/symbols.pyRCÃs R6cBseZeiZd„ZRS(cCs|i|||ƒdS(N(t_ClassScope__super_init(RR R ((s(/usr/lib64/python2.6/compiler/symbols.pyRÐs(RR<RRRF(((s(/usr/lib64/python2.6/compiler/symbols.pyR6Ís t SymbolVisitorcBseZd„Zd„ZeZd„Zd„Zd„Zd„Zd„Z dd„Z d „Z d „Z d „Z dd „Zd „Zd„Zd„Zd„Zd„Zdd„Zdd„Zdd„Zdd„Zd„ZeieieifZd„Zd„ZRS(cCsh|_d|_dS(N(tscopesRR(R((s(/usr/lib64/python2.6/compiler/symbols.pyRÔs cCs2tƒ}|_|i|<|i|i|ƒdS(N(R=R RHtvisittnode(RRJtscope((s(/usr/lib64/python2.6/compiler/symbols.pyt visitModuleÚscCsÞ|io|i|i|ƒn|i|iƒx!|iD]}|i||ƒq;Wt|i|i|iƒ}|ipt |tƒo d|_n||i |<|i ||i ƒ|i|i |ƒ|i||ƒdS(Ni(t decoratorsRIRR tdefaultsR7R RRR5RHt_do_argstargnamestcodethandle_free_vars(RRJtparenttnRK((s(/usr/lib64/python2.6/compiler/symbols.pyt visitFunctionàs    cCs€t|i|iƒ}|ip t|tƒpt|tƒo d|_n||i|<|i|i|ƒ|i ||ƒdS(Ni( R@R RRR5R7RHRIRQRR(RRJRSRK((s(/usr/lib64/python2.6/compiler/symbols.pyt visitGenExprîs  cCs;x!|iD]}|i||ƒq W|i|i|ƒdS(N(tqualsRItexpr(RRJRKtgenfor((s(/usr/lib64/python2.6/compiler/symbols.pytvisitGenExprInnerùs cCsQ|i|i|dƒ|i|i|ƒx!|iD]}|i||ƒq3WdS(Ni(RItassigntitertifs(RRJRKtif_((s(/usr/lib64/python2.6/compiler/symbols.pytvisitGenExprForÿs  cCs|i|i|ƒdS(N(RIttest(RRJRK((s(/usr/lib64/python2.6/compiler/symbols.pytvisitGenExprIfsicCs¶| pt‚x!|iD]}|i||ƒqWt|i|iƒ}|ipt|tƒo d|_n||i |<|i ||i ƒ|i|i |ƒ|i ||ƒdS(Ni(tAssertionErrorRNRIRCR RRR5R7RHRORPRQRR(RRJRSR[RTRK((s(/usr/lib64/python2.6/compiler/symbols.pyt visitLambdas   cCsLxE|D]=}t|ƒtijo|i||ƒq|i|ƒqWdS(N(ttypettypest TupleTypeROR"(RRKtargsR ((s(/usr/lib64/python2.6/compiler/symbols.pyROs cCs|i|ƒ|iƒdS(N(R)R4(RRKRS((s(/usr/lib64/python2.6/compiler/symbols.pyRRs cCsð|i|iƒx!|iD]}|i||ƒqWt|i|iƒ}|ipt|tƒo d|_n|i dj o|idƒn|idƒ||i |<|i }|i|_ |i|i |ƒ||_ |i||ƒdS(Nit__doc__R<(RR tbasesRIR6R RR5R7tdocRRHRRQRR(RRJRSRTRKtprev((s(/usr/lib64/python2.6/compiler/symbols.pyt visitClass#s        cCs/|o|i|iƒn|i|iƒdS(N(RR R(RRJRKR[((s(/usr/lib64/python2.6/compiler/symbols.pyt visitName:scCsa|i|i|dƒ|i|i|ƒ|i|i|ƒ|io|i|i|ƒndS(Ni(RIR[tlisttbodytelse_(RRJRK((s(/usr/lib64/python2.6/compiler/symbols.pytvisitForBs  cCsFx?|iD]4\}}|djoq n|i|p|ƒq WdS(Nt*(R8R(RRJRKR tasname((s(/usr/lib64/python2.6/compiler/symbols.pyt visitFromIs   cCs\xU|iD]J\}}|idƒ}|djo|| }n|i|p|ƒq WdS(Nt.iÿÿÿÿ(R8tfindR(RRJRKR RsR((s(/usr/lib64/python2.6/compiler/symbols.pyt visitImportOs   cCs%x|iD]}|i|ƒq WdS(N(R8R!(RRJRKR ((s(/usr/lib64/python2.6/compiler/symbols.pyt visitGlobalVs cCs>x$|iD]}|i||dƒq W|i|i|ƒdS(s.Propagate assignment flag down to child nodes. The Assign node doesn't itself contains the variables being assigned to. Instead, the children in node.nodes are visited with the assign flag set to true. When the names occur in those nodes, they are marked as defs. Some names that occur in an assignment target are not bound by the assignment, e.g. a name occurring inside a slice. The visitor handles these nodes specially; they do not propagate the assign flag to their children. iN(tnodesRIRX(RRJRKRT((s(/usr/lib64/python2.6/compiler/symbols.pyt visitAssignZs icCs|i|iƒdS(N(RR (RRJRKR[((s(/usr/lib64/python2.6/compiler/symbols.pyt visitAssNamekscCs|i|i|dƒdS(Ni(RIRX(RRJRKR[((s(/usr/lib64/python2.6/compiler/symbols.pyt visitAssAttrnscCsA|i|i|dƒx$|iD]}|i||dƒq WdS(Ni(RIRXtsubs(RRJRKR[RT((s(/usr/lib64/python2.6/compiler/symbols.pytvisitSubscriptqs cCsb|i|i|dƒ|io|i|i|dƒn|io|i|i|dƒndS(Ni(RIRXtlowertupper(RRJRKR[((s(/usr/lib64/python2.6/compiler/symbols.pyt visitSlicevs   cCsZ|i|i|ƒt|itiƒo|i|i|dƒn|i|i|ƒdS(Ni(RIRJR5RtNameRX(RRJRK((s(/usr/lib64/python2.6/compiler/symbols.pytvisitAugAssign}scCs¤x||iD]q\}}t|tiƒo2t|iƒ|ijo|ipq qWq[n|i||ƒ|i||ƒq W|io|i|i|ƒndS(N( ttestsR5RtConstRdtvaluet _const_typesRIRp(RRJRKR`Ro((s(/usr/lib64/python2.6/compiler/symbols.pytvisitIf‰s   cCs d|_|i|i|ƒdS(Ni(RRIR†(RRJRK((s(/usr/lib64/python2.6/compiler/symbols.pyt visitYield–s ( RR<RRLtvisitExpressionRURVRZR_RaRcRORRRlRmRqRtRwRxRzR{R|R~RRƒRet StringTypetIntTypet FloatTypeR‡RˆR‰(((s(/usr/lib64/python2.6/compiler/symbols.pyRGÓs4                      cCst|ƒt|ƒjS(N(tsorted(tl1tl2((s(/usr/lib64/python2.6/compiler/symbols.pytlist_eqšst__main__(t parseFiletwalkcCsjg}g}|iƒD]}||iƒq~D]1}|idƒp |idƒp ||q2q2~S(Ns_[Ru(t get_symbolstget_namet startswith(tsymst_[1]t_[2]ts((s(/usr/lib64/python2.6/compiler/symbols.pyR&¢s8itexectoopstskippingi(((6RhtcompilerRtcompiler.constsRRRRRt compiler.miscRReR,t MANGLE_LENRR=R7R@RCR6RGR‘RR“R”tsymtableR&targvtfiletopentftreadtbuftcloseR˜t mod_namesttreeR›RHtnames2RŽtexitR%R#tvaluesR•t is_namespaceR™R:R R–tlRt get_namespace(((s(/usr/lib64/python2.6/compiler/symbols.pytsn(  ž Ç                  * PK’[„Ø8…E…E symbols.pyonuW+A„¶Ñò §ÚêLc@sNdZddklZddklZlZlZlZlZddk l Z ddk Z ddk Z dZ ddd„ƒYZd efd „ƒYZd efd „ƒYZd efd„ƒYZdefd„ƒYZdefd„ƒYZddd„ƒYZd„Zedjo4ddk Z ddklZlZddkZd„Zxúe idD]çZeGHeeƒZeiƒZ ei!ƒeie edƒZ"ee"ƒZ#eeƒZ$eƒZ%ee$e%ƒe%i&e$iƒZ'ee#e'ƒp1HdGeGHe(e#ƒGHe(e'ƒGHe i)dƒnhZ*e*i+e%i&ƒe*e$=e*i,ƒZ&[*xôe"i-ƒD]æZ%e%i.ƒoÓgZ/e&D]'Z0e0i1e%i2ƒjo e/e0qvqv[/Z3e4e3ƒdjodGe%i2ƒGHq>eee%i5ƒƒe3diƒƒpHe%i2ƒGHe(ee%i5ƒƒƒGHe(e3diƒƒGHe i)dƒq>qXqXWq[WndS( sModule symbol-table generatoriÿÿÿÿ(tast(tSC_LOCALt SC_GLOBALtSC_FREEtSC_CELLt SC_UNKNOWN(tmangleNitScopecBs¤eZdd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zd „Zd „Zd„Zd„Zd„ZRS(cCsÁ||_||_h|_h|_h|_h|_h|_h|_g|_d|_ d|_ d|_ |dj oDxAt t|ƒƒD])}||djo|||_ PqŒqŒWndS(Nt_(tnametmoduletdefstusestglobalstparamstfreestcellstchildrentNonetnestedt generatortklasstrangetlen(tselfR R Rti((s(/usr/lib64/python2.6/compiler/symbols.pyt__init__s$              cCsd|ii|ifS(Ns<%s: %s>(t __class__t__name__R (R((s(/usr/lib64/python2.6/compiler/symbols.pyt__repr__$scCs%|idjo|St||iƒS(N(RRR(RR ((s(/usr/lib64/python2.6/compiler/symbols.pyR'scCsd|i|i|ƒs.0(t_GenExprScope__countert_GenExprScope__super_initR"(RR RR((s(/usr/lib64/python2.6/compiler/symbols.pyR¹s cCsti|ƒ}|S(N(RR&(RR$((s(/usr/lib64/python2.6/compiler/symbols.pyR&¿sN(RR<RRRBRARR&(((s(/usr/lib64/python2.6/compiler/symbols.pyR@´s  t LambdaScopecBs#eZeiZdZdd„ZRS(icCs3|i}|id7_|id|||ƒdS(Nis lambda.%d(t_LambdaScope__countert_LambdaScope__super_init(RR RR((s(/usr/lib64/python2.6/compiler/symbols.pyRÈs N(RR<RRRERDR(((s(/usr/lib64/python2.6/compiler/symbols.pyRCÃs R6cBseZeiZd„ZRS(cCs|i|||ƒdS(N(t_ClassScope__super_init(RR R ((s(/usr/lib64/python2.6/compiler/symbols.pyRÐs(RR<RRRF(((s(/usr/lib64/python2.6/compiler/symbols.pyR6Ís t SymbolVisitorcBseZd„Zd„ZeZd„Zd„Zd„Zd„Zd„Z dd„Z d „Z d „Z d „Z dd „Zd „Zd„Zd„Zd„Zd„Zdd„Zdd„Zdd„Zdd„Zd„ZeieieifZd„Zd„ZRS(cCsh|_d|_dS(N(tscopesRR(R((s(/usr/lib64/python2.6/compiler/symbols.pyRÔs cCs2tƒ}|_|i|<|i|i|ƒdS(N(R=R RHtvisittnode(RRJtscope((s(/usr/lib64/python2.6/compiler/symbols.pyt visitModuleÚscCsÞ|io|i|i|ƒn|i|iƒx!|iD]}|i||ƒq;Wt|i|i|iƒ}|ipt |tƒo d|_n||i |<|i ||i ƒ|i|i |ƒ|i||ƒdS(Ni(t decoratorsRIRR tdefaultsR7R RRR5RHt_do_argstargnamestcodethandle_free_vars(RRJtparenttnRK((s(/usr/lib64/python2.6/compiler/symbols.pyt visitFunctionàs    cCs€t|i|iƒ}|ip t|tƒpt|tƒo d|_n||i|<|i|i|ƒ|i ||ƒdS(Ni( R@R RRR5R7RHRIRQRR(RRJRSRK((s(/usr/lib64/python2.6/compiler/symbols.pyt visitGenExprîs  cCs;x!|iD]}|i||ƒq W|i|i|ƒdS(N(tqualsRItexpr(RRJRKtgenfor((s(/usr/lib64/python2.6/compiler/symbols.pytvisitGenExprInnerùs cCsQ|i|i|dƒ|i|i|ƒx!|iD]}|i||ƒq3WdS(Ni(RItassigntitertifs(RRJRKtif_((s(/usr/lib64/python2.6/compiler/symbols.pytvisitGenExprForÿs  cCs|i|i|ƒdS(N(RIttest(RRJRK((s(/usr/lib64/python2.6/compiler/symbols.pytvisitGenExprIfsicCs§x!|iD]}|i||ƒq Wt|i|iƒ}|ipt|tƒo d|_n||i|<|i ||i ƒ|i|i |ƒ|i ||ƒdS(Ni( RNRIRCR RRR5R7RHRORPRQRR(RRJRSR[RTRK((s(/usr/lib64/python2.6/compiler/symbols.pyt visitLambdas   cCsLxE|D]=}t|ƒtijo|i||ƒq|i|ƒqWdS(N(ttypettypest TupleTypeROR"(RRKtargsR ((s(/usr/lib64/python2.6/compiler/symbols.pyROs cCs|i|ƒ|iƒdS(N(R)R4(RRKRS((s(/usr/lib64/python2.6/compiler/symbols.pyRRs cCsð|i|iƒx!|iD]}|i||ƒqWt|i|iƒ}|ipt|tƒo d|_n|i dj o|idƒn|idƒ||i |<|i }|i|_ |i|i |ƒ||_ |i||ƒdS(Nit__doc__R<(RR tbasesRIR6R RR5R7tdocRRHRRQRR(RRJRSRTRKtprev((s(/usr/lib64/python2.6/compiler/symbols.pyt visitClass#s        cCs/|o|i|iƒn|i|iƒdS(N(RR R(RRJRKR[((s(/usr/lib64/python2.6/compiler/symbols.pyt visitName:scCsa|i|i|dƒ|i|i|ƒ|i|i|ƒ|io|i|i|ƒndS(Ni(RIR[tlisttbodytelse_(RRJRK((s(/usr/lib64/python2.6/compiler/symbols.pytvisitForBs  cCsFx?|iD]4\}}|djoq n|i|p|ƒq WdS(Nt*(R8R(RRJRKR tasname((s(/usr/lib64/python2.6/compiler/symbols.pyt visitFromIs   cCs\xU|iD]J\}}|idƒ}|djo|| }n|i|p|ƒq WdS(Nt.iÿÿÿÿ(R8tfindR(RRJRKR RrR((s(/usr/lib64/python2.6/compiler/symbols.pyt visitImportOs   cCs%x|iD]}|i|ƒq WdS(N(R8R!(RRJRKR ((s(/usr/lib64/python2.6/compiler/symbols.pyt visitGlobalVs cCs>x$|iD]}|i||dƒq W|i|i|ƒdS(s.Propagate assignment flag down to child nodes. The Assign node doesn't itself contains the variables being assigned to. Instead, the children in node.nodes are visited with the assign flag set to true. When the names occur in those nodes, they are marked as defs. Some names that occur in an assignment target are not bound by the assignment, e.g. a name occurring inside a slice. The visitor handles these nodes specially; they do not propagate the assign flag to their children. iN(tnodesRIRX(RRJRKRT((s(/usr/lib64/python2.6/compiler/symbols.pyt visitAssignZs icCs|i|iƒdS(N(RR (RRJRKR[((s(/usr/lib64/python2.6/compiler/symbols.pyt visitAssNamekscCs|i|i|dƒdS(Ni(RIRX(RRJRKR[((s(/usr/lib64/python2.6/compiler/symbols.pyt visitAssAttrnscCsA|i|i|dƒx$|iD]}|i||dƒq WdS(Ni(RIRXtsubs(RRJRKR[RT((s(/usr/lib64/python2.6/compiler/symbols.pytvisitSubscriptqs cCsb|i|i|dƒ|io|i|i|dƒn|io|i|i|dƒndS(Ni(RIRXtlowertupper(RRJRKR[((s(/usr/lib64/python2.6/compiler/symbols.pyt visitSlicevs   cCsZ|i|i|ƒt|itiƒo|i|i|dƒn|i|i|ƒdS(Ni(RIRJR5RtNameRX(RRJRK((s(/usr/lib64/python2.6/compiler/symbols.pytvisitAugAssign}scCs¤x||iD]q\}}t|tiƒo2t|iƒ|ijo|ipq qWq[n|i||ƒ|i||ƒq W|io|i|i|ƒndS(N( ttestsR5RtConstRctvaluet _const_typesRIRo(RRJRKR`Rn((s(/usr/lib64/python2.6/compiler/symbols.pytvisitIf‰s   cCs d|_|i|i|ƒdS(Ni(RRIR…(RRJRK((s(/usr/lib64/python2.6/compiler/symbols.pyt visitYield–s ( RR<RRLtvisitExpressionRURVRZR_RaRbRORRRkRlRpRsRvRwRyRzR{R}R€R‚Rdt StringTypetIntTypet FloatTypeR†R‡Rˆ(((s(/usr/lib64/python2.6/compiler/symbols.pyRGÓs4                      cCst|ƒt|ƒjS(N(tsorted(tl1tl2((s(/usr/lib64/python2.6/compiler/symbols.pytlist_eqšst__main__(t parseFiletwalkcCsjg}g}|iƒD]}||iƒq~D]1}|idƒp |idƒp ||q2q2~S(Ns_[Rt(t get_symbolstget_namet startswith(tsymst_[1]t_[2]ts((s(/usr/lib64/python2.6/compiler/symbols.pyR&¢s8itexectoopstskippingi(((6RgtcompilerRtcompiler.constsRRRRRt compiler.miscRRdR,t MANGLE_LENRR=R7R@RCR6RGRRR’R“tsymtableR&targvtfiletopentftreadtbuftcloseR—t mod_namesttreeRšRHtnames2RtexitR%R#tvaluesR”t is_namespaceR˜R:R R•tlRt get_namespace(((s(/usr/lib64/python2.6/compiler/symbols.pytsn(  ž Ç                  * PK’[÷1Pww visitor.pyonuW+A„¶Ñò §ÚêLc@s[ddklZdd d„ƒYZdefd„ƒYZeZddd„Zd„ZdS( iÿÿÿÿ(tastt ASTVisitorcBs8eZdZdZd„Zd„Zd„Zd„ZRS(sPerforms a depth-first walk of the AST The ASTVisitor will walk the AST, performing either a preorder or postorder traversal depending on which method is called. methods: preorder(tree, visitor) postorder(tree, visitor) tree: an instance of ast.Node visitor: an instance with visitXXX methods The ASTVisitor is responsible for walking over the tree in the correct order. For each node, it checks the visitor argument for a method named 'visitNodeType' where NodeType is the name of the node's class, e.g. Class. If the method exists, it is called with the node as its sole argument. The visitor method for a particular node type can control how child nodes are visited during a preorder walk. (It can't control the order during a postorder walk, because it is called _after_ the walk has occurred.) The ASTVisitor modifies the visitor argument by adding a visit method to the visitor; this method can be used to visit a child node of arbitrary type. icCsd|_h|_dS(N(tNonetnodet_cache(tself((s(/usr/lib64/python2.6/compiler/visitor.pyt__init__"s cGs+x$|iƒD]}|i||Œq WdS(N(t getChildNodestdispatch(RRtargstchild((s(/usr/lib64/python2.6/compiler/visitor.pytdefault&s cGsw||_|i}|ii|dƒ}|djo6|i}t|id||iƒ}||i|s ;#PK’[öúF—ý·ý· pycodegen.pynuW+A„¶import imp import os import marshal import struct import sys from cStringIO import StringIO from compiler import ast, parse, walk, syntax from compiler import pyassem, misc, future, symbols from compiler.consts import SC_LOCAL, SC_GLOBAL, SC_FREE, SC_CELL from compiler.consts import (CO_VARARGS, CO_VARKEYWORDS, CO_NEWLOCALS, CO_NESTED, CO_GENERATOR, CO_FUTURE_DIVISION, CO_FUTURE_ABSIMPORT, CO_FUTURE_WITH_STATEMENT, CO_FUTURE_PRINT_FUNCTION) from compiler.pyassem import TupleArg # XXX The version-specific code can go, since this code only works with 2.x. # Do we have Python 1.x or Python 2.x? try: VERSION = sys.version_info[0] except AttributeError: VERSION = 1 callfunc_opcode_info = { # (Have *args, Have **args) : opcode (0,0) : "CALL_FUNCTION", (1,0) : "CALL_FUNCTION_VAR", (0,1) : "CALL_FUNCTION_KW", (1,1) : "CALL_FUNCTION_VAR_KW", } LOOP = 1 EXCEPT = 2 TRY_FINALLY = 3 END_FINALLY = 4 def compileFile(filename, display=0): f = open(filename, 'U') buf = f.read() f.close() mod = Module(buf, filename) try: mod.compile(display) except SyntaxError: raise else: f = open(filename + "c", "wb") mod.dump(f) f.close() def compile(source, filename, mode, flags=None, dont_inherit=None): """Replacement for builtin compile() function""" if flags is not None or dont_inherit is not None: raise RuntimeError, "not implemented yet" if mode == "single": gen = Interactive(source, filename) elif mode == "exec": gen = Module(source, filename) elif mode == "eval": gen = Expression(source, filename) else: raise ValueError("compile() 3rd arg must be 'exec' or " "'eval' or 'single'") gen.compile() return gen.code class AbstractCompileMode: mode = None # defined by subclass def __init__(self, source, filename): self.source = source self.filename = filename self.code = None def _get_tree(self): tree = parse(self.source, self.mode) misc.set_filename(self.filename, tree) syntax.check(tree) return tree def compile(self): pass # implemented by subclass def getCode(self): return self.code class Expression(AbstractCompileMode): mode = "eval" def compile(self): tree = self._get_tree() gen = ExpressionCodeGenerator(tree) self.code = gen.getCode() class Interactive(AbstractCompileMode): mode = "single" def compile(self): tree = self._get_tree() gen = InteractiveCodeGenerator(tree) self.code = gen.getCode() class Module(AbstractCompileMode): mode = "exec" def compile(self, display=0): tree = self._get_tree() gen = ModuleCodeGenerator(tree) if display: import pprint print pprint.pprint(tree) self.code = gen.getCode() def dump(self, f): f.write(self.getPycHeader()) marshal.dump(self.code, f) MAGIC = imp.get_magic() def getPycHeader(self): # compile.c uses marshal to write a long directly, with # calling the interface that would also generate a 1-byte code # to indicate the type of the value. simplest way to get the # same effect is to call marshal and then skip the code. mtime = os.path.getmtime(self.filename) mtime = struct.pack(' 0: top = top - 1 kind, loop_block = self.setups[top] if kind == LOOP: break if kind != LOOP: raise SyntaxError, "'continue' outside loop (%s, %d)" % \ (node.filename, node.lineno) self.emit('CONTINUE_LOOP', loop_block) self.nextBlock() elif kind == END_FINALLY: msg = "'continue' not allowed inside 'finally' clause (%s, %d)" raise SyntaxError, msg % (node.filename, node.lineno) def visitTest(self, node, jump): end = self.newBlock() for child in node.nodes[:-1]: self.visit(child) self.emit(jump, end) self.nextBlock() self.emit('POP_TOP') self.visit(node.nodes[-1]) self.nextBlock(end) def visitAnd(self, node): self.visitTest(node, 'JUMP_IF_FALSE') def visitOr(self, node): self.visitTest(node, 'JUMP_IF_TRUE') def visitIfExp(self, node): endblock = self.newBlock() elseblock = self.newBlock() self.visit(node.test) self.emit('JUMP_IF_FALSE', elseblock) self.emit('POP_TOP') self.visit(node.then) self.emit('JUMP_FORWARD', endblock) self.nextBlock(elseblock) self.emit('POP_TOP') self.visit(node.else_) self.nextBlock(endblock) def visitCompare(self, node): self.visit(node.expr) cleanup = self.newBlock() for op, code in node.ops[:-1]: self.visit(code) self.emit('DUP_TOP') self.emit('ROT_THREE') self.emit('COMPARE_OP', op) self.emit('JUMP_IF_FALSE', cleanup) self.nextBlock() self.emit('POP_TOP') # now do the last comparison if node.ops: op, code = node.ops[-1] self.visit(code) self.emit('COMPARE_OP', op) if len(node.ops) > 1: end = self.newBlock() self.emit('JUMP_FORWARD', end) self.startBlock(cleanup) self.emit('ROT_TWO') self.emit('POP_TOP') self.nextBlock(end) # list comprehensions __list_count = 0 def visitListComp(self, node): self.set_lineno(node) # setup list tmpname = "$list%d" % self.__list_count self.__list_count = self.__list_count + 1 self.emit('BUILD_LIST', 0) self.emit('DUP_TOP') self._implicitNameOp('STORE', tmpname) stack = [] for i, for_ in zip(range(len(node.quals)), node.quals): start, anchor = self.visit(for_) cont = None for if_ in for_.ifs: if cont is None: cont = self.newBlock() self.visit(if_, cont) stack.insert(0, (start, cont, anchor)) self._implicitNameOp('LOAD', tmpname) self.visit(node.expr) self.emit('LIST_APPEND') for start, cont, anchor in stack: if cont: skip_one = self.newBlock() self.emit('JUMP_FORWARD', skip_one) self.startBlock(cont) self.emit('POP_TOP') self.nextBlock(skip_one) self.emit('JUMP_ABSOLUTE', start) self.startBlock(anchor) self._implicitNameOp('DELETE', tmpname) self.__list_count = self.__list_count - 1 def visitListCompFor(self, node): start = self.newBlock() anchor = self.newBlock() self.visit(node.list) self.emit('GET_ITER') self.nextBlock(start) self.set_lineno(node, force=True) self.emit('FOR_ITER', anchor) self.nextBlock() self.visit(node.assign) return start, anchor def visitListCompIf(self, node, branch): self.set_lineno(node, force=True) self.visit(node.test) self.emit('JUMP_IF_FALSE', branch) self.newBlock() self.emit('POP_TOP') def _makeClosure(self, gen, args): frees = gen.scope.get_free_vars() if frees: for name in frees: self.emit('LOAD_CLOSURE', name) self.emit('BUILD_TUPLE', len(frees)) self.emit('LOAD_CONST', gen) self.emit('MAKE_CLOSURE', args) else: self.emit('LOAD_CONST', gen) self.emit('MAKE_FUNCTION', args) def visitGenExpr(self, node): gen = GenExprCodeGenerator(node, self.scopes, self.class_name, self.get_module()) walk(node.code, gen) gen.finish() self.set_lineno(node) self._makeClosure(gen, 0) # precomputation of outmost iterable self.visit(node.code.quals[0].iter) self.emit('GET_ITER') self.emit('CALL_FUNCTION', 1) def visitGenExprInner(self, node): self.set_lineno(node) # setup list stack = [] for i, for_ in zip(range(len(node.quals)), node.quals): start, anchor, end = self.visit(for_) cont = None for if_ in for_.ifs: if cont is None: cont = self.newBlock() self.visit(if_, cont) stack.insert(0, (start, cont, anchor, end)) self.visit(node.expr) self.emit('YIELD_VALUE') self.emit('POP_TOP') for start, cont, anchor, end in stack: if cont: skip_one = self.newBlock() self.emit('JUMP_FORWARD', skip_one) self.startBlock(cont) self.emit('POP_TOP') self.nextBlock(skip_one) self.emit('JUMP_ABSOLUTE', start) self.startBlock(anchor) self.emit('POP_BLOCK') self.setups.pop() self.startBlock(end) self.emit('LOAD_CONST', None) def visitGenExprFor(self, node): start = self.newBlock() anchor = self.newBlock() end = self.newBlock() self.setups.push((LOOP, start)) self.emit('SETUP_LOOP', end) if node.is_outmost: self.loadName('.0') else: self.visit(node.iter) self.emit('GET_ITER') self.nextBlock(start) self.set_lineno(node, force=True) self.emit('FOR_ITER', anchor) self.nextBlock() self.visit(node.assign) return start, anchor, end def visitGenExprIf(self, node, branch): self.set_lineno(node, force=True) self.visit(node.test) self.emit('JUMP_IF_FALSE', branch) self.newBlock() self.emit('POP_TOP') # exception related def visitAssert(self, node): # XXX would be interesting to implement this via a # transformation of the AST before this stage if __debug__: end = self.newBlock() self.set_lineno(node) # XXX AssertionError appears to be special case -- it is always # loaded as a global even if there is a local name. I guess this # is a sort of renaming op. self.nextBlock() self.visit(node.test) self.emit('JUMP_IF_TRUE', end) self.nextBlock() self.emit('POP_TOP') self.emit('LOAD_GLOBAL', 'AssertionError') if node.fail: self.visit(node.fail) self.emit('RAISE_VARARGS', 2) else: self.emit('RAISE_VARARGS', 1) self.nextBlock(end) self.emit('POP_TOP') def visitRaise(self, node): self.set_lineno(node) n = 0 if node.expr1: self.visit(node.expr1) n = n + 1 if node.expr2: self.visit(node.expr2) n = n + 1 if node.expr3: self.visit(node.expr3) n = n + 1 self.emit('RAISE_VARARGS', n) def visitTryExcept(self, node): body = self.newBlock() handlers = self.newBlock() end = self.newBlock() if node.else_: lElse = self.newBlock() else: lElse = end self.set_lineno(node) self.emit('SETUP_EXCEPT', handlers) self.nextBlock(body) self.setups.push((EXCEPT, body)) self.visit(node.body) self.emit('POP_BLOCK') self.setups.pop() self.emit('JUMP_FORWARD', lElse) self.startBlock(handlers) last = len(node.handlers) - 1 for i in range(len(node.handlers)): expr, target, body = node.handlers[i] self.set_lineno(expr) if expr: self.emit('DUP_TOP') self.visit(expr) self.emit('COMPARE_OP', 'exception match') next = self.newBlock() self.emit('JUMP_IF_FALSE', next) self.nextBlock() self.emit('POP_TOP') self.emit('POP_TOP') if target: self.visit(target) else: self.emit('POP_TOP') self.emit('POP_TOP') self.visit(body) self.emit('JUMP_FORWARD', end) if expr: self.nextBlock(next) else: self.nextBlock() if expr: # XXX self.emit('POP_TOP') self.emit('END_FINALLY') if node.else_: self.nextBlock(lElse) self.visit(node.else_) self.nextBlock(end) def visitTryFinally(self, node): body = self.newBlock() final = self.newBlock() self.set_lineno(node) self.emit('SETUP_FINALLY', final) self.nextBlock(body) self.setups.push((TRY_FINALLY, body)) self.visit(node.body) self.emit('POP_BLOCK') self.setups.pop() self.emit('LOAD_CONST', None) self.nextBlock(final) self.setups.push((END_FINALLY, final)) self.visit(node.final) self.emit('END_FINALLY') self.setups.pop() __with_count = 0 def visitWith(self, node): body = self.newBlock() final = self.newBlock() valuevar = "$value%d" % self.__with_count self.__with_count += 1 self.set_lineno(node) self.visit(node.expr) self.emit('DUP_TOP') self.emit('LOAD_ATTR', '__exit__') self.emit('ROT_TWO') self.emit('LOAD_ATTR', '__enter__') self.emit('CALL_FUNCTION', 0) if node.vars is None: self.emit('POP_TOP') else: self._implicitNameOp('STORE', valuevar) self.emit('SETUP_FINALLY', final) self.nextBlock(body) self.setups.push((TRY_FINALLY, body)) if node.vars is not None: self._implicitNameOp('LOAD', valuevar) self._implicitNameOp('DELETE', valuevar) self.visit(node.vars) self.visit(node.body) self.emit('POP_BLOCK') self.setups.pop() self.emit('LOAD_CONST', None) self.nextBlock(final) self.setups.push((END_FINALLY, final)) self.emit('WITH_CLEANUP') self.emit('END_FINALLY') self.setups.pop() self.__with_count -= 1 # misc def visitDiscard(self, node): self.set_lineno(node) self.visit(node.expr) self.emit('POP_TOP') def visitConst(self, node): self.emit('LOAD_CONST', node.value) def visitKeyword(self, node): self.emit('LOAD_CONST', node.name) self.visit(node.expr) def visitGlobal(self, node): # no code to generate pass def visitName(self, node): self.set_lineno(node) self.loadName(node.name) def visitPass(self, node): self.set_lineno(node) def visitImport(self, node): self.set_lineno(node) level = 0 if self.graph.checkFlag(CO_FUTURE_ABSIMPORT) else -1 for name, alias in node.names: if VERSION > 1: self.emit('LOAD_CONST', level) self.emit('LOAD_CONST', None) self.emit('IMPORT_NAME', name) mod = name.split(".")[0] if alias: self._resolveDots(name) self.storeName(alias) else: self.storeName(mod) def visitFrom(self, node): self.set_lineno(node) level = node.level if level == 0 and not self.graph.checkFlag(CO_FUTURE_ABSIMPORT): level = -1 fromlist = tuple(name for (name, alias) in node.names) if VERSION > 1: self.emit('LOAD_CONST', level) self.emit('LOAD_CONST', fromlist) self.emit('IMPORT_NAME', node.modname) for name, alias in node.names: if VERSION > 1: if name == '*': self.namespace = 0 self.emit('IMPORT_STAR') # There can only be one name w/ from ... import * assert len(node.names) == 1 return else: self.emit('IMPORT_FROM', name) self._resolveDots(name) self.storeName(alias or name) else: self.emit('IMPORT_FROM', name) self.emit('POP_TOP') def _resolveDots(self, name): elts = name.split(".") if len(elts) == 1: return for elt in elts[1:]: self.emit('LOAD_ATTR', elt) def visitGetattr(self, node): self.visit(node.expr) self.emit('LOAD_ATTR', self.mangle(node.attrname)) # next five implement assignments def visitAssign(self, node): self.set_lineno(node) self.visit(node.expr) dups = len(node.nodes) - 1 for i in range(len(node.nodes)): elt = node.nodes[i] if i < dups: self.emit('DUP_TOP') if isinstance(elt, ast.Node): self.visit(elt) def visitAssName(self, node): if node.flags == 'OP_ASSIGN': self.storeName(node.name) elif node.flags == 'OP_DELETE': self.set_lineno(node) self.delName(node.name) else: print "oops", node.flags def visitAssAttr(self, node): self.visit(node.expr) if node.flags == 'OP_ASSIGN': self.emit('STORE_ATTR', self.mangle(node.attrname)) elif node.flags == 'OP_DELETE': self.emit('DELETE_ATTR', self.mangle(node.attrname)) else: print "warning: unexpected flags:", node.flags print node def _visitAssSequence(self, node, op='UNPACK_SEQUENCE'): if findOp(node) != 'OP_DELETE': self.emit(op, len(node.nodes)) for child in node.nodes: self.visit(child) if VERSION > 1: visitAssTuple = _visitAssSequence visitAssList = _visitAssSequence else: def visitAssTuple(self, node): self._visitAssSequence(node, 'UNPACK_TUPLE') def visitAssList(self, node): self._visitAssSequence(node, 'UNPACK_LIST') # augmented assignment def visitAugAssign(self, node): self.set_lineno(node) aug_node = wrap_aug(node.node) self.visit(aug_node, "load") self.visit(node.expr) self.emit(self._augmented_opcode[node.op]) self.visit(aug_node, "store") _augmented_opcode = { '+=' : 'INPLACE_ADD', '-=' : 'INPLACE_SUBTRACT', '*=' : 'INPLACE_MULTIPLY', '/=' : 'INPLACE_DIVIDE', '//=': 'INPLACE_FLOOR_DIVIDE', '%=' : 'INPLACE_MODULO', '**=': 'INPLACE_POWER', '>>=': 'INPLACE_RSHIFT', '<<=': 'INPLACE_LSHIFT', '&=' : 'INPLACE_AND', '^=' : 'INPLACE_XOR', '|=' : 'INPLACE_OR', } def visitAugName(self, node, mode): if mode == "load": self.loadName(node.name) elif mode == "store": self.storeName(node.name) def visitAugGetattr(self, node, mode): if mode == "load": self.visit(node.expr) self.emit('DUP_TOP') self.emit('LOAD_ATTR', self.mangle(node.attrname)) elif mode == "store": self.emit('ROT_TWO') self.emit('STORE_ATTR', self.mangle(node.attrname)) def visitAugSlice(self, node, mode): if mode == "load": self.visitSlice(node, 1) elif mode == "store": slice = 0 if node.lower: slice = slice | 1 if node.upper: slice = slice | 2 if slice == 0: self.emit('ROT_TWO') elif slice == 3: self.emit('ROT_FOUR') else: self.emit('ROT_THREE') self.emit('STORE_SLICE+%d' % slice) def visitAugSubscript(self, node, mode): if mode == "load": self.visitSubscript(node, 1) elif mode == "store": self.emit('ROT_THREE') self.emit('STORE_SUBSCR') def visitExec(self, node): self.visit(node.expr) if node.locals is None: self.emit('LOAD_CONST', None) else: self.visit(node.locals) if node.globals is None: self.emit('DUP_TOP') else: self.visit(node.globals) self.emit('EXEC_STMT') def visitCallFunc(self, node): pos = 0 kw = 0 self.set_lineno(node) self.visit(node.node) for arg in node.args: self.visit(arg) if isinstance(arg, ast.Keyword): kw = kw + 1 else: pos = pos + 1 if node.star_args is not None: self.visit(node.star_args) if node.dstar_args is not None: self.visit(node.dstar_args) have_star = node.star_args is not None have_dstar = node.dstar_args is not None opcode = callfunc_opcode_info[have_star, have_dstar] self.emit(opcode, kw << 8 | pos) def visitPrint(self, node, newline=0): self.set_lineno(node) if node.dest: self.visit(node.dest) for child in node.nodes: if node.dest: self.emit('DUP_TOP') self.visit(child) if node.dest: self.emit('ROT_TWO') self.emit('PRINT_ITEM_TO') else: self.emit('PRINT_ITEM') if node.dest and not newline: self.emit('POP_TOP') def visitPrintnl(self, node): self.visitPrint(node, newline=1) if node.dest: self.emit('PRINT_NEWLINE_TO') else: self.emit('PRINT_NEWLINE') def visitReturn(self, node): self.set_lineno(node) self.visit(node.value) self.emit('RETURN_VALUE') def visitYield(self, node): self.set_lineno(node) self.visit(node.value) self.emit('YIELD_VALUE') # slice and subscript stuff def visitSlice(self, node, aug_flag=None): # aug_flag is used by visitAugSlice self.visit(node.expr) slice = 0 if node.lower: self.visit(node.lower) slice = slice | 1 if node.upper: self.visit(node.upper) slice = slice | 2 if aug_flag: if slice == 0: self.emit('DUP_TOP') elif slice == 3: self.emit('DUP_TOPX', 3) else: self.emit('DUP_TOPX', 2) if node.flags == 'OP_APPLY': self.emit('SLICE+%d' % slice) elif node.flags == 'OP_ASSIGN': self.emit('STORE_SLICE+%d' % slice) elif node.flags == 'OP_DELETE': self.emit('DELETE_SLICE+%d' % slice) else: print "weird slice", node.flags raise def visitSubscript(self, node, aug_flag=None): self.visit(node.expr) for sub in node.subs: self.visit(sub) if len(node.subs) > 1: self.emit('BUILD_TUPLE', len(node.subs)) if aug_flag: self.emit('DUP_TOPX', 2) if node.flags == 'OP_APPLY': self.emit('BINARY_SUBSCR') elif node.flags == 'OP_ASSIGN': self.emit('STORE_SUBSCR') elif node.flags == 'OP_DELETE': self.emit('DELETE_SUBSCR') # binary ops def binaryOp(self, node, op): self.visit(node.left) self.visit(node.right) self.emit(op) def visitAdd(self, node): return self.binaryOp(node, 'BINARY_ADD') def visitSub(self, node): return self.binaryOp(node, 'BINARY_SUBTRACT') def visitMul(self, node): return self.binaryOp(node, 'BINARY_MULTIPLY') def visitDiv(self, node): return self.binaryOp(node, self._div_op) def visitFloorDiv(self, node): return self.binaryOp(node, 'BINARY_FLOOR_DIVIDE') def visitMod(self, node): return self.binaryOp(node, 'BINARY_MODULO') def visitPower(self, node): return self.binaryOp(node, 'BINARY_POWER') def visitLeftShift(self, node): return self.binaryOp(node, 'BINARY_LSHIFT') def visitRightShift(self, node): return self.binaryOp(node, 'BINARY_RSHIFT') # unary ops def unaryOp(self, node, op): self.visit(node.expr) self.emit(op) def visitInvert(self, node): return self.unaryOp(node, 'UNARY_INVERT') def visitUnarySub(self, node): return self.unaryOp(node, 'UNARY_NEGATIVE') def visitUnaryAdd(self, node): return self.unaryOp(node, 'UNARY_POSITIVE') def visitUnaryInvert(self, node): return self.unaryOp(node, 'UNARY_INVERT') def visitNot(self, node): return self.unaryOp(node, 'UNARY_NOT') def visitBackquote(self, node): return self.unaryOp(node, 'UNARY_CONVERT') # bit ops def bitOp(self, nodes, op): self.visit(nodes[0]) for node in nodes[1:]: self.visit(node) self.emit(op) def visitBitand(self, node): return self.bitOp(node.nodes, 'BINARY_AND') def visitBitor(self, node): return self.bitOp(node.nodes, 'BINARY_OR') def visitBitxor(self, node): return self.bitOp(node.nodes, 'BINARY_XOR') # object constructors def visitEllipsis(self, node): self.emit('LOAD_CONST', Ellipsis) def visitTuple(self, node): self.set_lineno(node) for elt in node.nodes: self.visit(elt) self.emit('BUILD_TUPLE', len(node.nodes)) def visitList(self, node): self.set_lineno(node) for elt in node.nodes: self.visit(elt) self.emit('BUILD_LIST', len(node.nodes)) def visitSliceobj(self, node): for child in node.nodes: self.visit(child) self.emit('BUILD_SLICE', len(node.nodes)) def visitDict(self, node): self.set_lineno(node) self.emit('BUILD_MAP', 0) for k, v in node.items: self.emit('DUP_TOP') self.visit(k) self.visit(v) self.emit('ROT_THREE') self.emit('STORE_SUBSCR') class NestedScopeMixin: """Defines initClass() for nested scoping (Python 2.2-compatible)""" def initClass(self): self.__class__.NameFinder = LocalNameFinder self.__class__.FunctionGen = FunctionCodeGenerator self.__class__.ClassGen = ClassCodeGenerator class ModuleCodeGenerator(NestedScopeMixin, CodeGenerator): __super_init = CodeGenerator.__init__ scopes = None def __init__(self, tree): self.graph = pyassem.PyFlowGraph("", tree.filename) self.futures = future.find_futures(tree) self.__super_init() walk(tree, self) def get_module(self): return self class ExpressionCodeGenerator(NestedScopeMixin, CodeGenerator): __super_init = CodeGenerator.__init__ scopes = None futures = () def __init__(self, tree): self.graph = pyassem.PyFlowGraph("", tree.filename) self.__super_init() walk(tree, self) def get_module(self): return self class InteractiveCodeGenerator(NestedScopeMixin, CodeGenerator): __super_init = CodeGenerator.__init__ scopes = None futures = () def __init__(self, tree): self.graph = pyassem.PyFlowGraph("", tree.filename) self.__super_init() self.set_lineno(tree) walk(tree, self) self.emit('RETURN_VALUE') def get_module(self): return self def visitDiscard(self, node): # XXX Discard means it's an expression. Perhaps this is a bad # name. self.visit(node.expr) self.emit('PRINT_EXPR') class AbstractFunctionCode: optimized = 1 lambdaCount = 0 def __init__(self, func, scopes, isLambda, class_name, mod): self.class_name = class_name self.module = mod if isLambda: klass = FunctionCodeGenerator name = "" % klass.lambdaCount klass.lambdaCount = klass.lambdaCount + 1 else: name = func.name args, hasTupleArg = generateArgList(func.argnames) self.graph = pyassem.PyFlowGraph(name, func.filename, args, optimized=1) self.isLambda = isLambda self.super_init() if not isLambda and func.doc: self.setDocstring(func.doc) lnf = walk(func.code, self.NameFinder(args), verbose=0) self.locals.push(lnf.getLocals()) if func.varargs: self.graph.setFlag(CO_VARARGS) if func.kwargs: self.graph.setFlag(CO_VARKEYWORDS) self.set_lineno(func) if hasTupleArg: self.generateArgUnpack(func.argnames) def get_module(self): return self.module def finish(self): self.graph.startExitBlock() if not self.isLambda: self.emit('LOAD_CONST', None) self.emit('RETURN_VALUE') def generateArgUnpack(self, args): for i in range(len(args)): arg = args[i] if isinstance(arg, tuple): self.emit('LOAD_FAST', '.%d' % (i * 2)) self.unpackSequence(arg) def unpackSequence(self, tup): if VERSION > 1: self.emit('UNPACK_SEQUENCE', len(tup)) else: self.emit('UNPACK_TUPLE', len(tup)) for elt in tup: if isinstance(elt, tuple): self.unpackSequence(elt) else: self._nameOp('STORE', elt) unpackTuple = unpackSequence class FunctionCodeGenerator(NestedScopeMixin, AbstractFunctionCode, CodeGenerator): super_init = CodeGenerator.__init__ # call be other init scopes = None __super_init = AbstractFunctionCode.__init__ def __init__(self, func, scopes, isLambda, class_name, mod): self.scopes = scopes self.scope = scopes[func] self.__super_init(func, scopes, isLambda, class_name, mod) self.graph.setFreeVars(self.scope.get_free_vars()) self.graph.setCellVars(self.scope.get_cell_vars()) if self.scope.generator is not None: self.graph.setFlag(CO_GENERATOR) class GenExprCodeGenerator(NestedScopeMixin, AbstractFunctionCode, CodeGenerator): super_init = CodeGenerator.__init__ # call be other init scopes = None __super_init = AbstractFunctionCode.__init__ def __init__(self, gexp, scopes, class_name, mod): self.scopes = scopes self.scope = scopes[gexp] self.__super_init(gexp, scopes, 1, class_name, mod) self.graph.setFreeVars(self.scope.get_free_vars()) self.graph.setCellVars(self.scope.get_cell_vars()) self.graph.setFlag(CO_GENERATOR) class AbstractClassCode: def __init__(self, klass, scopes, module): self.class_name = klass.name self.module = module self.graph = pyassem.PyFlowGraph(klass.name, klass.filename, optimized=0, klass=1) self.super_init() lnf = walk(klass.code, self.NameFinder(), verbose=0) self.locals.push(lnf.getLocals()) self.graph.setFlag(CO_NEWLOCALS) if klass.doc: self.setDocstring(klass.doc) def get_module(self): return self.module def finish(self): self.graph.startExitBlock() self.emit('LOAD_LOCALS') self.emit('RETURN_VALUE') class ClassCodeGenerator(NestedScopeMixin, AbstractClassCode, CodeGenerator): super_init = CodeGenerator.__init__ scopes = None __super_init = AbstractClassCode.__init__ def __init__(self, klass, scopes, module): self.scopes = scopes self.scope = scopes[klass] self.__super_init(klass, scopes, module) self.graph.setFreeVars(self.scope.get_free_vars()) self.graph.setCellVars(self.scope.get_cell_vars()) self.set_lineno(klass) self.emit("LOAD_GLOBAL", "__name__") self.storeName("__module__") if klass.doc: self.emit("LOAD_CONST", klass.doc) self.storeName('__doc__') def generateArgList(arglist): """Generate an arg list marking TupleArgs""" args = [] extra = [] count = 0 for i in range(len(arglist)): elt = arglist[i] if isinstance(elt, str): args.append(elt) elif isinstance(elt, tuple): args.append(TupleArg(i * 2, elt)) extra.extend(misc.flatten(elt)) count = count + 1 else: raise ValueError, "unexpect argument type:", elt return args + extra, count def findOp(node): """Find the op (DELETE, LOAD, STORE) in an AssTuple tree""" v = OpFinder() walk(node, v, verbose=0) return v.op class OpFinder: def __init__(self): self.op = None def visitAssName(self, node): if self.op is None: self.op = node.flags elif self.op != node.flags: raise ValueError, "mixed ops in stmt" visitAssAttr = visitAssName visitSubscript = visitAssName class Delegator: """Base class to support delegation for augmented assignment nodes To generator code for augmented assignments, we use the following wrapper classes. In visitAugAssign, the left-hand expression node is visited twice. The first time the visit uses the normal method for that node . The second time the visit uses a different method that generates the appropriate code to perform the assignment. These delegator classes wrap the original AST nodes in order to support the variant visit methods. """ def __init__(self, obj): self.obj = obj def __getattr__(self, attr): return getattr(self.obj, attr) class AugGetattr(Delegator): pass class AugName(Delegator): pass class AugSlice(Delegator): pass class AugSubscript(Delegator): pass wrapper = { ast.Getattr: AugGetattr, ast.Name: AugName, ast.Slice: AugSlice, ast.Subscript: AugSubscript, } def wrap_aug(node): return wrapper[node.__class__](node) if __name__ == "__main__": for file in sys.argv[1:]: compileFile(file) PK’[<›ÿÿ __init__.pycnuW+A„¶Ñò §ÚêLc@sidZddklZedddƒ[ddklZlZddklZddkl Z l Z d S( sÞPackage for parsing and compiling Python source code There are several functions defined at the top level that are imported from modules contained in the package. parse(buf, mode="exec") -> AST Converts a string containing Python source code to an abstract syntax tree (AST). The AST is defined in compiler.ast. parseFile(path) -> AST The same as parse(open(path)) walk(ast, visitor, verbose=None) Does a pre-order walk over the ast using the visitor instance. See compiler.visitor for details. compile(source, filename, mode, flags=None, dont_inherit=None) Returns a code object. A replacement for the builtin compile() function. compileFile(filename) Generates a .pyc file by compiling filename. iÿÿÿÿ(twarnpy3ks3the compiler package has been removed in Python 3.0t stackleveli(tparset parseFile(twalk(tcompilet compileFileN( t__doc__twarningsRtcompiler.transformerRRtcompiler.visitorRtcompiler.pycodegenRR(((s)/usr/lib64/python2.6/compiler/__init__.pyts PK’[0~øF88 visitor.pynuW+A„¶PK’[G8ou¢É¢Értransformer.pynuW+A„¶PK’[—Ž‘‘RÙast.pyonuW+A„¶PK’[l1I~´´ èconsts.pycnuW+A„¶PK’[2Ôee ëfuture.pynuW+A„¶PK’[]·7[8[8 ¦òsymbols.pynuW+A„¶PK’[ °þ¶´´ ;+consts.pynuW+A„¶PK’[ˆŸ|MÔÙÔÙ (-pycodegen.pycnuW+A„¶PK’[Ã!~(m(m 9pyassem.pycnuW+A„¶PK’[â.@\\ œtsyntax.pyonuW+A„¶PK’[Ln&$2|misc.pynuW+A„¶PK’[l1I~´´ kƒconsts.pyonuW+A„¶PK’[s"Á=¢ ¢ Y†future.pyonuW+A„¶PK’[ÆN««5’misc.pycnuW+A„¶PK’[)¥ƒø‹ø‹¡ast.pynuW+A„¶PK’[f<ß5ù×ù× F-pycodegen.pyonuW+A„¶PK’[s"Á=¢ ¢ |future.pycnuW+A„¶PK’[—Ž‘‘Xast.pycnuW+A„¶PK’[ãþÄçç  __init__.pynuW+A„¶PK’[,®:ç¸ç¸B$transformer.pycnuW+A„¶PK’[ÆN««hÝmisc.pyonuW+A„¶PK’[<›ÿÿ Kì__init__.pyonuW+A„¶PK’[ž&6b)f)f †ñpyassem.pynuW+A„¶PK’[ákþï²²éWtransformer.pyonuW+A„¶PK’[ûÆÁ@¤¤ / syntax.pynuW+A„¶PK’[÷1Pww  visitor.pycnuW+A„¶PK’[C¶ ž]k]k ¾ pyassem.pyonuW+A„¶PK’[â.@\\ VŒsyntax.pycnuW+A„¶PK’[^ë7ú©E©E ì“symbols.pycnuW+A„¶PK’[„Ø8…E…E ÐÙsymbols.pyonuW+A„¶PK’[÷1Pww  visitor.pyonuW+A„¶PK’[öúF—ý·ý· B0 pycodegen.pynuW+A„¶PK’[<›ÿÿ {è __init__.pycnuW+A„¶PK!!— ¶í