o bc @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|_dSN)superr start_treesettransformed_xrangesselftreefilename __class__//usr/lib/python3.10/lib2to3/fixes/fix_xrange.pyr s zFixXrange.start_treecCs d|_dSr)r r rrr finish_trees zFixXrange.finish_treecCs@|d}|jdkr|||S|jdkr|||Stt|)Nnamexrangerange)valuetransform_xrangetransform_range ValueErrorreprrnoderesultsrrrr transforms      zFixXrange.transformcCs0|d}|td|jd|jt|dS)Nrrprefix)replacerr#r addidrrrrr$szFixXrange.transform_xrangecCsjt||jvr1||s3ttd|dg}ttd|g|jd}|dD]}||q'|SdSdS)Nrargslistr"rest)r&r in_special_contextrrcloner# append_child)rrr range_call 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|jdurdSi}|jjdur%|j|jj|r%|d|ur%|djtvS|j|j|o2|d|uS)NFrfunc)parentp1matchrrp2)rrr rrrr*?s   zFixXrange.in_special_context)__name__ __module__ __qualname__ BM_compatiblePATTERNr rr!rrP1rcompile_patternr2P2r4r* __classcell__rrrrr s    rN) __doc__r fixer_utilrrrrBaseFixrrrrrs