509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \±  ã               @   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jƒ 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   ú+/usr/lib64/python3.6/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jdƒ| _d S )NZRefactoringTool)	ÚsetÚmatchr   ÚrootZnodesr	   ÚloggingZ	getLoggerZlogger)r   r   r   r   r      s
    
zBottomMatcher.__init__c             C   sL   | j j|ƒ t|jƒ}|jƒ }| j|| jd�}x|D ]}|j j|ƒ q4W d 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ƒrhg }xF|d D ]:}| j||d�}x&|D ]}|j| j|dd … |ƒƒ q>W q&W |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   ÚalternativeZ	end_nodesÚendZ	next_noder   r   r   r   1   s"    
"zBottomMatcher.addc       	      C   s0  | j }ttƒ}�x|D �]}|}�x|�r&d|_x,|jD ]"}t|tjƒr8|jdkr8d|_P q8W |j	dkrp|j}n|j	}||j
krº|j
| }x’|jD ]"}||kr¦g ||< || j|ƒ q’W nd| j }|jd k	rÔ|jjrÔP ||j
k�r|j
| }x2|jD ](}||jƒ k�rg ||< || j|ƒ qòW |j}q$W qW |S )NTú;Fr   )r   r   ÚlistZwas_checkedZchildrenr!   r   ZLeafÚvalueÚtyper   r	   r   ÚparentÚkeys)	r   ZleavesZcurrent_ac_nodeZresultsZleafZcurrent_ast_nodeZchildZ
node_tokenr   r   r   r   ÚrunS   s>    





zBottomMatcher.runc                s*   t dƒ ‡ fdd„‰ ˆ | jƒ t dƒ d S )Nz
digraph g{c                s^   xX| j jƒ D ]J}| j | }td| j|jt|ƒt|jƒf ƒ |dkrNt|jƒ ˆ |ƒ qW d S )Nz%d -> %d [label=%s] //%sr   )r   r,   Úprintr   Ú	type_reprÚstrr	   r   )ZnodeZsubnode_keyZsubnode)Ú
print_noder   r   r1   “   s    

z*BottomMatcher.print_ac.<locals>.print_nodeú})r.   r   )r   r   )r1   r   Úprint_ac�   s    
zBottomMatcher.print_acN)r   r   r   r   r    r   r-   r3   r   r   r   r   r      s
   "=r   c             C   sH   t s<ddlm} x*|jjƒ D ]\}}t|ƒtkr|t |< qW t j| | ƒS )Nr   )Úpython_symbols)Ú_type_reprsZpygramr4   Ú__dict__Úitemsr*   ÚintÚ
setdefault)Ztype_numr4   ÚnameÚvalr   r   r   r/       s     r/   )Ú
__author__r   r   Úcollectionsr   r   r   Z	btm_utilsr   Úobjectr   r   r5   r/   r   r   r   r   Ú<module>   s   	 