a
    é´«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ejej ejd	 d	d
œdd„Zdejejd	 d	dœ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Ú	undefinedÚSymbols)r   Úparent_symbolsÚreturnc                 C   s*   t |d�}t|ƒ}| D ]}| |¡ q|S ©N)Úparent)r	   ÚFrameSymbolVisitorÚvisit)r   r
   ÚsymÚvisitorÚnode© r   úP/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/jinja2/idtracking.pyÚfind_symbols   s
    
r   )r   r
   r   c                 C   s   t |d�}| | ¡ |S r   )r	   Úanalyze_node)r   r
   r   r   r   r   Úsymbols_for_node   s    

r   c                   @   s*  e Zd Zd$ejd  eje ddœdd„Zejej	ddœdd„Z
d%eejejeeje f  edœd	d
„Zeejej	 dœdd„Zeeje dœdd„Zeedœdd„Zddœdd„Zeddœdd„Zeedœdd„Zeddœdd„Zejd  ddœdd„Zejeef dœd d!„Zeje dœd"d#„ZdS )&r	   N)r   Ú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   Úkwargsr   c                 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Úloadr   c                 C   s2   d| j › d|› �}|| j|< |d ur.|| j|< |S )NZl_Ú_)r   r   r   )r   r#   r$   Úidentr   r   r   Ú_define_ref5   s
    

zSymbols._define_ref)Útargetr   c                 C   s.   || j v r| j | S | jd ur*| j |¡S d S r!   )r   r   Ú	find_load)r   r(   r   r   r   r)   >   s
    


zSymbols.find_load)r#   r   c                 C   s.   || j v r| j | S | jd ur*| j |¡S d S r!   )r   r   Úfind_ref©r   r#   r   r   r   r*   G   s
    


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.refzte.Self)r   c                 C   sB   t  | j¡}|j | j¡ | j ¡ |_| j ¡ |_| j ¡ |_|S r!   )	ÚobjectÚ__new__Ú	__class__Ú__dict__Úupdater   Úcopyr   r   )r   r.   r   r   r   r5   Y   s    zSymbols.copyc                 C   s`   | j  |¡ || jvr\| jd urJ| j |¡}|d u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   Ústorea   s    

zSymbols.storec                 C   s   | j  |¡ | j|td fd�S r6   )r   r7   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 r6   )r*   r'   ÚVAR_LOAD_RESOLVEr+   r   r   r   r$   w   s    zSymbols.load)Úbranch_symbolsr   c                 C   sÀ   t ƒ }|D ]}| |j¡ q
| | j¡ |D ].}| j |j¡ | j |j¡ | j |j¡ q,|D ]Z}|  |¡}|d us~J dƒ‚| jd ur¬| j |¡}|d ur¬t|f| j|< q`t	|f| j|< q`d S )Nzshould not happen)
r   r4   r   Údifference_updater   r   r*   r   r8   r=   )r   r>   r   Úbranchr   r#   r(   Zouter_targetr   r   r   Úbranch_update{   s"    

zSymbols.branch_updatec                 C   sB   i }| }|d ur>t |jƒD ]}||vr|  |¡||< q|j}q|S r!   )Úsortedr   r*   r   )r   r.   r   r#   r   r   r   Údump_stores“   s    zSymbols.dump_storesc                 C   sH   t ƒ }| }|d urD| j ¡ D ]\}\}}|tkr| |¡ q|j}q
|S r!   )r   r   Úitemsr;   r7   r   )r   r.   r   r(   Úinstrr%   r   r   r   Údump_param_targets    s    zSymbols.dump_param_targets)NN)N)Ú__name__Ú
__module__Ú__qualname__ÚtÚOptionalÚintr   r   ÚNodeÚAnyr   ÚstrÚTupler'   r)   r*   r/   r5   r:   r<   r$   ÚSequencerA   ÚDictrC   ÚSetrF   r   r   r   r   r	   !   s*    ÿþ ÿþ				c                   @   sÚ   e Zd Zdddœdd„Zejejddœdd„ZeZ	eZ
eZeZeZeZeZejejddœd	d
„Zejejddœdd„Zejejddœdd„Zdejeejddœdd„Zejejddœdd„Zejejejddœdd„ZdS )r"   r	   N©Úsymbolsr   c                 C   s   t |ƒ| _d S r!   )r   Úsym_visitor©r   rU   r   r   r   r   ¯   s    zRootVisitor.__init__r   c                 K   s   |  ¡ D ]}| j |¡ qd S r!   ©Úiter_child_nodesrV   r   ©r   r   r    Úchildr   r   r   Ú_simple_visit²   s    zRootVisitor._simple_visitc                 K   s   |j D ]}| j |¡ qd S r!   ©ÚbodyrV   r   rZ   r   r   r   Úvisit_AssignBlock¾   s    
zRootVisitor.visit_AssignBlockc                 K   s"   |j dd�D ]}| j |¡ qd S )N)Úcall)ÚexcluderX   rZ   r   r   r   Úvisit_CallBlockÂ   s    zRootVisitor.visit_CallBlockc                 K   s   |j D ]}| j |¡ qd S r!   r]   rZ   r   r   r   Úvisit_OverlayScopeÆ   s    
zRootVisitor.visit_OverlayScoper^   )r   Ú
for_branchr    r   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 urd| j  |j¡ d S tdƒ‚|rŠ|D ]}| j  |¡ qxd S )Nr^   T)Ústore_as_paramÚelseÚtestzUnknown for branch)rV   r   r(   r^   Úelse_rg   ÚRuntimeError)r   r   rd   r    r@   Úitemr   r   r   Ú	visit_ForÊ   s    
zRootVisitor.visit_Forc                 K   s4   |j D ]}| j |¡ q|jD ]}| j |¡ qd S r!   )ÚtargetsrV   r   r^   )r   r   r    r(   r[   r   r   r   Ú
visit_WithÞ   s    

zRootVisitor.visit_With)r   Úargsr    r   c                 O   s   t dt|ƒj›�ƒ‚d S )NzCannot find symbols for )ÚNotImplementedErrorÚtyperG   )r   r   rn   r    r   r   r   Úgeneric_visitä   s    zRootVisitor.generic_visit)r^   )rG   rH   rI   r   r   rM   rJ   rN   r\   Zvisit_TemplateÚvisit_BlockÚvisit_MacroÚvisit_FilterBlockÚvisit_ScopeÚvisit_IfZvisit_ScopedEvalContextModifierÚAssignBlockr_   Ú	CallBlockrb   ÚOverlayScoperc   ÚForrO   rk   ÚWithrm   rq   r   r   r   r   r"   ®   s&    ÿ
þr"   c                   @   sn  e Zd ZdZdddœdd„Zd(ejeej	ddœd	d
„Z
ejej	ddœdd„Zejej	ddœdd„Zejej	ddœdd„Zejej	ddœdd„Zejej	ddœdd„Zejej	ddœdd„Zejej	ddœdd„Zejej	ddœdd„Zejej	ddœdd„Zejej	ddœdd„Zejej	ddœd d!„Z ej!ej	ddœd"d#„Z"ej#ej	ddœd$d%„Z$ej%ej	ddœd&d'„Z&dS ))r   zA visitor for `Frame.inspect`.r	   NrT   c                 C   s
   || _ d S r!   )rU   rW   r   r   r   r   ë   s    zFrameSymbolVisitor.__init__F)r   re   r    r   c                 K   sT   |s|j dkr| j |j¡ n2|j dkr8| j |j¡ n|j dkrP| j |j¡ dS )z2All assignments to names go through this function.r   r:   r$   N)ÚctxrU   r<   r#   r:   r$   )r   r   re   r    r   r   r   Ú
visit_Nameî   s    

zFrameSymbolVisitor.visit_Namer   c                 K   s   | j  |j¡ d S r!   )rU   r$   r#   ©r   r   r    r   r   r   Úvisit_NSRefù   s    zFrameSymbolVisitor.visit_NSRefc                    sr   ˆj |jfi ˆ ¤Ž ˆj‰tjtj ddœ‡ ‡‡fdd„}||jƒ}||jƒ}||j	pXdƒ}ˆj 
|||g¡ d S )Nr	   )r   r   c                    s4   ˆ  ¡  ˆ_}| D ]}ˆj|fi ˆ ¤Ž qˆˆ_|S r!   )r5   rU   r   )r   r.   Zsubnode©r    Zoriginal_symbolsr   r   r   Úinner_visit   s
    z0FrameSymbolVisitor.visit_If.<locals>.inner_visitr   )r   rg   rU   rJ   ÚIterabler   rM   r^   Zelif_rh   rA   )r   r   r    r�   Zbody_symbolsZelif_symbolsZelse_symbolsr   r€   r   rv   ü   s     	

zFrameSymbolVisitor.visit_Ifc                 K   s   | j  |j¡ d S r!   )rU   r:   r#   r~   r   r   r   rs     s    zFrameSymbolVisitor.visit_Macroc                 K   s$   | j |fi |¤Ž | j |j¡ d S r!   )rq   rU   r:   r(   r~   r   r   r   Úvisit_Import  s    zFrameSymbolVisitor.visit_Importc                 K   sJ   | j |fi |¤Ž |jD ],}t|tƒr8| j |d ¡ q| j |¡ qd S )Nr   )rq   ÚnamesÚ
isinstanceÚtuplerU   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   s   | 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   rk   #  s    zFrameSymbolVisitor.visit_Forc                 K   s   | j |jfi |¤Ž d S r!   )r   r`   r~   r   r   r   rb   )  s    z"FrameSymbolVisitor.visit_CallBlockc                 K   s   | j |jfi |¤Ž d S r!   )r   Úfilterr~   r   r   r   rt   ,  s    z$FrameSymbolVisitor.visit_FilterBlockc                 K   s   |j D ]}|  |¡ qd S r!   )Úvaluesr   )r   r   r    r(   r   r   r   rm   /  s    
zFrameSymbolVisitor.visit_Withc                 K   s   | j |jfi |¤Ž dS )zStop visiting at block assigns.N)r   r(   r~   r   r   r   r_   3  s    z$FrameSymbolVisitor.visit_AssignBlockc                 K   s   dS )zStop visiting at scopes.Nr   r~   r   r   r   ru   7  s    zFrameSymbolVisitor.visit_Scopec                 K   s   dS )zStop visiting at blocks.Nr   r~   r   r   r   rr   :  s    zFrameSymbolVisitor.visit_Blockc                 K   s   dS )z!Do not visit into overlay scopes.Nr   r~   r   r   r   rc   =  s    z%FrameSymbolVisitor.visit_OverlayScope)F)'rG   rH   rI   Ú__doc__r   r   ÚNameÚboolrJ   rN   r}   ZNSRefr   ÚIfrv   ZMacrors   ÚImportrƒ   Z
FromImportr‡   ÚAssignrˆ   rz   rk   rx   rb   ZFilterBlockrt   r{   rm   rw   r_   ZScoperu   ZBlockrr   ry   rc   r   r   r   r   r   è   s*    ÿ
þ	r   )N)N)ÚtypingrJ   Ú r   r   r   ÚTYPE_CHECKINGZtyping_extensionsÚter;   r=   r8   r9   r‚   rM   rK   r   r   r	   r"   r   r   r   r   r   Ú<module>   s,    ÿþ ÿþ :