B
ˆ f†
ã @ sF d Z ddlmZ ddlmZmZmZ ddlmZ G dd„ dejƒZ dS )z/Fixer that changes xrange(...) into range(...).é )Ú
fixer_base)ÚNameÚCallÚconsuming_calls)Úpatcompc sh e Zd ZdZdZ‡ fdd„Zdd„ Zdd„ Zd d
„ Zdd„ Z d
Z
e e
¡Z
dZe e¡Zdd„ Z‡ ZS )Ú FixXrangeTzˆ
power<
(name='range'|name='xrange') trailer< '(' args=any ')' >
rest=any* >
c s t t| ƒ ||¡ tƒ | _d S )N)Úsuperr Ú
start_treeÚsetÚtransformed_xranges)ÚselfÚtreeÚfilename)Ú __class__© ú=/opt/alt/python37/lib64/python3.7/lib2to3/fixes/fix_xrange.pyr s zFixXrange.start_treec C s
d | _ d S )N)r )r r
r r r r Úfinish_tree s zFixXrange.finish_treec C sD |d }|j dkr| ||¡S |j dkr4| ||¡S tt|ƒƒ‚d S )NÚnameZxrangeÚrange)ÚvalueÚtransform_xrangeÚtransform_rangeÚ
ValueErrorÚrepr)r ÚnodeÚresultsr r r r Ú transform s
zFixXrange.transformc C s0 |d }| td|jd�¡ | j t|ƒ¡ d S )Nr r )Úprefix)Úreplacer r r ÚaddÚid)r r r r r r r r $ s zFixXrange.transform_xrangec C sj t |ƒ| jkrf| |¡sfttdƒ|d ¡ gƒ}ttdƒ|g|jd�}x|d D ]}| |¡ qPW |S d S )Nr ÚargsÚlist)r Úrest)r r Úin_special_contextr r Zcloner Zappend_child)r r r Z
range_callZ list_callÚnr r r r * 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*>
c C sf |j d krdS i }|j j d k rJ| j |j j |¡rJ|d |krJ|d jtkS | j |j |¡od|d |kS )NFr Úfunc)ÚparentÚp1Úmatchr r Úp2)r r r r r r r$ ? s
zFixXrange.in_special_context)Ú__name__Ú
__module__Ú__qualname__Z
BM_compatibleZPATTERNr r r r r ZP1r Zcompile_patternr( ZP2r* r$ Ú
__classcell__r r )r r r s
r N)
Ú__doc__Ú r Z
fixer_utilr r r r ZBaseFixr r r r r Ú