Ņō
$8Zc           @   sī   d  Z  d d k l Z d d k l Z d d k l Z d d k l Z l Z l	 Z	 l
 Z
 l Z l Z d   Z d e i f d     YZ d	   Z d
   Z g  d d  Z d   Z d S(   s:  Fixer for function definitions with tuple parameters.

def func(((a, b), c), d):
    ...

    ->

def func(x, d):
    ((a, b), c) = x
    ...

It will also support lambdas:

    lambda (x, y): x + y -> lambda t: t[0] + t[1]

    # The parens are a syntax error in Python 3
    lambda (x): x + y -> lambda x: x + y
i   (   t   pytree(   t   token(   t
   fixer_base(   t   Assignt   Namet   Newlinet   Numbert	   Subscriptt   symsc         C   s*   t  |  t i  o |  i d i t i j S(   Ni    (   t
   isinstanceR    t   Nodet   childrent   typeR   t   STRING(   t   stmt(    (    s4   /usr/lib/python2.6/lib2to3/fixes/fix_tuple_params.pyt   is_docstring   s    t   FixTupleParamsc           B   s    e  Z d  Z d   Z d   Z RS(   s  
              funcdef< 'def' any parameters< '(' args=any ')' >
                       ['->' any] ':' suite=any+ >
              |
              lambda=
              lambdef< 'lambda' args=vfpdef< '(' inner=any ')' >
                       ':' body=any
              >
              c            s@  d | j o  i  | |  Sg   | d } | d } | d i d i t i j o' d } | d i d i } t     n" d } d } t i t i d    t	     f d	  } | i t
 i j o | |  ne | i t
 i j oQ xN t | i  D]9 \ } }	 |	 i t
 i j o | |	 d
 | d j qú qú Wn  p d  Sx  D] }
 | d |
 _ qNW| } | d j o d  d _ n4 t | d i |  o |  d _ | d } n x  D] }
 | d |
 _ qÃW | d i | | +x= t | d | t   d  D] } | | d i | _ qW| d i   d  S(   Nt   lambdat   suitet   argsi    i   i   u   ; u    c            s   t   i    } |  i   } d | _ t | | i    } | o d | _ n |  i |    i t i t	 i
 |  i   g   d  S(   Nu    u    (   R   t   new_namet   clonet   prefixR   t   replacet   appendR    R
   R   t   simple_stmt(   t	   tuple_argt
   add_prefixt   nt   argR   (   t	   new_linest   endt   self(    s4   /usr/lib/python2.6/lib2to3/fixes/fix_tuple_params.pyt   handle_tuple?   s    	R   u    (   t   transform_lambdaR   R   R   t   INDENTt   valueR   R    t   Leaft   FalseR   t   tfpdeft   typedargslistt	   enumeratet   parentR   R   t   ranget   lent   changed(   R    t   nodet   resultsR   R   t   startt   indentR!   t   iR   t   linet   after(    (   R   R    R   s4   /usr/lib/python2.6/lib2to3/fixes/fix_tuple_params.pyt	   transform*   sN    

 "  " c         C   s[  | d } | d } t  | d  } | i t i j o' | i   } d | _ | i |  d  St |  } t |  } |  i	 t
 |   } t | d d }	 | i |	 i    xĪ | i   D] }
 |
 i t i j o} |
 i | j om g  } | |
 i D] } | | i   qø ~ } t i t i |	 i   g |  } |
 i | _ |
 i |  q― q― Wd  S(   NR   t   bodyt   inneru    R   (   t   simplify_argsR   R   t   NAMER   R   R   t   find_paramst   map_to_indexR   t
   tuple_nameR   t
   post_orderR$   R    R
   R   t   power(   R    R.   R/   R   R6   R7   t   paramst   to_indext   tup_namet	   new_paramR   t   _[1]t   ct
   subscriptst   new(    (    s4   /usr/lib/python2.6/lib2to3/fixes/fix_tuple_params.pyR"   j   s*    

	 #.(   t   __name__t
   __module__t   PATTERNR5   R"   (    (    (    s4   /usr/lib/python2.6/lib2to3/fixes/fix_tuple_params.pyR      s   		@c         C   su   |  i  t i t i f j o |  S|  i  t i j o- x% |  i  t i j o |  i d }  q7 W|  St d |    d  S(   Ni   s   Received unexpected node %s(   R   R   t   vfplistR   R9   t   vfpdefR   t   RuntimeError(   R.   (    (    s4   /usr/lib/python2.6/lib2to3/fixes/fix_tuple_params.pyR8      s     c         C   s   |  i  t i j o t |  i d  S|  i  t i j o |  i Sg  } |  i D]* } | i  t i j o | t |  qN qN ~ S(   Ni   (	   R   R   RK   R:   R   R   R9   R$   t   COMMA(   R.   RC   RD   (    (    s4   /usr/lib/python2.6/lib2to3/fixes/fix_tuple_params.pyR:      s
    c         C   s   | d  j o
 h  } n xj t |   D]\ \ } } t t t |    g } t | t  o t | | d | q$ | | | | <q$ W| S(   Nt   d(   t   NoneR)   R   R   t   unicodeR	   t   listR;   (   t
   param_listR   RN   R2   t   objt   trailer(    (    s4   /usr/lib/python2.6/lib2to3/fixes/fix_tuple_params.pyR;      s    
 c         C   sX   g  } xB |  D]: } t  | t  o | i t |   q | i |  q Wd i |  S(   Nu   _(   R	   RQ   R   R<   t   join(   RR   t   lRS   (    (    s4   /usr/lib/python2.6/lib2to3/fixes/fix_tuple_params.pyR<   Ī   s     N(   t   __doc__t    R    t   pgen2R   R   t
   fixer_utilR   R   R   R   R   R   R   t   BaseFixR   R8   R:   RO   R;   R<   (    (    (    s4   /usr/lib/python2.6/lib2to3/fixes/fix_tuple_params.pyt   <module>   s   .	h		