
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,aß  ã                   @   sh   d Z ddlZddlZddlmZ ddlmZ ddlmZ G dd„ de	ƒZ
G d	d
„ d
e	ƒZi add„ ZdS )z+George Boutsioukis <gboutsioukis@gmail.com>é    N)Údefaultdicté   )Úpytree)Úreduce_treec                   @   s   e Zd Ze ¡ Zdd„ ZdS )ÚBMNodec                 C   s"   i | _ g | _ttjƒ| _d| _d S )NÚ )Útransition_tableÚfixersÚnextr   ÚcountÚidÚcontent©Úself© r   ú8/opt/alt/python38/lib64/python3.8/lib2to3/btm_matcher.pyÚ__init__   s    zBMNode.__init__N)Ú__name__Ú
__module__Ú__qualname__Ú	itertoolsr   r   r   r   r   r   r      s   r   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚBottomMatcherc                 C   s0   t ƒ | _tƒ | _| jg| _g | _t d¡| _d S )NZRefactoringTool)	ÚsetÚmatchr   ÚrootZnodesr	   ÚloggingZ	getLoggerZloggerr   r   r   r   r      s
    
zBottomMatcher.__init__c                 C   sH   | j  |¡ t|jƒ}| ¡ }| j|| jd�}|D ]}|j  |¡ q2d S )N©Ústart)r	   Úappendr   Zpattern_treeZget_linear_subpatternÚaddr   )r   ÚfixerZtreeZlinearÚmatch_nodesZ
match_noder   r   r   Ú	add_fixer%   s    
zBottomMatcher.add_fixerc              	   C   sÄ   |s
|gS t |d tƒr`g }|d D ]6}| j||d�}|D ]}| |  |dd … |¡¡ q:q$|S |d |jkr„tƒ }||j|d < n|j|d  }|dd … r¶| j|dd … |d�}n|g}|S d S )Nr   r   r   )Ú
isinstanceÚtupler   Úextendr   r   )r   Úpatternr   r!   ZalternativeZ	end_nodesÚendZ	next_noder   r   r   r   1   s"    zBottomMatcher.addc           	      C   sî   | j }ttƒ}|D ]Ö}|}|rd|_|jD ]$}t|tjƒr*|jdkr*d|_ qPq*|j	dkrb|j}n|j	}||j
kr˜|j
| }|jD ]}||  |¡ q‚nH| j }|jd k	r²|jjr²q||j
krà|j
| }|jD ]}||  |¡ qÌ|j}qq|S )NTú;Fr   )r   r   ÚlistZwas_checkedZchildrenr#   r   ZLeafÚvalueÚtyper   r	   r   Úparent)	r   ZleavesZcurrent_ac_nodeZresultsZleafZcurrent_ast_nodeZchildZ
node_tokenr    r   r   r   ÚrunS   s8    





ÿ



zBottomMatcher.runc                    s*   t dƒ ‡ fdd„‰ ˆ | jƒ t dƒ d S )Nz
digraph g{c                    sZ   | j  ¡ D ]J}| j | }td| j|jt|ƒt|jƒf ƒ |dkrLt|jƒ ˆ |ƒ q
d S )Nz%d -> %d [label=%s] //%sr   )r   ÚkeysÚprintr   Ú	type_reprÚstrr	   r   )ZnodeZsubnode_keyZsubnode©Ú
print_noder   r   r3   Ž   s    
ÿ
z*BottomMatcher.print_ac.<locals>.print_nodeÚ})r/   r   r   r   r2   r   Úprint_ac‹   s    
zBottomMatcher.print_acN)r   r   r   r   r"   r   r-   r5   r   r   r   r   r      s
   "8r   c                 C   sD   t s8ddlm} |j ¡ D ]\}}t|ƒtkr|t |< qt  | | ¡S )Nr   )Úpython_symbols)Ú_type_reprsZpygramr6   Ú__dict__Úitemsr+   ÚintÚ
setdefault)Ztype_numr6   ÚnameÚvalr   r   r   r0   ›   s     
r0   )Ú
__author__r   r   Úcollectionsr   r   r   Z	btm_utilsr   Úobjectr   r   r7   r0   r   r   r   r   Ú<module>   s   	 