509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
åG‘\í#  ã               @   sp   d dl mZ d dlmZ dZdZdZdZddd	„Zdd
d„Z	G dd„ de
ƒZG dd„ deƒZG dd„ deƒZdS )é    )ÚNodeVisitor)Ú	iteritemsÚparamZresolveÚaliasZ	undefinedNc             C   s.   t |d�}t|ƒ}x| D ]}|j|ƒ qW |S )N)Úparent)ÚSymbolsÚFrameSymbolVisitorÚvisit)ÚnodesÚparent_symbolsÚsymÚvisitorÚnode© r   ú /usr/lib/python3.6/idtracking.pyÚfind_symbols   s
    

r   c             C   s   t |d�}|j| ƒ |S )N)r   )r   Úanalyze_node)r   r   r   r   r   r   Úsymbols_for_node   s    

r   c               @   sx   e Zd Zddd„Zdd„ Zddd„Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )r   Nc             C   sD   |d kr |d krd}n
|j d }|| _ || _i | _i | _tƒ | _d S )Nr   é   )Úlevelr   ÚrefsÚloadsÚsetÚstores)Úselfr   r   r   r   r   Ú__init__   s    
zSymbols.__init__c             K   s   t | ƒ}|j|f|Ž d S )N)ÚRootVisitorr	   )r   r   Úkwargsr   r   r   r   r   '   s    zSymbols.analyze_nodec             C   s.   d| j |f }|| j|< |d k	r*|| j|< |S )Nzl_%d_%s)r   r   r   )r   ÚnameÚloadZidentr   r   r   Ú_define_ref+   s
    

zSymbols._define_refc             C   s.   || j kr| j | S | jd k	r*| jj|ƒS d S )N)r   r   Ú	find_load)r   Útargetr   r   r   r!   2   s    


zSymbols.find_loadc             C   s.   || j kr| j | S | jd k	r*| jj|ƒS d S )N)r   r   Úfind_ref)r   r   r   r   r   r#   8   s    


zSymbols.find_refc             C   s"   | j |ƒ}|d krtd| ƒ‚|S )NzITried to resolve a name to a reference that was unknown to the frame (%r))r#   ÚAssertionError)r   r   Úrvr   r   r   Úref>   s
    
zSymbols.refc             C   sB   t j| jƒ}|jj| jƒ | jjƒ |_| jjƒ |_| jjƒ |_|S )N)	ÚobjectÚ__new__Ú	__class__Ú__dict__Úupdater   Úcopyr   r   )r   r%   r   r   r   r,   E   s    zSymbols.copyc             C   s`   | j j|ƒ || jkr\| jd k	rJ| jj|ƒ}|d k	rJ| j|t|fd� d S | j|td fd� d S )N)r   )r   Úaddr   r   r#   r    ÚVAR_LOAD_ALIASÚVAR_LOAD_UNDEFINED)r   r   Z	outer_refr   r   r   ÚstoreM   s    

zSymbols.storec             C   s   | j j|ƒ | j|td fd�S )N)r   )r   r-   r    ÚVAR_LOAD_PARAMETER)r   r   r   r   r   Údeclare_parameter_   s    zSymbols.declare_parameterc             C   s(   | j |ƒ}|d kr$| j|t|fd� d S )N)r   )r#   r    ÚVAR_LOAD_RESOLVE)r   r   r"   r   r   r   r   c   s    
zSymbols.loadc       	      C   sø   i }x<|D ]4}x.|j D ]$}|| j kr&q|j|dƒd ||< qW q
W x6|D ].}| jj|jƒ | jj|jƒ | j j|j ƒ qHW xxt|ƒD ]l\}}|t|ƒkršq„| j|ƒ}|d k	s´tdƒ‚| j	d k	râ| j	j|ƒ}|d k	rât
|f| j|< q„t|f| j|< q„W d S )Nr   r   zshould not happen)r   Úgetr   r+   r   r   Úlenr#   r$   r   r.   r3   )	r   Zbranch_symbolsr   Úbranchr"   r   r   Zbranch_countZouter_targetr   r   r   Úbranch_updateh   s*    




zSymbols.branch_updatec             C   sF   i }| }x8|d k	r@x$|j D ]}||kr| j|ƒ||< qW |j}q
W |S )N)r   r#   r   )r   r%   r   r   r   r   r   Údump_stores‚   s    

zSymbols.dump_storesc             C   sP   t ƒ }| }x@|d k	rJx,t| jƒD ]\}\}}|tkr |j|ƒ q W |j}qW |S )N)r   r   r   r1   r-   r   )r   r%   r   r"   ZinstrÚ_r   r   r   Údump_param_targetsŒ   s    

zSymbols.dump_param_targets)NN)N)Ú__name__Ú
__module__Ú__qualname__r   r   r    r!   r#   r&   r,   r0   r2   r   r7   r8   r:   r   r   r   r   r      s   


r   c               @   sj   e Zd Zdd„ Zdd„ Ze Z Z Z Z Z	 Z
Zdd„ Zdd„ Zd	d
„ Zddd„Zdd„ Zdd„ ZdS )r   c             C   s   t |ƒ| _d S )N)r   Úsym_visitor)r   Úsymbolsr   r   r   r   ™   s    zRootVisitor.__init__c             K   s"   x|j ƒ D ]}| jj|ƒ q
W d S )N)Úiter_child_nodesr>   r	   )r   r   r   Úchildr   r   r   Ú_simple_visitœ   s    zRootVisitor._simple_visitc             K   s    x|j D ]}| jj|ƒ qW d S )N)Úbodyr>   r	   )r   r   r   rA   r   r   r   Úvisit_AssignBlock¤   s    zRootVisitor.visit_AssignBlockc             K   s&   x |j dd�D ]}| jj|ƒ qW d S )NÚcall)Úexclude)rE   )r@   r>   r	   )r   r   r   rA   r   r   r   Úvisit_CallBlock¨   s    zRootVisitor.visit_CallBlockc             K   s    x|j D ]}| jj|ƒ qW d S )N)rC   r>   r	   )r   r   r   rA   r   r   r   Úvisit_OverlayScope¬   s    zRootVisitor.visit_OverlayScoperC   c             K   s’   |dkr"| j j|jdd� |j}nN|dkr2|j}n>|dkrh| j j|jdd� |jd k	rd| j j|jƒ d S tdƒ‚x|pxf D ]}| j j|ƒ qzW d S )NrC   T)Ústore_as_paramÚelseÚtestzUnknown for branch)r>   r	   r"   rC   Úelse_rK   ÚRuntimeError)r   r   Z
for_branchr   r6   Úitemr   r   r   Ú	visit_For°   s    
zRootVisitor.visit_Forc             K   s<   x|j D ]}| jj|ƒ qW x|jD ]}| jj|ƒ q$W d S )N)Ztargetsr>   r	   rC   )r   r   r   r"   rA   r   r   r   Ú
visit_WithÀ   s    zRootVisitor.visit_Withc             O   s   t d|jj ƒ‚d S )NzCannot find symbols for %r)ÚNotImplementedErrorr)   r;   )r   r   Úargsr   r   r   r   Úgeneric_visitÆ   s    zRootVisitor.generic_visitN)rC   )r;   r<   r=   r   rB   Zvisit_TemplateÚvisit_BlockÚvisit_MacroÚvisit_FilterBlockÚvisit_ScopeÚvisit_IfZvisit_ScopedEvalContextModifierrD   rG   rH   rO   rP   rS   r   r   r   r   r   —   s   
r   c               @   s’   e Zd ZdZdd„ Zd$dd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#S )%r   zA visitor for `Frame.inspect`.c             C   s
   || _ d S )N)r?   )r   r?   r   r   r   r   Î   s    zFrameSymbolVisitor.__init__Fc             K   sT   |s|j dkr| jj|jƒ n2|j dkr8| jj|jƒ n|j dkrP| jj|jƒ dS )z2All assignments to names go through this function.r   r0   r   N)Zctxr?   r2   r   r0   r   )r   r   rI   r   r   r   r   Ú
visit_NameÑ   s    

zFrameSymbolVisitor.visit_Namec             K   s   | j j|jƒ d S )N)r?   r   r   )r   r   r   r   r   r   Úvisit_NSRefÚ   s    zFrameSymbolVisitor.visit_NSRefc                s^   ˆj |jfˆ Ž ˆj‰‡ ‡‡fdd„}||jƒ}||jƒ}||jpDf ƒ}ˆjj|||gƒ d S )Nc                s4   ˆj ƒ  ˆ_}x| D ]}ˆj|fˆ Ž qW ˆˆ_|S )N)r,   r?   r	   )r
   r%   Zsubnode)r   Úoriginal_symbolsr   r   r   Úinner_visitâ   s
    
z0FrameSymbolVisitor.visit_If.<locals>.inner_visit)r	   rK   r?   rC   Zelif_rL   r7   )r   r   r   r\   Zbody_symbolsZelif_symbolsZelse_symbolsr   )r   r[   r   r   rX   Ý   s    

zFrameSymbolVisitor.visit_Ifc             K   s   | j j|jƒ d S )N)r?   r0   r   )r   r   r   r   r   r   rU   ï   s    zFrameSymbolVisitor.visit_Macroc             K   s    | j |f|Ž | jj|jƒ d S )N)rS   r?   r0   r"   )r   r   r   r   r   r   Úvisit_Importò   s    zFrameSymbolVisitor.visit_Importc             K   sJ   | j |f|Ž x6|jD ],}t|tƒr6| jj|d ƒ q| jj|ƒ qW d S )Nr   )rS   ÚnamesÚ
isinstanceÚtupler?   r0   )r   r   r   r   r   r   r   Úvisit_FromImportö   s
    
z#FrameSymbolVisitor.visit_FromImportc             K   s$   | j |jf|Ž | j |jf|Ž dS )z'Visit assignments in the correct order.N)r	   r   r"   )r   r   r   r   r   r   Úvisit_Assignþ   s    zFrameSymbolVisitor.visit_Assignc             K   s   | j |jf|Ž dS )zqVisiting stops at for blocks.  However the block sequence
        is visited as part of the outer scope.
        N)r	   Úiter)r   r   r   r   r   r   rO     s    zFrameSymbolVisitor.visit_Forc             K   s   | j |jf|Ž d S )N)r	   rE   )r   r   r   r   r   r   rG   	  s    z"FrameSymbolVisitor.visit_CallBlockc             K   s   | j |jf|Ž d S )N)r	   Úfilter)r   r   r   r   r   r   rV     s    z$FrameSymbolVisitor.visit_FilterBlockc             K   s   x|j D ]}| j|ƒ qW d S )N)Úvaluesr	   )r   r   r   r"   r   r   r   rP     s    zFrameSymbolVisitor.visit_Withc             K   s   | j |jf|Ž dS )zStop visiting at block assigns.N)r	   r"   )r   r   r   r   r   r   rD     s    z$FrameSymbolVisitor.visit_AssignBlockc             K   s   dS )zStop visiting at scopes.Nr   )r   r   r   r   r   r   rW     s    zFrameSymbolVisitor.visit_Scopec             K   s   dS )zStop visiting at blocks.Nr   )r   r   r   r   r   r   rT     s    zFrameSymbolVisitor.visit_Blockc             K   s   dS )z!Do not visit into overlay scopes.Nr   )r   r   r   r   r   r   rH     s    z%FrameSymbolVisitor.visit_OverlayScopeN)F)r;   r<   r=   Ú__doc__r   rY   rZ   rX   rU   r]   ra   rb   rO   rG   rV   rP   rD   rW   rT   rH   r   r   r   r   r   Ë   s"   
	r   )N)N)Zjinja2.visitorr   Zjinja2._compatr   r1   r3   r.   r/   r   r   r'   r   r   r   r   r   r   r   Ú<module>   s   

~4