ó
è¾bc           @   si   d  Z  d d l m Z d d l m Z d d l m Z d d l m Z m Z d e j	 f d „  ƒ  YZ
 d S(	   s&  Fixer for has_key().

Calls to .has_key() methods are expressed in terms of the 'in'
operator:

    d.has_key(k) -> k in d

CAVEATS:
1) While the primary target of this fixer is dict.has_key(), the
   fixer will change any has_key() method call, regardless of its
   class.

2) Cases like this will not be converted:

    m = d.has_key
    if m(k):
        ...

   Only *calls* to has_key() are converted. While it is possible to
   convert the above to something like

    m = d.__contains__
    if m(k):
        ...

   this is currently not done.
i   (   t   pytree(   t   token(   t
   fixer_base(   t   Namet   parenthesizet	   FixHasKeyc           B   s   e  Z e Z d  Z d „  Z RS(   s•  
    anchor=power<
        before=any+
        trailer< '.' 'has_key' >
        trailer<
            '('
            ( not(arglist | argument<any '=' any>) arg=any
            | arglist<(not argument<any '=' any>) arg=any ','>
            )
            ')'
        >
        after=any*
    >
    |
    negation=not_test<
        'not'
        anchor=power<
            before=any+
            trailer< '.' 'has_key' >
            trailer<
                '('
                ( not(arglist | argument<any '=' any>) arg=any
                | arglist<(not argument<any '=' any>) arg=any ','>
                )
                ')'
            >
        >
    >
    c      
   C   sU  | s t  ‚ |  j } | j j | j k rC |  j j | j ƒ rC d  S| j d ƒ } | d } | j	 } g  | d D] } | j
 ƒ  ^ qp } | d j
 ƒ  }	 | j d ƒ }
 |
 rÏ g  |
 D] } | j
 ƒ  ^ q´ }
 n  |	 j | j | j | j | j | j | j | j f k rt |	 ƒ }	 n  t | ƒ d k r6| d } n t j | j | ƒ } d | _	 t d	 d
 d ƒ} | rœt d d
 d ƒ} t j | j | | f ƒ } n  t j | j |	 | | f ƒ } |
 rñt | ƒ } t j | j | f t |
 ƒ ƒ } n  | j j | j | j | j | j | j | j | j | j | j f	 k rHt | ƒ } n  | | _	 | S(   Nt   negationt   anchort   beforet   argt   afteri   i    u    u   int   prefixu   not(    t   AssertionErrort   symst   parentt   typet   not_testt   patternt   matcht   Nonet   getR   t   clonet
   comparisont   and_testt   or_testt   testt   lambdeft   argumentR   t   lenR    t   Nodet   powerR   t   comp_opt   tuplet   exprt   xor_exprt   and_exprt
   shift_exprt
   arith_exprt   termt   factor(   t   selft   nodet   resultsR   R   R   R   t   nR   R	   R
   t   n_opt   n_nott   new(    (    s/   /usr/lib/python2.7/lib2to3/fixes/fix_has_key.pyt	   transformH   sF    	
	#"!	%	(   t   __name__t
   __module__t   Truet   BM_compatiblet   PATTERNR/   (    (    (    s/   /usr/lib/python2.7/lib2to3/fixes/fix_has_key.pyR   '   s   N(   t   __doc__t    R    t   pgen2R   R   t
   fixer_utilR   R   t   BaseFixR   (    (    (    s/   /usr/lib/python2.7/lib2to3/fixes/fix_has_key.pyt   <module>   s
   