B T)\@sFdZddlmZddlmZmZmZddlmZGdddejZ dS)z/Fixer that changes xrange(...) into range(...).) fixer_base)NameCallconsuming_calls)patcompcsheZdZdZdZfddZddZddZd d Zd d Z d Z e e Z dZe eZddZZS) FixXrangeTz power< (name='range'|name='xrange') trailer< '(' args=any ')' > rest=any* > cstt|||t|_dS)N)superr start_treesettransformed_xranges)selftreefilename) __class__;/opt/alt/python37/lib/python3.7/lib2to3/fixes/fix_xrange.pyr szFixXrange.start_treecCs d|_dS)N)r )r r rrrr finish_treeszFixXrange.finish_treecCsD|d}|jdkr|||S|jdkr4|||Stt|dS)NnameZxrangerange)valuetransform_xrangetransform_range ValueErrorrepr)r noderesultsrrrr transforms     zFixXrange.transformcCs0|d}|td|jd|jt|dS)Nrr)prefix)replacerrr addid)r rrrrrrr$szFixXrange.transform_xrangecCsjt||jkrf||sfttd|dg}ttd|g|jd}x|dD]}||qPW|SdS)Nrargslist)rrest)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*> cCsf|jdkrdSi}|jjdk rJ|j|jj|rJ|d|krJ|djtkS|j|j|od|d|kS)NFrfunc)parentp1matchrrp2)r rrrrrr$?s   zFixXrange.in_special_context)__name__ __module__ __qualname__Z BM_compatibleZPATTERNr rrrrZP1rZcompile_patternr(ZP2r*r$ __classcell__rr)rrr s     rN) __doc__rZ fixer_utilrrrrZBaseFixrrrrrs