j f @s_dZddlmZddlmZmZmZddlmZGdddejZ dS)z/Fixer that changes xrange(...) into range(...).) fixer_base)NameCallconsuming_calls)patcompcseZdZdZdZfddZddZddZd d Zd d Z d Z e j e Z dZe j eZddZS) FixXrangeTz power< (name='range'|name='xrange') trailer< '(' args=any ')' > rest=any* > cs)tt|j||t|_dS)N)superr start_treesettransformed_xranges)selftreefilename) __class__=/opt/alt/python34/lib64/python3.4/lib2to3/fixes/fix_xrange.pyr szFixXrange.start_treecCs d|_dS)N)r )r r rrrr finish_treeszFixXrange.finish_treecCs^|d}|jdkr)|j||S|jdkrH|j||Stt|dS)NnameZxrangerange)valuetransform_xrangetransform_range ValueErrorrepr)r noderesultsrrrr transforms  zFixXrange.transformcCs@|d}|jtdd|j|jjt|dS)Nrrprefix)replacerrr addid)r rrrrrrr$s zFixXrange.transform_xrangecCst||jkr|j| rttd|djg}ttd|gd|j}x|dD]}|j|qsW|SdS)Nrargslistrrest)r r in_special_contextrrZclonerZ append_child)r rrZ range_callZ list_callnrrrr*s" zFixXrange.transform_rangez3power< func=NAME trailer< '(' node=any ')' > any* >zfor_stmt< 'for' any 'in' node=any ':' any* > | comp_for< 'for' any 'in' node=any any* > | comparison< any 'in' node=any any*> cCs|jdkrdSi}|jjdk rg|jj|jj|rg|d|krg|djtkS|jj|j|o|d|kS)NFrfunc)parentp1matchrrp2)r rrrrrr$?szFixXrange.in_special_context)__name__ __module__ __qualname__Z BM_compatibleZPATTERNr rrrrZP1rZcompile_patternr(ZP2r*r$rr)rrr s    rN) __doc__rZ fixer_utilrrrrZBaseFixrrrrrs