��Qc@sidZddlmZddlmZddlmZddlmZmZdej fd��YZ
dS( 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(tpytree(ttoken(t
fixer_base(tNametparenthesizet FixHasKeycBseZeZdZd�ZRS(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 ','>
)
')'
>
>
>
cCsI|j}|jj|jkr7|jj|j�r7dS|jd�}|d}|j}g|dD]}|j �^qd}|dj �} |jd�}
|
r�g|
D]}|j �^q�}
n| j|j
|j|j|j|j
|j|jfkrt| �} nt|�dkr*|d}ntj|j|�}d|_td d
d�}|r�tdd
d�}tj|j||f�}ntj|j
| ||f�}
|
r�|
�}
tj|j|
ft|
��}
n|jj|j
|j|j|j|j|j|j|j|jf kr<t|
�}
n||
_|
S(Ntnegationtanchortbeforetargtafteriiu uintprefixunot(tsymstparentttypetnot_testtpatterntmatchtNonetgetRtclonet
comparisontand_testtor_testttesttlambdeftargumentRtlenRtNodetpowerRtcomp_opttupletexprtxor_exprtand_exprt
shift_exprt
arith_exprttermtfactor(tselftnodetresultsRRRRtnRR R
tn_optn_nottnew((s//sys/lib/python2.7/lib2to3/fixes/fix_has_key.pyt transformHsD
#"!
% (t__name__t
__module__tTruet
BM_compatibletPATTERNR.(((s//sys/lib/python2.7/lib2to3/fixes/fix_has_key.pyR'sN(t__doc__tRtpgen2RRt
fixer_utilRRtBaseFixR(((s//sys/lib/python2.7/lib2to3/fixes/fix_has_key.pyt<module>s
|