3 \� �@sBddlmZddlmZmZmZddlmZGdd�dej�ZdS)�)� fixer_base)�Name�Call�consuming_calls)�patcompcsheZdZdZdZ�fdd�Zdd�Zdd�Zd d �Zd d �Z d Z e j e �Z dZe j e�Zdd�Z�ZS)� FixXrangeTz� power< (name='range'|name='xrange') trailer< '(' args=any ')' > rest=any* > cstt|�j||�t�|_dS)N)�superr� start_tree�set�transformed_xranges)�self�tree�filename)� __class__��0/usr/lib64/python3.6/lib2to3/fixes/fix_xrange.pyr szFixXrange.start_treecCs d|_dS)N)r )r r rrrr� finish_treeszFixXrange.finish_treecCsD|d}|jdkr|j||�S|jdkr4|j||�Stt|���dS)N�nameZxrange�range)�value�transform_xrange�transform_range� ValueError�repr)r �node�resultsrrrr� transforms     zFixXrange.transformcCs0|d}|jtd|jd��|jjt|��dS)Nrr)�prefix)�replacerrr �add�id)r rrrrrrr$szFixXrange.transform_xrangecCslt|�|jkrh|j|� rhttd�|dj�g�}ttd�|g|jd�}x|dD]}|j|�qRW|SdS)Nr�args�list)r�rest)r r �in_special_contextrrZclonerZ append_child)r rrZ range_callZ list_call�nrrrr*s   zFixXrange.transform_rangez3power< func=NAME trailer< '(' node=any ')' > any* >z�for_stmt< 'for' any 'in' node=any ':' any* > | comp_for< 'for' any 'in' node=any any* > | comparison< any 'in' node=any any*> cCsf|jdkrdSi}|jjdk rJ|jj|jj|�rJ|d|krJ|djtkS|jj|j|�od|d|kS)NFr�func)�parent�p1�matchrr�p2)r rrrrrr$?s   zFixXrange.in_special_context)�__name__� __module__� __qualname__Z BM_compatibleZPATTERNr rrrrZP1rZcompile_patternr(ZP2r*r$� __classcell__rr)rrr s     rN) �rZ fixer_utilrrrrZBaseFixrrrrr�s