o
    àý°j;)  ã                   @   sº   d dl ZddlmZ ddlmZ ejrd dlZdZ	dZ
dZdZ	dd	ejej d
ejd ddfdd„Z	ddejd
ejd ddfdd„ZG dd„ dƒZG dd„ deƒZG dd„ deƒZdS )é    Né   )Únodes)ÚNodeVisitorÚparamÚresolveÚaliasÚ	undefinedr   Úparent_symbolsÚSymbolsÚreturnc                 C   s*   t |d�}t|ƒ}| D ]}| |¡ q|S ©N)Úparent)r
   ÚFrameSymbolVisitorÚvisit)r   r	   ÚsymÚvisitorÚnode© r   ú„/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/jinja2/idtracking.pyÚfind_symbols   s
   
r   r   c                 C   s   t |d�}| | ¡ |S r   )r
   Úanalyze_node)r   r	   r   r   r   r   Úsymbols_for_node   s   

r   c                	   @   sD  e Zd Z	d&dejd  deje ddfdd„Zdejdej	ddfd	d
„Z
	d'dedejejeeje f  defdd„Zdedejej	 fdd„Zdedeje fdd„Zdedefdd„Zd(dd„Zdeddfdd„Zdedefdd„Zdeddfdd„Zdejd  ddfd d!„Zdejeef fd"d#„Zdeje fd$d%„ZdS ))r
   Nr   Úlevelr   c                 C   sD   |d u r|d u rd}n|j d }|| _ || _i | _i | _tƒ | _d S )Nr   r   )r   r   ÚrefsÚloadsÚsetÚstores)Úselfr   r   r   r   r   Ú__init__"   s   
zSymbols.__init__r   Úkwargsc                 K   s   t | ƒ}|j|fi |¤Ž d S ©N)ÚRootVisitorr   )r   r   r   r   r   r   r   r   1   s   zSymbols.analyze_nodeÚnameÚloadc                 C   s2   d| j › d|› �}|| j|< |d ur|| j|< |S )NÚl_Ú_)r   r   r   )r   r"   r#   Úidentr   r   r   Ú_define_ref5   s
   

zSymbols._define_refÚtargetc                 C   ó.   || j v r
| j | S | jd ur| j |¡S d S r    )r   r   Ú	find_load)r   r(   r   r   r   r*   >   ó
   


zSymbols.find_loadc                 C   r)   r    )r   r   Úfind_ref©r   r"   r   r   r   r,   G   r+   zSymbols.find_refc                 C   s&   |   |¡}|d u rtd|›d�ƒ‚|S )NzFTried to resolve a name to a reference that was unknown to the frame (ú))r,   ÚAssertionError)r   r"   Úrvr   r   r   ÚrefP   s   
ÿÿzSymbols.refúte.Selfc                 C   sB   t  | j¡}|j | j¡ | j ¡ |_| j ¡ |_| j ¡ |_|S r    )	ÚobjectÚ__new__Ú	__class__Ú__dict__Úupdater   Úcopyr   r   )r   r0   r   r   r   r8   Y   s   zSymbols.copyc                 C   sd   | j  |¡ || jvr0| jd ur%| j |¡}|d ur%| j|t|fd� d S | j|td fd� d S d S ©N)r#   )r   Úaddr   r   r,   r'   ÚVAR_LOAD_ALIASÚVAR_LOAD_UNDEFINED)r   r"   Ú	outer_refr   r   r   Ústorea   s   

õzSymbols.storec                 C   s   | j  |¡ | j|td fd�S r9   )r   r:   r'   ÚVAR_LOAD_PARAMETERr-   r   r   r   Údeclare_parameters   s   zSymbols.declare_parameterc                 C   s(   |   |¡d u r| j|t|fd� d S d S r9   )r,   r'   ÚVAR_LOAD_RESOLVEr-   r   r   r   r#   w   s   ÿzSymbols.loadÚbranch_symbolsc                 C   sÀ   t ƒ }|D ]}| |j¡ q| | j¡ |D ]}| j |j¡ | j |j¡ | j |j¡ q|D ]-}|  |¡}|d us?J dƒ‚| jd urV| j |¡}|d urVt|f| j|< q0t	|f| j|< q0d S )Nzshould not happen)
r   r7   r   Údifference_updater   r   r,   r   r;   rA   )r   rB   r   Úbranchr   r"   r(   Úouter_targetr   r   r   Úbranch_update{   s$   

÷zSymbols.branch_updatec                 C   sH   i }| }|d ur"t |jƒD ]}||vr|  |¡||< q|j}|d us|S r    )Úsortedr   r,   r   )r   r0   r   r"   r   r   r   Údump_stores“   s   €ûzSymbols.dump_storesc                 C   sN   t ƒ }| }|d ur%| j ¡ D ]\}\}}|tkr| |¡ q|j}|d us	|S r    )r   r   Úitemsr?   r:   r   )r   r0   r   r(   Úinstrr%   r   r   r   Údump_param_targets    s   
€ûzSymbols.dump_param_targets)NNr    )r   r2   )Ú__name__Ú
__module__Ú__qualname__ÚtÚOptionalÚintr   r   ÚNodeÚAnyr   ÚstrÚTupler'   r*   r,   r1   r8   r>   r@   r#   ÚSequencerF   ÚDictrH   ÚSetrK   r   r   r   r   r
   !   s8    ÿÿÿ
þÿÿÿ
þ			
	c                	   @   sö   e Zd Zddd„Zdejdejddfd	d
„ZeZ	eZ
eZeZeZeZeZdejdejddfdd„Zdejdejddfdd„Zdejdejddfdd„Z	ddejdedejddfdd„Zdejdejddfdd„Zdejdejdejddfdd„ZdS )r!   Úsymbolsr
   r   Nc                 C   s   t |ƒ| _d S r    )r   Úsym_visitor©r   rY   r   r   r   r   ¯   s   zRootVisitor.__init__r   r   c                 K   s   |  ¡ D ]}| j |¡ qd S r    ©Úiter_child_nodesrZ   r   ©r   r   r   Úchildr   r   r   Ú_simple_visit²   s   ÿzRootVisitor._simple_visitc                 K   ó   |j D ]}| j |¡ qd S r    ©ÚbodyrZ   r   r^   r   r   r   Úvisit_AssignBlock¾   ó   
ÿzRootVisitor.visit_AssignBlockc                 K   s"   |j dd�D ]}| j |¡ qd S )N)Úcall)Úexcluder\   r^   r   r   r   Úvisit_CallBlockÂ   s   ÿzRootVisitor.visit_CallBlockc                 K   ra   r    rb   r^   r   r   r   Úvisit_OverlayScopeÆ   re   zRootVisitor.visit_OverlayScoperc   Ú
for_branchc                 K   s’   |dkr| j j|jdd� |j}n'|dkr|j}n|dkr4| j j|jdd� |jd ur2| j  |j¡ d S tdƒ‚|rE|D ]
}| j  |¡ q<d S d S )Nrc   T)Ústore_as_paramÚelseÚtestzUnknown for branch)rZ   r   r(   rc   Úelse_rm   ÚRuntimeError)r   r   rj   r   rD   Úitemr   r   r   Ú	visit_ForÊ   s    
þzRootVisitor.visit_Forc                 K   s4   |j D ]}| j |¡ q|jD ]}| j |¡ qd S r    )ÚtargetsrZ   r   rc   )r   r   r   r(   r_   r   r   r   Ú
visit_WithÞ   s
   

ÿzRootVisitor.visit_WithÚargsc                 O   s   t dt|ƒj›�ƒ‚)NzCannot find symbols for )ÚNotImplementedErrorÚtyperL   )r   r   rt   r   r   r   r   Úgeneric_visitä   s   zRootVisitor.generic_visit©rY   r
   r   N)rc   )rL   rM   rN   r   r   rR   rO   rS   r`   Úvisit_TemplateÚvisit_BlockÚvisit_MacroÚvisit_FilterBlockÚvisit_ScopeÚvisit_IfÚvisit_ScopedEvalContextModifierÚAssignBlockrd   Ú	CallBlockrh   ÚOverlayScoperi   ÚForrT   rq   ÚWithrs   rw   r   r   r   r   r!   ®   s2    
ÿÿÿÿ
þ$r!   c                	   @   s¨  e Zd ZdZd*dd„Z	d+d	ejd
edej	ddfdd„Z
d	ejdej	ddfdd„Zd	ejdej	ddfdd„Zd	ejdej	ddfdd„Zd	ejdej	ddfdd„Zd	ejdej	ddfdd„Zd	ejdej	ddfdd„Zd	ejdej	ddfdd„Zd	ejdej	ddfdd„Zd	ejdej	ddfdd„Zd	ejdej	ddfd d!„Zd	ejdej	ddfd"d#„Z d	ej!dej	ddfd$d%„Z"d	ej#dej	ddfd&d'„Z$d	ej%dej	ddfd(d)„Z&dS ),r   zA visitor for `Frame.inspect`.rY   r
   r   Nc                 C   s
   || _ d S r    )rY   r[   r   r   r   r   ë   s   
zFrameSymbolVisitor.__init__Fr   rk   r   c                 K   s\   |s|j dkr| j |j¡ dS |j dkr| j |j¡ dS |j dkr,| j |j¡ dS dS )z2All assignments to names go through this function.r   r>   r#   N)ÚctxrY   r@   r"   r>   r#   )r   r   rk   r   r   r   r   Ú
visit_Nameî   s   

ÿzFrameSymbolVisitor.visit_Namec                 K   ó   | j  |j¡ d S r    )rY   r#   r"   ©r   r   r   r   r   r   Úvisit_NSRefù   ó   zFrameSymbolVisitor.visit_NSRefc                    st   ˆj |jfi ˆ ¤Ž ˆj‰dtjtj ddf‡ ‡‡fdd„}||jƒ}||jƒ}||j	p-dƒ}ˆj 
|||g¡ d S )Nr   r   r
   c                    s4   ˆ  ¡  ˆ_}| D ]}ˆj|fi ˆ ¤Ž q	ˆˆ_|S r    )r8   rY   r   )r   r0   Úsubnode©r   Úoriginal_symbolsr   r   r   Úinner_visit   s
   z0FrameSymbolVisitor.visit_If.<locals>.inner_visitr   )r   rm   rY   rO   ÚIterabler   rR   rc   Úelif_rn   rF   )r   r   r   rŽ   Úbody_symbolsÚelif_symbolsÚelse_symbolsr   rŒ   r   r~   ü   s   "
	
zFrameSymbolVisitor.visit_Ifc                 K   r‡   r    )rY   r>   r"   rˆ   r   r   r   r{     rŠ   zFrameSymbolVisitor.visit_Macroc                 K   s$   | j |fi |¤Ž | j |j¡ d S r    )rw   rY   r>   r(   rˆ   r   r   r   Úvisit_Import  s   zFrameSymbolVisitor.visit_Importc                 K   sJ   | j |fi |¤Ž |jD ]}t|tƒr| j |d ¡ q| j |¡ qd S )Nr   )rw   ÚnamesÚ
isinstanceÚtuplerY   r>   )r   r   r   r"   r   r   r   Úvisit_FromImport  s   

üz#FrameSymbolVisitor.visit_FromImportc                 K   s,   | j |jfi |¤Ž | j |jfi |¤Ž dS )z'Visit assignments in the correct order.N)r   r   r(   rˆ   r   r   r   Úvisit_Assign  s   zFrameSymbolVisitor.visit_Assignc                 K   ó   | j |jfi |¤Ž dS )zqVisiting stops at for blocks.  However the block sequence
        is visited as part of the outer scope.
        N)r   Úiterrˆ   r   r   r   rq   #  s   zFrameSymbolVisitor.visit_Forc                 K   ó   | j |jfi |¤Ž d S r    )r   rf   rˆ   r   r   r   rh   )  ó   z"FrameSymbolVisitor.visit_CallBlockc                 K   rœ   r    )r   Úfilterrˆ   r   r   r   r|   ,  r�   z$FrameSymbolVisitor.visit_FilterBlockc                 K   s   |j D ]}|  |¡ qd S r    )Úvaluesr   )r   r   r   r(   r   r   r   rs   /  s   
ÿzFrameSymbolVisitor.visit_Withc                 K   rš   )zStop visiting at block assigns.N)r   r(   rˆ   r   r   r   rd   3  s   z$FrameSymbolVisitor.visit_AssignBlockc                 K   ó   dS )zStop visiting at scopes.Nr   rˆ   r   r   r   r}   7  ó    zFrameSymbolVisitor.visit_Scopec                 K   r    )zStop visiting at blocks.Nr   rˆ   r   r   r   rz   :  r¡   zFrameSymbolVisitor.visit_Blockc                 K   r    )z!Do not visit into overlay scopes.Nr   rˆ   r   r   r   ri   =  r¡   z%FrameSymbolVisitor.visit_OverlayScoperx   )F)'rL   rM   rN   Ú__doc__r   r   ÚNameÚboolrO   rS   r†   ÚNSRefr‰   ÚIfr~   ÚMacror{   ÚImportr”   Ú
FromImportr˜   ÚAssignr™   rƒ   rq   r�   rh   ÚFilterBlockr|   r„   rs   r€   rd   ÚScoper}   ÚBlockrz   r‚   ri   r   r   r   r   r   è   s6    
ÿÿÿÿ
þ	r   r    )ÚtypingrO   Ú r   r   r   ÚTYPE_CHECKINGÚtyping_extensionsÚter?   rA   r;   r<   r�   rR   rP   r   r   r
   r!   r   r   r   r   r   Ú<module>   s:    ÿ
ÿÿ
þÿÿÿ
þ :