Ñò
ïžòKc           @   sö  d  d k  Z  d  d k Z d  d k Z d  d k Z d  d k Z d  d k l Z d  d k l Z l	 Z	 l
 Z
 l Z d  d k l Z l Z l Z l Z d  d k l Z l Z l Z l Z d  d k l Z l Z l Z l Z l Z l Z l Z l Z l Z d  d k l Z y e i  d Z! Wn e" j
 o d	 Z! n Xh d
 d d f 6d d	 d f 6d d d	 f 6d d	 d	 f 6Z# d	 Z$ d Z% d Z& d Z' d d „ Z( e) e) d „ Z* d f  d „  ƒ  YZ+ d e+ f d „  ƒ  YZ, d e+ f d „  ƒ  YZ- d e+ f d „  ƒ  YZ. d f  d „  ƒ  YZ/ d „  Z0 d f  d „  ƒ  YZ1 d  f  d! „  ƒ  YZ2 d" e2 e1 f d# „  ƒ  YZ3 d$ e2 e1 f d% „  ƒ  YZ4 d& e2 e1 f d' „  ƒ  YZ5 d( f  d) „  ƒ  YZ6 d* e2 e6 e1 f d+ „  ƒ  YZ7 d, e2 e6 e1 f d- „  ƒ  YZ8 d. f  d/ „  ƒ  YZ9 d0 e2 e9 e1 f d1 „  ƒ  YZ: d2 „  Z; d3 „  Z< d4 f  d5 „  ƒ  YZ= d6 f  d7 „  ƒ  YZ> d8 e> f d9 „  ƒ  YZ? d: e> f d; „  ƒ  YZ@ d< e> f d= „  ƒ  YZA d> e> f d? „  ƒ  YZB h e? e iC 6e@ e iD 6eA e iE 6eB e iF 6ZG d@ „  ZH eI dA j o& x e iJ d	 D] ZK e( eK ƒ qÚWn d S(B   iÿÿÿÿN(   t   StringIO(   t   astt   parset   walkt   syntax(   t   pyassemt   misct   futuret   symbols(   t   SC_LOCALt	   SC_GLOBALt   SC_FREEt   SC_CELL(	   t
   CO_VARARGSt   CO_VARKEYWORDSt   CO_NEWLOCALSt	   CO_NESTEDt   CO_GENERATORt   CO_FUTURE_DIVISIONt   CO_FUTURE_ABSIMPORTt   CO_FUTURE_WITH_STATEMENTt   CO_FUTURE_PRINT_FUNCTION(   t   TupleArgi    i   t   CALL_FUNCTIONt   CALL_FUNCTION_VARt   CALL_FUNCTION_KWt   CALL_FUNCTION_VAR_KWi   i   i   c         C   sŒ   t  |  d ƒ } | i ƒ  } | i ƒ  t | |  ƒ } y | i | ƒ Wn t j
 o
 ‚  n, Xt  |  d d ƒ } | i | ƒ | i ƒ  d  S(   Nt   Ut   ct   wb(   t   opent   readt   closet   Modulet   compilet   SyntaxErrort   dump(   t   filenamet   displayt   ft   buft   mod(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   compileFile$   s    
c         C   s¤   | d j	 p | d j	 o t d ‚ n | d j o t |  | ƒ } nM | d j o t |  | ƒ } n- | d j o t |  | ƒ } n t d ƒ ‚ | i ƒ  | i S(   s*   Replacement for builtin compile() functions   not implemented yett   singlet   exect   evals6   compile() 3rd arg must be 'exec' or 'eval' or 'single'N(   t   Nonet   RuntimeErrort   InteractiveR!   t
   Expressiont
   ValueErrorR"   t   code(   t   sourceR%   t   modet   flagst   dont_inheritt   gen(    (    s(   scripts/common/Lib/compiler/pycodegen.pyR"   2   s    
t   AbstractCompileModec           B   s2   e  Z d Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  | |  _ d  |  _ d  S(   N(   R4   R%   R.   R3   (   t   selfR4   R%   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   __init__G   s    		c         C   s9   t  |  i |  i ƒ } t i |  i | ƒ t i | ƒ | S(   N(   R   R4   R5   R   t   set_filenameR%   R   t   check(   R:   t   tree(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt	   _get_treeL   s    c         C   s   d  S(   N(    (   R:   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR"   R   s    c         C   s   |  i  S(   N(   R3   (   R:   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   getCodeU   s    N(   t   __name__t
   __module__R.   R5   R;   R?   R"   R@   (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR9   C   s
   			R1   c           B   s   e  Z d  Z d „  Z RS(   R-   c         C   s+   |  i  ƒ  } t | ƒ } | i ƒ  |  _ d  S(   N(   R?   t   ExpressionCodeGeneratorR@   R3   (   R:   R>   R8   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR"   \   s    (   RA   RB   R5   R"   (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR1   X   s   R0   c           B   s   e  Z d  Z d „  Z RS(   R+   c         C   s+   |  i  ƒ  } t | ƒ } | i ƒ  |  _ d  S(   N(   R?   t   InteractiveCodeGeneratorR@   R3   (   R:   R>   R8   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR"   e   s    (   RA   RB   R5   R"   (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR0   a   s   R!   c           B   s8   e  Z d  Z d d „ Z d „  Z e i ƒ  Z d „  Z RS(   R,   i    c         C   sP   |  i  ƒ  } t | ƒ } | o d d  k } | i | ƒ GHn | i ƒ  |  _ d  S(   Niÿÿÿÿ(   R?   t   ModuleCodeGeneratort   pprintR@   R3   (   R:   R&   R>   R8   RF   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR"   n   s    c         C   s*   | i  |  i ƒ  ƒ t i |  i | ƒ d  S(   N(   t   writet   getPycHeadert   marshalR$   R3   (   R:   R'   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR$   v   s    c         C   s2   t  i i |  i ƒ } t i d | ƒ } |  i | S(   Ns   <i(   t   ost   patht   getmtimeR%   t   structt   packt   MAGIC(   R:   t   mtime(    (    s(   scripts/common/Lib/compiler/pycodegen.pyRH   |   s    (	   RA   RB   R5   R"   R$   t   impt	   get_magicRO   RH   (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR!   j   s
   	t   LocalNameFinderc           B   sk   e  Z d  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z RS(   s   Find local names in scopec         C   sC   t  i ƒ  |  _ t  i ƒ  |  _ x | D] } |  i i | ƒ q% Wd  S(   N(   R   t   Sett   namest   globalst   add(   R:   RU   t   name(    (    s(   scripts/common/Lib/compiler/pycodegen.pyR;   ‡   s
     c         C   sH   x> |  i  i ƒ  D]- } |  i i | ƒ o |  i i | ƒ q q W|  i S(   N(   RV   t   elementsRU   t   has_eltt   remove(   R:   t   elt(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt	   getLocals�   s
     c         C   s   d  S(   N(    (   R:   t   node(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt	   visitDict•   s    c         C   s(   x! | i  D] } |  i i | ƒ q
 Wd  S(   N(   RU   RV   RW   (   R:   R^   RX   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitGlobal˜   s    
 c         C   s   |  i  i | i ƒ d  S(   N(   RU   RW   RX   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitFunctionœ   s    c         C   s   d  S(   N(    (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitLambdaŸ   s    c         C   s5   x. | i  D]# \ } } |  i  i | p | ƒ q
 Wd  S(   N(   RU   RW   (   R:   R^   RX   t   alias(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitImport¢   s    
 c         C   s5   x. | i  D]# \ } } |  i  i | p | ƒ q
 Wd  S(   N(   RU   RW   (   R:   R^   RX   Rc   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt	   visitFrom¦   s    
 c         C   s   |  i  i | i ƒ d  S(   N(   RU   RW   RX   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt
   visitClassª   s    c         C   s   |  i  i | i ƒ d  S(   N(   RU   RW   RX   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitAssName­   s    (    (   RA   RB   t   __doc__R;   R]   R_   R`   Ra   Rb   Rd   Re   Rf   Rg   (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRS   …   s   								c         C   s*   t  |  t i ƒ o |  i p d Sn d S(   Ni   i    (   t
   isinstanceR   t   Constt   value(   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   is_constant_false°   s    
	t   CodeGeneratorc           B   sB  e  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 „  Z d „  Z d „  Z e d „ Z e Z d Z d Z d „  Z d „  Z d „  Z d „  Z d 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# „  Z. d$ „  Z/ d% „  Z0 d& „  Z1 d' „  Z2 d( „  Z3 d) „  Z4 d* „  Z5 d+ „  Z6 d, „  Z7 d Z8 d- „  Z9 d. „  Z: d/ „  Z; d0 „  Z< d1 „  Z= d2 „  Z> d3 „  Z? d4 „  Z@ d5 „  ZA d6 „  ZB d7 „  ZC d8 „  ZD d9 „  ZE d: „  ZF d; d< „ ZG eH d= j o eG ZI eG ZJ n d> „  ZI d? „  ZJ d@ „  ZK h dA dB 6dC dD 6dE dF 6dG dH 6dI dJ 6dK dL 6dM dN 6dO dP 6dQ dR 6dS dT 6dU dV 6dW dX 6ZL dY „  ZM dZ „  ZN d[ „  ZO d\ „  ZP d] „  ZQ d^ „  ZR d d_ „ ZS d` „  ZT da „  ZU db „  ZV d dc „ ZW d dd „ ZX de „  ZY df „  ZZ dg „  Z[ dh „  Z\ di „  Z] dj „  Z^ dk „  Z_ dl „  Z` dm „  Za dn „  Zb do „  Zc dp „  Zd dq „  Ze dr „  Zf ds „  Zg dt „  Zh du „  Zi dv „  Zj dw „  Zk dx „  Zl dy „  Zm dz „  Zn d{ „  Zo d| „  Zp d} „  Zq d~ „  Zr RS(€   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.
    i    c         C   s  |  i  d  j o |  i ƒ  d |  i _  n |  i ƒ  t i ƒ  |  _ t i ƒ  |  _ d  |  _	 |  i
 ƒ  d |  _ |  i ƒ  i } x› | D]“ } | d j o |  i i t ƒ d |  _ q„ | d j o |  i i t ƒ q„ | d j o |  i i t ƒ q„ | d j o |  i i t ƒ q„ q„ Wd  S(   Ni   t   BINARY_DIVIDEt   divisiont   BINARY_TRUE_DIVIDEt   absolute_importt   with_statementt   print_function(   t   _CodeGenerator__initializedR.   t	   initClasst	   __class__t
   checkClassR   t   Stackt   localst   setupst   last_linenot   _setupGraphDelegationt   _div_opt
   get_modulet   futurest   grapht   setFlagR   R   R   R   (   R:   R   t   feature(    (    s(   scripts/common/Lib/compiler/pycodegen.pyR;   È   s*    

	
	 c         C   s   d S(   s)   This method is called once for each classN(    (   R:   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRu   à   s    c         C   s•   y` t  |  d ƒ p t ‚ t |  d ƒ p t ‚ t |  d ƒ p t ‚ t |  d ƒ p t ‚ Wn. t j
 o" } d |  i i } t | ‚ n Xd S(   s*   Verify that class is constructed correctlyR€   t
   NameFindert   FunctionGent   ClassGens   Bad class construction for %sN(   t   hasattrt   AssertionErrort   getattrRv   RA   (   R:   t   msgt   intro(    (    s(   scripts/common/Lib/compiler/pycodegen.pyRw   ã   s    c         C   sO   |  i  i |  _ |  i  i |  _ |  i  i |  _ |  i  i |  _ |  i  i |  _ d  S(   N(   R€   t   emitt   newBlockt
   startBlockt	   nextBlockt   setDocstring(   R:   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR|   î   s
    c         C   s   |  i  i ƒ  S(   s   Return a code object(   R€   R@   (   R:   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR@   õ   s    c         C   s,   |  i  d  j	 o t i | |  i  ƒ S| Sd  S(   N(   t
   class_nameR.   R   t   mangle(   R:   RX   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR‘   ù   s    c         C   s    t  i ƒ  } t | | ƒ | i S(   N(   R   t   SymbolVisitorR   t   scopes(   R:   R>   t   s(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   parseSymbolsÿ   s    c         C   s   t  d ‚ d  S(   Ns#   should be implemented by subclasses(   R/   (   R:   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR~     s    c         C   s   |  i  i ƒ  i | ƒ S(   N(   Ry   t   topRZ   (   R:   RX   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   isLocalName	  s    c         C   s   |  i  d | ƒ d  S(   Nt   STORE(   t   _nameOp(   R:   RX   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt	   storeName  s    c         C   s   |  i  d | ƒ d  S(   Nt   LOAD(   R™   (   R:   RX   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   loadName  s    c         C   s   |  i  d | ƒ d  S(   Nt   DELETE(   R™   (   R:   RX   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   delName  s    c         C   sø   |  i  | ƒ } |  i i | ƒ } | t j o: |  i p |  i | d | ƒ qô |  i | d | ƒ n� | t j o: |  i p |  i | d | ƒ qô |  i | d | ƒ nF | t j p | t j o |  i | d | ƒ n t	 d | | f ‚ d  S(   Nt   _NAMEt   _FASTt   _GLOBALt   _DEREFs    unsupported scope for var %s: %d(
   R‘   t   scopet
   check_nameR	   t	   optimizedR‹   R
   R   R   R/   (   R:   t   prefixRX   R£   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR™     s    

c         C   s:   |  i  o |  i | d | ƒ n |  i | d | ƒ d S(   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(   scripts/common/Lib/compiler/pycodegen.pyt   _implicitNameOp(  s    
c         C   sX   t  | d d ƒ } | d j	 o5 | |  i j p | o |  i d | ƒ | |  _ t St S(   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.
        t   linenot
   SET_LINENON(   Rˆ   R.   R{   R‹   t   Truet   False(   R:   R^   t   forceR¨   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt
   set_lineno9  s    	c         C   sÅ   |  i  | ƒ |  _ |  i | |  _ |  i d d ƒ | i o$ |  i d | i ƒ |  i d ƒ n t | i |  i ƒ  d d ƒ} |  i	 i
 | i ƒ  ƒ |  i | i ƒ |  i d d  ƒ |  i d ƒ d  S(   NR©   i    t
   LOAD_CONSTRh   t   verboset   RETURN_VALUE(   R•   R“   R£   R‹   t   docRš   R   R^   Rƒ   Ry   t   pushR]   t   visitR.   (   R:   R^   t   lnf(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitModuleW  s    
c         C   sP   |  i  | ƒ |  i | ƒ |  _ |  i | |  _ |  i | i ƒ |  i d ƒ d  S(   NR°   (   R­   R•   R“   R£   R³   R^   R‹   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitExpressiond  s
    c         C   sE   |  i  | d d ƒ| i o |  i | i ƒ n |  i | i ƒ d  S(   Nt   isLambdai    (   t   _visitFuncOrLambdaR±   R�   Rš   RX   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRa   k  s    
c         C   s   |  i  | d d ƒd  S(   NR·   i   (   R¸   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRb   q  s    c         C   s  | oD | i  o: x! | i  i D] } |  i | ƒ q Wt | i  i ƒ } n d } |  i | |  i | |  i |  i ƒ  ƒ } t | i	 | ƒ | i
 ƒ  |  i | ƒ x | i D] } |  i | ƒ qª W|  i | t | i ƒ ƒ x$ t | ƒ D] } |  i d d ƒ qç Wd  S(   Ni    R   i   (   t
   decoratorst   nodesR³   t   lenR„   R“   R�   R~   R   R3   t   finishR­   t   defaultst   _makeClosuret   rangeR‹   (   R:   R^   R·   t	   decoratort   ndecoratorsR8   t   defaultt   i(    (    s(   scripts/common/Lib/compiler/pycodegen.pyR¸   t  s$     

  c         C   sÓ   |  i  | |  i |  i ƒ  ƒ } t | i | ƒ | i ƒ  |  i | ƒ |  i d | i ƒ x | i	 D] } |  i
 | ƒ qb W|  i d t | i	 ƒ ƒ |  i | d ƒ |  i d d ƒ |  i d ƒ |  i | i ƒ d  S(   NR®   t   BUILD_TUPLEi    R   t   BUILD_CLASS(   R…   R“   R~   R   R3   R¼   R­   R‹   RX   t   basesR³   R»   R¾   Rš   (   R:   R^   R8   t   base(    (    s(   scripts/common/Lib/compiler/pycodegen.pyRf   ‡  s    

 c         C   s  |  i  ƒ  } t | i ƒ } x¿ t | ƒ D]± } | i | \ } } t | ƒ o q( n |  i | ƒ |  i | ƒ |  i  ƒ  } |  i d | ƒ |  i ƒ  |  i d ƒ |  i | ƒ |  i d | ƒ |  i	 | ƒ |  i d ƒ q( W| i
 o |  i | i
 ƒ n |  i | ƒ d  S(   Nt   JUMP_IF_FALSEt   POP_TOPt   JUMP_FORWARD(   RŒ   R»   t   testsR¿   Rl   R­   R³   R‹   RŽ   R�   t   else_(   R:   R^   t   endt   numtestsRÃ   t   testt   suitet   nextTest(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitIfš  s(     

c         C   s8  |  i  | ƒ |  i ƒ  } |  i ƒ  } |  i ƒ  } |  i d | ƒ |  i | ƒ |  i i t | f ƒ |  i  | d t ƒ|  i | i	 ƒ |  i d | p | ƒ |  i ƒ  |  i d ƒ |  i | i
 ƒ |  i d | ƒ |  i | ƒ |  i d ƒ |  i d ƒ |  i i ƒ  | i o |  i | i ƒ n |  i | ƒ d  S(   Nt
   SETUP_LOOPR¬   RÈ   RÉ   t   JUMP_ABSOLUTEt	   POP_BLOCK(   R­   RŒ   R‹   RŽ   Rz   R²   t   LOOPRª   R³   RÏ   t   bodyR�   t   popRÌ   (   R:   R^   t   loopRÌ   t   after(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt
   visitWhile°  s*    

c         C   s*  |  i  ƒ  } |  i  ƒ  } |  i  ƒ  } |  i i t | f ƒ |  i | ƒ |  i d | ƒ |  i | i ƒ |  i d ƒ |  i | ƒ |  i | d d ƒ|  i d | ƒ |  i | i	 ƒ |  i | i
 ƒ |  i d | ƒ |  i | ƒ |  i d ƒ |  i i ƒ  | i o |  i | i ƒ n |  i | ƒ d  S(   NRÓ   t   GET_ITERR¬   i   t   FOR_ITERRÔ   RÕ   (   RŒ   Rz   R²   RÖ   R­   R‹   R³   t   listRŽ   t   assignR×   RØ   RÌ   (   R:   R^   t   startt   anchorRÚ   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitForÍ  s(    
c         C   sE   |  i  p t d | i | i f ‚ n |  i | ƒ |  i d ƒ d  S(   Ns   'break' outside loop (%s, %d)t
   BREAK_LOOP(   Rz   R#   R%   R¨   R­   R‹   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt
   visitBreakå  s
    
c         C   sj  |  i  p t d | i | i f ‚ n |  i  i ƒ  \ } } | t j o+ |  i | ƒ |  i d | ƒ |  i ƒ  nó | t	 j p | t
 j o¨ |  i | ƒ t |  i  ƒ } xA | d j o3 | d } |  i  | \ } } | t j o Pq­ q­ W| t j o t d | i | i f ‚ n |  i d | ƒ |  i ƒ  n1 | t j o# d } t | | i | i f ‚ n d  S(   Ns    'continue' outside loop (%s, %d)RÔ   i    i   t   CONTINUE_LOOPs7   'continue' not allowed inside 'finally' clause (%s, %d)(   Rz   R#   R%   R¨   R–   RÖ   R­   R‹   RŽ   t   EXCEPTt   TRY_FINALLYR»   t   END_FINALLY(   R:   R^   t   kindt   blockR–   t
   loop_blockR‰   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitContinueì  s2    
 

c         C   s}   |  i  ƒ  } xI | i d  D]: } |  i | ƒ |  i | | ƒ |  i ƒ  |  i d ƒ q W|  i | i d ƒ |  i | ƒ d  S(   NiÿÿÿÿRÉ   (   RŒ   Rº   R³   R‹   RŽ   (   R:   R^   t   jumpRÍ   t   child(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt	   visitTest  s     
c         C   s   |  i  | d ƒ d  S(   NRÈ   (   Rï   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitAnd  s    c         C   s   |  i  | d ƒ d  S(   Nt   JUMP_IF_TRUE(   Rï   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitOr  s    c         C   s    |  i  ƒ  } |  i  ƒ  } |  i | i ƒ |  i d | ƒ |  i d ƒ |  i | i ƒ |  i d | ƒ |  i | ƒ |  i d ƒ |  i | i ƒ |  i | ƒ d  S(   NRÈ   RÉ   RÊ   (   RŒ   R³   RÏ   R‹   t   thenRŽ   RÌ   (   R:   R^   t   endblockt	   elseblock(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt
   visitIfExp  s    c         C   sD  |  i  | i ƒ |  i ƒ  } xy | i d  D]j \ } } |  i  | ƒ |  i d ƒ |  i d ƒ |  i d | ƒ |  i d | ƒ |  i ƒ  |  i d ƒ q* W| i o4 | i d \ } } |  i  | ƒ |  i d | ƒ n t | i ƒ d j oT |  i ƒ  } |  i d | ƒ |  i | ƒ |  i d	 ƒ |  i d ƒ |  i | ƒ n d  S(
   Niÿÿÿÿt   DUP_TOPt	   ROT_THREEt
   COMPARE_OPRÈ   RÉ   i   RÊ   t   ROT_TWO(   R³   t   exprRŒ   t   opsR‹   RŽ   R»   R�   (   R:   R^   t   cleanupt   opR3   RÍ   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitCompare$  s,     

c         C   sÚ  |  i  | ƒ d |  i } |  i d |  _ |  i d d ƒ |  i d ƒ |  i d | ƒ g  } x¤ t t t | i ƒ ƒ | i ƒ D]� \ } } |  i | ƒ \ } } d  } x> | i
 D]3 }	 | d  j o |  i ƒ  } n |  i |	 | ƒ q° W| i d | | | f ƒ q W|  i d | ƒ |  i | i ƒ |  i d ƒ x‚ | D]z \ } } } | oG |  i ƒ  }
 |  i d	 |
 ƒ |  i | ƒ |  i d
 ƒ |  i |
 ƒ n |  i d | ƒ |  i | ƒ q8W|  i d | ƒ |  i d |  _ d  S(   Ns   $list%di   t
   BUILD_LISTi    R÷   R˜   R›   t   LIST_APPENDRÊ   RÉ   RÔ   R�   (   R­   t   _CodeGenerator__list_countR‹   R§   t   zipR¿   R»   t   qualsR³   R.   t   ifsRŒ   t   insertRû   R�   RŽ   (   R:   R^   t   tmpnamet   stackRÃ   t   for_Rà   Rá   t   contt   if_t   skip_one(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitListComp?  s@    " 
  c         C   s‰   |  i  ƒ  } |  i  ƒ  } |  i | i ƒ |  i d ƒ |  i | ƒ |  i | d t ƒ|  i d | ƒ |  i ƒ  |  i | i ƒ | | f S(   NRÜ   R¬   RÝ   (   RŒ   R³   RÞ   R‹   RŽ   R­   Rª   Rß   (   R:   R^   Rà   Rá   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitListCompForc  s    
c         C   sN   |  i  | d t ƒ|  i | i ƒ |  i d | ƒ |  i ƒ  |  i d ƒ d  S(   NR¬   RÈ   RÉ   (   R­   Rª   R³   RÏ   R‹   RŒ   (   R:   R^   t   branch(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitListCompIfp  s
    
c         C   s•   | i  i ƒ  } | o[ x | D] } |  i d | ƒ q W|  i d t | ƒ ƒ |  i d | ƒ |  i d | ƒ n! |  i d | ƒ |  i d | ƒ d  S(   Nt   LOAD_CLOSURERÄ   R®   t   MAKE_CLOSUREt   MAKE_FUNCTION(   R£   t   get_free_varsR‹   R»   (   R:   R8   t   argst   freesRX   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR¾   w  s     c         C   s“   t  | |  i |  i |  i ƒ  ƒ } t | i | ƒ | i ƒ  |  i | ƒ |  i | d ƒ |  i	 | i i
 d i ƒ |  i d ƒ |  i d d ƒ d  S(   Ni    RÜ   R   i   (   t   GenExprCodeGeneratorR“   R�   R~   R   R3   R¼   R­   R¾   R³   R  t   iterR‹   (   R:   R^   R8   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitGenExprƒ  s    
c      	   C   s­  |  i  | ƒ g  } xª t t t | i ƒ ƒ | i ƒ D]‡ \ } } |  i | ƒ \ } } } d  } x> | i D]3 }	 | d  j o |  i ƒ  } n |  i |	 | ƒ qi W| i	 d | | | | f ƒ q5 W|  i | i
 ƒ |  i d ƒ |  i d ƒ x¬ | D]¤ \ } } } } | oG |  i ƒ  }
 |  i d |
 ƒ |  i | ƒ |  i d ƒ |  i |
 ƒ n |  i d | ƒ |  i | ƒ |  i d ƒ |  i i ƒ  |  i | ƒ qñ W|  i d d  ƒ d  S(   Ni    t   YIELD_VALUERÉ   RÊ   RÔ   RÕ   R®   (   R­   R  R¿   R»   R  R³   R.   R  RŒ   R  Rû   R‹   R�   RŽ   Rz   RØ   (   R:   R^   R  RÃ   R	  Rà   Rá   RÍ   R
  R  R  (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitGenExprInner�  s:    " 
   c         C   sÙ   |  i  ƒ  } |  i  ƒ  } |  i  ƒ  } |  i i t | f ƒ |  i d | ƒ | i o |  i d ƒ n |  i | i ƒ |  i d ƒ |  i	 | ƒ |  i
 | d t ƒ|  i d | ƒ |  i	 ƒ  |  i | i ƒ | | | f S(   NRÓ   s   .0RÜ   R¬   RÝ   (   RŒ   Rz   R²   RÖ   R‹   t
   is_outmostRœ   R³   R  RŽ   R­   Rª   Rß   (   R:   R^   Rà   Rá   RÍ   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitGenExprFor°  s    

c         C   sN   |  i  | d t ƒ|  i | i ƒ |  i d | ƒ |  i ƒ  |  i d ƒ d  S(   NR¬   RÈ   RÉ   (   R­   Rª   R³   RÏ   R‹   RŒ   (   R:   R^   R  (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitGenExprIfÅ  s
    
c         C   sÆ   |  i  ƒ  } |  i | ƒ |  i ƒ  |  i | i ƒ |  i d | ƒ |  i ƒ  |  i d ƒ |  i d d ƒ | i o$ |  i | i ƒ |  i d d ƒ n |  i d d ƒ |  i | ƒ |  i d ƒ d  S(   NRñ   RÉ   t   LOAD_GLOBALR‡   t   RAISE_VARARGSi   i   (   RŒ   R­   RŽ   R³   RÏ   R‹   t   fail(   R:   R^   RÍ   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitAssertÎ  s    


c         C   sŸ   |  i  | ƒ d } | i o |  i | i ƒ | d } n | i o |  i | i ƒ | d } n | i o |  i | i ƒ | d } n |  i d | ƒ d  S(   Ni    i   R   (   R­   t   expr1R³   t   expr2t   expr3R‹   (   R:   R^   t   n(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt
   visitRaiseå  s    


c         C   sh  |  i  ƒ  } |  i  ƒ  } |  i  ƒ  } | i o |  i  ƒ  } n | } |  i | ƒ |  i d | ƒ |  i | ƒ |  i i t | f ƒ |  i | i	 ƒ |  i d ƒ |  i i
 ƒ  |  i d | ƒ |  i | ƒ t | i ƒ d } x>t t | i ƒ ƒ D]'} | i | \ } }	 } |  i | ƒ | oa |  i d ƒ |  i | ƒ |  i d d ƒ |  i  ƒ  }
 |  i d |
 ƒ |  i ƒ  |  i d	 ƒ n |  i d	 ƒ |	 o |  i |	 ƒ n |  i d	 ƒ |  i d	 ƒ |  i | ƒ |  i d | ƒ | o |  i |
 ƒ n |  i ƒ  | o |  i d	 ƒ qô qô W|  i d
 ƒ | i o! |  i | ƒ |  i | i ƒ n |  i | ƒ d  S(   Nt   SETUP_EXCEPTRÕ   RÊ   i   R÷   Rù   s   exception matchRÈ   RÉ   Rè   (   RŒ   RÌ   R­   R‹   RŽ   Rz   R²   Ræ   R³   R×   RØ   R�   R»   t   handlersR¿   (   R:   R^   R×   R)  RÍ   t   lElset   lastRÃ   Rû   t   targett   next(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitTryExceptó  sZ    
 


c         C   sã   |  i  ƒ  } |  i  ƒ  } |  i | ƒ |  i d | ƒ |  i | ƒ |  i i t | f ƒ |  i | i ƒ |  i d ƒ |  i i	 ƒ  |  i d d  ƒ |  i | ƒ |  i i t | f ƒ |  i | i ƒ |  i d ƒ |  i i	 ƒ  d  S(   Nt   SETUP_FINALLYRÕ   R®   Rè   (   RŒ   R­   R‹   RŽ   Rz   R²   Rç   R³   R×   RØ   R.   Rè   t   final(   R:   R^   R×   R0  (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitTryFinally%  s    c         C   sÚ  |  i  ƒ  } |  i  ƒ  } d |  i } |  i d 7_ |  i | ƒ |  i | i ƒ |  i d ƒ |  i d d ƒ |  i d ƒ |  i d d ƒ |  i d d	 ƒ | i d  j o |  i d
 ƒ n |  i d | ƒ |  i d | ƒ |  i	 | ƒ |  i
 i t | f ƒ | i d  j	 o4 |  i d | ƒ |  i d | ƒ |  i | i ƒ n |  i | i ƒ |  i d ƒ |  i
 i ƒ  |  i d d  ƒ |  i	 | ƒ |  i
 i t | f ƒ |  i d ƒ |  i d ƒ |  i
 i ƒ  |  i d 8_ d  S(   Ns   $value%di   R÷   t	   LOAD_ATTRt   __exit__Rú   t	   __enter__R   i    RÉ   R˜   R/  R›   R�   RÕ   R®   t   WITH_CLEANUPRè   (   RŒ   t   _CodeGenerator__with_countR­   R³   Rû   R‹   t   varsR.   R§   RŽ   Rz   R²   Rç   R×   RØ   Rè   (   R:   R^   R×   R0  t   valuevar(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt	   visitWith8  s>    c         C   s.   |  i  | ƒ |  i | i ƒ |  i d ƒ d  S(   NRÉ   (   R­   R³   Rû   R‹   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitDiscard\  s    c         C   s   |  i  d | i ƒ d  S(   NR®   (   R‹   Rk   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt
   visitConsta  s    c         C   s'   |  i  d | i ƒ |  i | i ƒ d  S(   NR®   (   R‹   RX   R³   Rû   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitKeywordd  s    c         C   s   d  S(   N(    (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR`   h  s    c         C   s!   |  i  | ƒ |  i | i ƒ d  S(   N(   R­   Rœ   RX   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt	   visitNamel  s    c         C   s   |  i  | ƒ d  S(   N(   R­   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt	   visitPassp  s    c         C   sÑ   |  i  | ƒ |  i i t ƒ o d n d } x� | i D]’ \ } } t d j o$ |  i d | ƒ |  i d d  ƒ n |  i d | ƒ | i d ƒ d } | o |  i	 | ƒ |  i
 | ƒ q7 |  i
 | ƒ q7 Wd  S(   Ni    iÿÿÿÿi   R®   t   IMPORT_NAMEt   .(   R­   R€   t	   checkFlagR   RU   t   VERSIONR‹   R.   t   splitt   _resolveDotsRš   (   R:   R^   t   levelRX   Rc   R)   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRd   s  s     
 c         C   sb  |  i  | ƒ | i } | d j o |  i i t ƒ o
 d } n t d „  | i ƒ } t d j o* |  i d | ƒ |  i d t	 | ƒ ƒ n |  i d | i
 ƒ x® | i D]£ \ } } t d j oz | d j o8 d |  _ |  i d ƒ t | i ƒ d j p t ‚ d  S|  i d	 | ƒ |  i | ƒ |  i | p | ƒ qª |  i d	 | ƒ qª W|  i d
 ƒ d  S(   Ni    iÿÿÿÿc         S   s   |  \ } } | S(    (    (   t   .0RX   Rc   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   <lambda>‡  s    i   R®   R?  t   *t   IMPORT_STARt   IMPORT_FROMRÉ   (   R­   RE  R€   RA  R   t   mapRU   RB  R‹   t   tuplet   modnamet	   namespaceR»   R‡   RD  Rš   (   R:   R^   RE  t   fromlistRX   Rc   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRe   ‚  s,    	!

 	c         C   sP   | i  d ƒ } t | ƒ d j o d  Sx" | d D] } |  i d | ƒ q2 Wd  S(   NR@  i   R2  (   RC  R»   R‹   (   R:   RX   t   eltsR\   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRD  œ  s     c         C   s0   |  i  | i ƒ |  i d |  i | i ƒ ƒ d  S(   NR2  (   R³   Rû   R‹   R‘   t   attrname(   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitGetattr£  s    c         C   s£   |  i  | ƒ |  i | i ƒ t | i ƒ d } xl t t | i ƒ ƒ D]U } | i | } | | j  o |  i d ƒ n t | t i	 ƒ o |  i | ƒ qF qF Wd  S(   Ni   R÷   (
   R­   R³   Rû   R»   Rº   R¿   R‹   Ri   R   t   Node(   R:   R^   t   dupsRÃ   R\   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitAssign©  s     c         C   se   | i  d j o |  i | i ƒ n> | i  d j o! |  i | ƒ |  i | i ƒ n d G| i  GHd  S(   Nt	   OP_ASSIGNt	   OP_DELETEt   oops(   R6   Rš   RX   R­   Rž   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRg   ´  s    c         C   s…   |  i  | i ƒ | i d j o  |  i d |  i | i ƒ ƒ nB | i d j o  |  i d |  i | i ƒ ƒ n d G| i GH| GHd  S(   NRV  t
   STORE_ATTRRW  t   DELETE_ATTRs   warning: unexpected flags:(   R³   Rû   R6   R‹   R‘   RQ  (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitAssAttr½  s      t   UNPACK_SEQUENCEc         C   sU   t  | ƒ d j o |  i | t | i ƒ ƒ n x | i D] } |  i | ƒ q: Wd  S(   NRW  (   t   findOpR‹   R»   Rº   R³   (   R:   R^   Rþ   Rî   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   _visitAssSequenceÇ  s
    
 i   c         C   s   |  i  | d ƒ d  S(   Nt   UNPACK_TUPLE(   R^  (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitAssTupleÑ  s    c         C   s   |  i  | d ƒ d  S(   Nt   UNPACK_LIST(   R^  (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitAssListÔ  s    c         C   sg   |  i  | ƒ t | i ƒ } |  i | d ƒ |  i | i ƒ |  i |  i | i ƒ |  i | d ƒ d  S(   Nt   loadt   store(   R­   t   wrap_augR^   R³   Rû   R‹   t   _augmented_opcodeRþ   (   R:   R^   t   aug_node(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitAugAssignÙ  s    t   INPLACE_ADDs   +=t   INPLACE_SUBTRACTs   -=t   INPLACE_MULTIPLYs   *=t   INPLACE_DIVIDEs   /=t   INPLACE_FLOOR_DIVIDEs   //=t   INPLACE_MODULOs   %=t   INPLACE_POWERs   **=t   INPLACE_RSHIFTs   >>=t   INPLACE_LSHIFTs   <<=t   INPLACE_ANDs   &=t   INPLACE_XORs   ^=t
   INPLACE_ORs   |=c         C   sF   | d j o |  i  | i ƒ n" | d j o |  i | i ƒ n d  S(   NRc  Rd  (   Rœ   RX   Rš   (   R:   R^   R5   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitAugNameð  s    c         C   sˆ   | d j o= |  i  | i ƒ |  i d ƒ |  i d |  i | i ƒ ƒ n; | d j o- |  i d ƒ |  i d |  i | i ƒ ƒ n d  S(   NRc  R÷   R2  Rd  Rú   RY  (   R³   Rû   R‹   R‘   RQ  (   R:   R^   R5   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitAugGetattrö  s     c         C   sÆ   | d j o |  i  | d ƒ n¢ | d j o” d } | i o | d B} n | i o | d B} n | d j o |  i d ƒ n, | d j o |  i d ƒ n |  i d	 ƒ |  i d
 | ƒ n d  S(   NRc  i   Rd  i    i   Rú   i   t   ROT_FOURRø   s   STORE_SLICE+%d(   t
   visitSlicet   lowert   upperR‹   (   R:   R^   R5   t   slice(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitAugSliceÿ  s    

c         C   sP   | d j o |  i  | d ƒ n, | d j o |  i d ƒ |  i d ƒ n d  S(   NRc  i   Rd  Rø   t   STORE_SUBSCR(   t   visitSubscriptR‹   (   R:   R^   R5   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitAugSubscript  s
    c         C   s†   |  i  | i ƒ | i d  j o |  i d d  ƒ n |  i  | i ƒ | i d  j o |  i d ƒ n |  i  | i ƒ |  i d ƒ d  S(   NR®   R÷   t	   EXEC_STMT(   R³   Rû   Ry   R.   R‹   RV   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt	   visitExec  s    c         C   s  d } d } |  i  | ƒ |  i | i ƒ xI | i D]> } |  i | ƒ t | t i ƒ o | d } q3 | d } q3 W| i d  j	 o |  i | i ƒ n | i	 d  j	 o |  i | i	 ƒ n | i d  j	 } | i	 d  j	 } t
 | | f } |  i | | d >| Bƒ d  S(   Ni    i   i   (   R­   R³   R^   R  Ri   R   t   Keywordt	   star_argsR.   t
   dstar_argst   callfunc_opcode_infoR‹   (   R:   R^   t   post   kwt   argt	   have_start
   have_dstart   opcode(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitCallFunc#  s$    
 c         C   sÃ   |  i  | ƒ | i o |  i | i ƒ n xn | i D]c } | i o |  i d ƒ n |  i | ƒ | i o |  i d ƒ |  i d ƒ q5 |  i d ƒ q5 W| i o | o |  i d ƒ n d  S(   NR÷   Rú   t   PRINT_ITEM_TOt
   PRINT_ITEMRÉ   (   R­   t   destR³   Rº   R‹   (   R:   R^   t   newlineRî   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt
   visitPrint7  s    

 

c         C   s?   |  i  | d d ƒ| i o |  i d ƒ n |  i d ƒ d  S(   NR�  i   t   PRINT_NEWLINE_TOt   PRINT_NEWLINE(   R‘  R�  R‹   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitPrintnlG  s    
c         C   s.   |  i  | ƒ |  i | i ƒ |  i d ƒ d  S(   NR°   (   R­   R³   Rk   R‹   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitReturnN  s    c         C   s.   |  i  | ƒ |  i | i ƒ |  i d ƒ d  S(   NR  (   R­   R³   Rk   R‹   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt
   visitYieldS  s    c         C   sB  |  i  | i ƒ d } | i o |  i  | i ƒ | d B} n | i o |  i  | i ƒ | d B} n | oS | d j o |  i d ƒ qÀ | d j o |  i d d ƒ qÀ |  i d d ƒ n | i d j o |  i d | ƒ nZ | i d	 j o |  i d
 | ƒ n5 | i d j o |  i d | ƒ n d G| i GH‚  d  S(   Ni    i   i   R÷   i   t   DUP_TOPXt   OP_APPLYs   SLICE+%dRV  s   STORE_SLICE+%dRW  s   DELETE_SLICE+%ds   weird slice(   R³   Rû   Ry  Rz  R‹   R6   (   R:   R^   t   aug_flagR{  (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRx  Z  s,    

c         C   sæ   |  i  | i ƒ x | i D] } |  i  | ƒ q Wt | i ƒ d j o |  i d t | i ƒ ƒ n | o |  i d d ƒ n | i d j o |  i d ƒ nC | i d j o |  i d ƒ n" | i d	 j o |  i d
 ƒ n d  S(   Ni   RÄ   R—  i   R˜  t   BINARY_SUBSCRRV  R}  RW  t   DELETE_SUBSCR(   R³   Rû   t   subsR»   R‹   R6   (   R:   R^   R™  t   sub(    (    s(   scripts/common/Lib/compiler/pycodegen.pyR~  u  s    
 c         C   s1   |  i  | i ƒ |  i  | i ƒ |  i | ƒ d  S(   N(   R³   t   leftt   rightR‹   (   R:   R^   Rþ   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   binaryOp†  s    c         C   s   |  i  | d ƒ S(   Nt
   BINARY_ADD(   R   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitAdd‹  s    c         C   s   |  i  | d ƒ S(   Nt   BINARY_SUBTRACT(   R   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitSubŽ  s    c         C   s   |  i  | d ƒ S(   Nt   BINARY_MULTIPLY(   R   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitMul‘  s    c         C   s   |  i  | |  i ƒ S(   N(   R   R}   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitDiv”  s    c         C   s   |  i  | d ƒ S(   Nt   BINARY_FLOOR_DIVIDE(   R   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitFloorDiv—  s    c         C   s   |  i  | d ƒ S(   Nt   BINARY_MODULO(   R   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitModš  s    c         C   s   |  i  | d ƒ S(   Nt   BINARY_POWER(   R   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt
   visitPower�  s    c         C   s   |  i  | d ƒ S(   Nt   BINARY_LSHIFT(   R   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitLeftShift   s    c         C   s   |  i  | d ƒ S(   Nt   BINARY_RSHIFT(   R   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitRightShift£  s    c         C   s!   |  i  | i ƒ |  i | ƒ d  S(   N(   R³   Rû   R‹   (   R:   R^   Rþ   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   unaryOp¨  s    c         C   s   |  i  | d ƒ S(   Nt   UNARY_INVERT(   R²  (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitInvert¬  s    c         C   s   |  i  | d ƒ S(   Nt   UNARY_NEGATIVE(   R²  (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitUnarySub¯  s    c         C   s   |  i  | d ƒ S(   Nt   UNARY_POSITIVE(   R²  (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitUnaryAdd²  s    c         C   s   |  i  | d ƒ S(   NR³  (   R²  (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitUnaryInvertµ  s    c         C   s   |  i  | d ƒ S(   Nt	   UNARY_NOT(   R²  (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitNot¸  s    c         C   s   |  i  | d ƒ S(   Nt   UNARY_CONVERT(   R²  (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitBackquote»  s    c         C   sD   |  i  | d ƒ x, | d D]  } |  i  | ƒ |  i | ƒ q Wd  S(   Ni    i   (   R³   R‹   (   R:   Rº   Rþ   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   bitOpÀ  s
     c         C   s   |  i  | i d ƒ S(   Nt
   BINARY_AND(   R¾  Rº   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitBitandÆ  s    c         C   s   |  i  | i d ƒ S(   Nt	   BINARY_OR(   R¾  Rº   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt
   visitBitorÉ  s    c         C   s   |  i  | i d ƒ S(   Nt
   BINARY_XOR(   R¾  Rº   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitBitxorÌ  s    c         C   s   |  i  d t ƒ d  S(   NR®   (   R‹   t   Ellipsis(   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitEllipsisÑ  s    c         C   sK   |  i  | ƒ x | i D] } |  i | ƒ q W|  i d t | i ƒ ƒ d  S(   NRÄ   (   R­   Rº   R³   R‹   R»   (   R:   R^   R\   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt
   visitTupleÔ  s
    
 c         C   sK   |  i  | ƒ x | i D] } |  i | ƒ q W|  i d t | i ƒ ƒ d  S(   NR   (   R­   Rº   R³   R‹   R»   (   R:   R^   R\   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt	   visitListÚ  s
    
 c         C   s>   x | i  D] } |  i | ƒ q
 W|  i d t | i  ƒ ƒ d  S(   Nt   BUILD_SLICE(   Rº   R³   R‹   R»   (   R:   R^   Rî   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   visitSliceobjà  s    
 c         C   s|   |  i  | ƒ |  i d d ƒ xX | i D]M \ } } |  i d ƒ |  i | ƒ |  i | ƒ |  i d ƒ |  i d ƒ q' Wd  S(   Nt	   BUILD_MAPi    R÷   Rø   R}  (   R­   R‹   t   itemsR³   (   R:   R^   t   kt   v(    (    s(   scripts/common/Lib/compiler/pycodegen.pyR_   å  s    
 N(s   RA   RB   Rh   R¥   R.   Rt   R�   R;   Ru   Rw   R|   R@   R‘   R•   R~   R—   Rš   Rœ   Rž   R™   R§   R«   R­   RS   Rƒ   R„   R…   Rµ   R¶   Ra   Rb   R¸   Rf   RÒ   RÛ   Râ   Rä   Rì   Rï   Rð   Rò   Rö   Rÿ   R  R  R  R  R¾   R  R  R  R  R"  R'  R.  R1  R6  R9  R:  R;  R<  R`   R=  R>  Rd   Re   RD  RR  RU  Rg   R[  R^  RB  R`  Rb  Rh  Rf  Ru  Rv  R|  R  R�  RŒ  R‘  R”  R•  R–  Rx  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Ê  R_   (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRm   ¶   sø   																									
					$					!						2		$														

			
																																			t   NestedScopeMixinc           B   s   e  Z d  Z d „  Z RS(   s>   Defines initClass() for nested scoping (Python 2.2-compatible)c         C   s(   t  |  i _ t |  i _ t |  i _ d  S(   N(   RS   Rv   Rƒ   t   FunctionCodeGeneratorR„   t   ClassCodeGeneratorR…   (   R:   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRu   ñ  s    (   RA   RB   Rh   Ru   (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRÏ  ï  s   RE   c           B   s)   e  Z e i Z d Z d  „  Z d „  Z RS(   c         C   sE   t  i d | i ƒ |  _ t i | ƒ |  _ |  i ƒ  t | |  ƒ d  S(   Ns   <module>(	   R   t   PyFlowGraphR%   R€   R   t   find_futuresR   t    _ModuleCodeGenerator__super_initR   (   R:   R>   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR;   û  s    
c         C   s   |  S(   N(    (   R:   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR~     s    N(   RA   RB   Rm   R;   RÔ  R.   R“   R~   (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRE   ö  s   		RC   c           B   s/   e  Z e i Z d Z d Z d  „  Z d „  Z RS(   c         C   s3   t  i d | i ƒ |  _ |  i ƒ  t | |  ƒ d  S(   Ns   <expression>(   R   RÒ  R%   R€   t$   _ExpressionCodeGenerator__super_initR   (   R:   R>   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR;   
  s    
c         C   s   |  S(   N(    (   R:   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR~     s    N(    (	   RA   RB   Rm   R;   RÕ  R.   R“   R   R~   (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRC     s
   		RD   c           B   s8   e  Z e i Z d Z d Z d  „  Z d „  Z d „  Z	 RS(   c         C   sM   t  i d | i ƒ |  _ |  i ƒ  |  i | ƒ t | |  ƒ |  i d ƒ d  S(   Ns   <interactive>R°   (   R   RÒ  R%   R€   t%   _InteractiveCodeGenerator__super_initR­   R   R‹   (   R:   R>   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR;     s
    
c         C   s   |  S(   N(    (   R:   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR~      s    c         C   s!   |  i  | i ƒ |  i d ƒ d  S(   Nt
   PRINT_EXPR(   R³   Rû   R‹   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR:  #  s    N(    (
   RA   RB   Rm   R;   RÖ  R.   R“   R   R~   R:  (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRD     s   			t   AbstractFunctionCodec           B   sG   e  Z d  Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z e Z	 RS(   i   i    c         C   sW  | |  _  | |  _ | o' t } d | i } | i d | _ n
 | i } t | i ƒ \ } }	 t i | | i	 | d d ƒ|  _
 | |  _ |  i ƒ  | o | i o |  i | i ƒ n t | i |  i | ƒ d d ƒ}
 |  i i |
 i ƒ  ƒ | i o |  i
 i t ƒ n | i o |  i
 i t ƒ n |  i | ƒ |	 o |  i | i ƒ n d  S(   Ns   <lambda.%d>i   R¥   R¯   i    (   R�   t   moduleRÐ  t   lambdaCountRX   t   generateArgListt   argnamesR   RÒ  R%   R€   R·   t
   super_initR±   R�   R   R3   Rƒ   Ry   R²   R]   t   varargsR�   R   t   kwargsR   R­   t   generateArgUnpack(   R:   t   funcR“   R·   R�   R)   t   klassRX   R  t   hasTupleArgR´   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR;   -  s.    				
!

c         C   s   |  i  S(   N(   RÙ  (   R:   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR~   J  s    c         C   s<   |  i  i ƒ  |  i p |  i d d  ƒ n |  i d ƒ d  S(   NR®   R°   (   R€   t   startExitBlockR·   R‹   R.   (   R:   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR¼   M  s    
c         C   sd   x] t  t | ƒ ƒ D]I } | | } t | t ƒ o) |  i d d | d ƒ |  i | ƒ q q Wd  S(   Nt	   LOAD_FASTs   .%di   (   R¿   R»   Ri   RL  R‹   t   unpackSequence(   R:   R  RÃ   Rˆ  (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRà  S  s     
c         C   sƒ   t  d j o |  i d t | ƒ ƒ n |  i d t | ƒ ƒ x? | D]7 } t | t ƒ o |  i | ƒ qD |  i d | ƒ qD Wd  S(   Ni   R\  R_  R˜   (   RB  R‹   R»   Ri   RL  Ræ  R™   (   R:   t   tupR\   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRæ  Z  s     (
   RA   RB   R¥   RÚ  R;   R~   R¼   Rà  Ræ  t   unpackTuple(    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRØ  )  s   					RÐ  c           B   s)   e  Z e i Z d Z e i Z d  „  Z RS(   c         C   sŒ   | |  _  | | |  _ |  i | | | | | ƒ |  i i |  i i ƒ  ƒ |  i i |  i i ƒ  ƒ |  i i d  j	 o |  i i
 t ƒ n d  S(   N(   R“   R£   t"   _FunctionCodeGenerator__super_initR€   t   setFreeVarsR  t   setCellVarst   get_cell_varst	   generatorR.   R�   R   (   R:   Rá  R“   R·   R�   R)   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR;   n  s    	N(	   RA   RB   Rm   R;   RÝ  R.   R“   RØ  Ré  (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRÐ  g  s   		R  c           B   s)   e  Z e i Z d Z e i Z d  „  Z RS(   c         C   su   | |  _  | | |  _ |  i | | d | | ƒ |  i i |  i i ƒ  ƒ |  i i |  i i ƒ  ƒ |  i i t	 ƒ d  S(   Ni   (
   R“   R£   t!   _GenExprCodeGenerator__super_initR€   Rê  R  Rë  Rì  R�   R   (   R:   t   gexpR“   R�   R)   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR;   ~  s    	N(	   RA   RB   Rm   R;   RÝ  R.   R“   RØ  Rî  (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR  w  s   		t   AbstractClassCodec           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s¬   | i  |  _ | |  _ t i | i  | i d d d d ƒ|  _ |  i ƒ  t | i	 |  i
 ƒ  d d ƒ} |  i i | i ƒ  ƒ |  i i t ƒ | i o |  i | i ƒ n d  S(   NR¥   i    Râ  i   R¯   (   RX   R�   RÙ  R   RÒ  R%   R€   RÝ  R   R3   Rƒ   Ry   R²   R]   R�   R   R±   R�   (   R:   Râ  R“   RÙ  R´   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR;   ˆ  s    	

c         C   s   |  i  S(   N(   RÙ  (   R:   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR~   ”  s    c         C   s+   |  i  i ƒ  |  i d ƒ |  i d ƒ d  S(   Nt   LOAD_LOCALSR°   (   R€   Rä  R‹   (   R:   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR¼   —  s    (   RA   RB   R;   R~   R¼   (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRð  †  s   		RÑ  c           B   s)   e  Z e i Z d Z e i Z d  „  Z RS(   c         C   s·   | |  _  | | |  _ |  i | | | ƒ |  i i |  i i ƒ  ƒ |  i i |  i i ƒ  ƒ |  i | ƒ |  i	 d d ƒ |  i
 d ƒ | i o$ |  i	 d | i ƒ |  i
 d ƒ n d  S(   NR  RA   RB   R®   Rh   (   R“   R£   t   _ClassCodeGenerator__super_initR€   Rê  R  Rë  Rì  R­   R‹   Rš   R±   (   R:   Râ  R“   RÙ  (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR;   ¢  s    	
N(	   RA   RB   Rm   R;   RÝ  R.   R“   Rð  Rò  (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRÑ  œ  s   		c         C   sÂ   g  } g  } d } xŸ t  t |  ƒ ƒ D]‹ } |  | } t | t ƒ o | i | ƒ q% t | t ƒ o> | i t | d | ƒ ƒ | i t i	 | ƒ ƒ | d } q% t
 d | ‚ q% W| | | f S(   s&   Generate an arg list marking TupleArgsi    i   i   s   unexpect argument type:(   R¿   R»   Ri   t   strt   appendRL  R   t   extendR   t   flattenR2   (   t   arglistR  t   extrat   countRÃ   R\   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRÛ  ¯  s     
c         C   s#   t  ƒ  } t |  | d d ƒ| i S(   s5   Find the op (DELETE, LOAD, STORE) in an AssTuple treeR¯   i    (   t   OpFinderR   Rþ   (   R^   RÎ  (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR]  À  s    	Rú  c           B   s&   e  Z d  „  Z d „  Z e Z e Z RS(   c         C   s   d  |  _ d  S(   N(   R.   Rþ   (   R:   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR;   Ç  s    c         C   sD   |  i  d  j o | i |  _  n! |  i  | i j o t d ‚ n d  S(   Ns   mixed ops in stmt(   Rþ   R.   R6   R2   (   R:   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRg   É  s    (   RA   RB   R;   Rg   R[  R~  (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRú  Æ  s   		t	   Delegatorc           B   s    e  Z d  Z d „  Z d „  Z RS(   s  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.
    c         C   s   | |  _  d  S(   N(   t   obj(   R:   Rü  (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR;   Ü  s    c         C   s   t  |  i | ƒ S(   N(   Rˆ   Rü  (   R:   t   attr(    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   __getattr__ß  s    (   RA   RB   Rh   R;   Rþ  (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRû  Ñ  s   
	t
   AugGetattrc           B   s   e  Z RS(    (   RA   RB   (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRÿ  â  s   t   AugNamec           B   s   e  Z RS(    (   RA   RB   (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR   å  s   t   AugSlicec           B   s   e  Z RS(    (   RA   RB   (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR  è  s   t   AugSubscriptc           B   s   e  Z RS(    (   RA   RB   (    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyR  ë  s   c         C   s   t  |  i |  ƒ S(   N(   t   wrapperRv   (   R^   (    (    s(   scripts/common/Lib/compiler/pycodegen.pyRe  õ  s    t   __main__(L   RQ   RJ   RI   RM   t   syst	   cStringIOR    t   compilerR   R   R   R   R   R   R   R   t   compiler.constsR	   R
   R   R   R   R   R   R   R   R   R   R   R   t   compiler.pyassemR   t   version_infoRB  t   AttributeErrorR…  RÖ   Ræ   Rç   Rè   R*   R.   R"   R9   R1   R0   R!   RS   Rl   Rm   RÏ  RE   RC   RD   RØ  RÐ  R  Rð  RÑ  RÛ  R]  Rú  Rû  Rÿ  R   R  R  t   Getattrt   Namet   Slicet	   SubscriptR  Re  RA   t   argvt   file(    (    (    s(   scripts/common/Lib/compiler/pycodegen.pyt   <module>   s‚   """@		+	ÿ ÿ ÿ ÿ =>				


	 