ðÕYf† ã@s_dZddlmZddlmZmZmZddlmZGdd„dejƒZ dS)z/Fixer that changes xrange(...) into range(...).é)Ú fixer_base)ÚNameÚCallÚconsuming_calls)Úpatcompcs”eZdZdZdZ‡fdd†Zdd„Zdd„Zd d „Zd d „Z d Z e j e ƒZ dZe j eƒZdd„Z‡S)Ú FixXrangeTzˆ power< (name='range'|name='xrange') trailer< '(' args=any ')' > rest=any* > cs)tt|ƒj||ƒtƒ|_dS)N)ÚsuperrÚ start_treeÚsetÚtransformed_xranges)ÚselfÚtreeÚfilename)Ú __class__©ú=/opt/alt/python35/lib64/python3.5/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)NÚnameZxrangeÚrange)ÚvalueÚtransform_xrangeÚtransform_rangeÚ ValueErrorÚrepr)r ÚnodeÚresultsrrrrÚ transforms  zFixXrange.transformcCs@|d}|jtdd|jƒƒ|jjt|ƒƒdS)NrrÚprefix)Úreplacerrr ÚaddÚid)r rrrrrrr$s zFixXrange.transform_xrangecCs’t|ƒ|jkrŽ|j|ƒ rŽttdƒ|djƒgƒ}ttdƒ|gd|jƒ}x|dD]}|j|ƒqsW|SdS)NrÚargsÚlistrÚ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*> cCs�|jdkrdSi}|jjdk rg|jj|jj|ƒrg|d|krg|djtkS|jj|j|ƒoŒ|d|kS)NFrÚfunc)ÚparentÚp1ÚmatchrrÚp2)r rrrrrr$?szFixXrange.in_special_context)Ú__name__Ú __module__Ú __qualname__Z BM_compatibleZPATTERNr rrrrZP1rZcompile_patternr(ZP2r*r$rr)rrr s    rN) Ú__doc__ÚrZ fixer_utilrrrrZBaseFixrrrrrÚs