
    wdf#                         d dl mZ d dlmZ dZdZdZdZddZdd	Z	 G d
 de
          Z G d de          Z G d de          ZdS )   )	iteritems)NodeVisitorparamresolvealias	undefinedNc                 x    t          |          }t          |          }| D ]}|                    |           |S N)parent)SymbolsFrameSymbolVisitorvisit)nodesparent_symbolssymvisitornodes        V/var/www/book.euthymeo.com/html/venv/lib/python3.11/site-packages/jinja2/idtracking.pyfind_symbolsr   
   sH    

(
(
(C %%G  dJ    c                 P    t          |          }|                    |            |S r
   )r   analyze_node)r   r   r   s      r   symbols_for_noder      s+    

(
(
(CTJr   c                   `    e Zd ZddZd ZddZd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd ZdS )r   Nc                     ||d}n
|j         dz   }|| _         || _        i | _        i | _        t	                      | _        d S )N    r   )levelr   refsloadssetstores)selfr   r   s      r   __init__zSymbols.__init__   sJ    =~q(
	
eer   c                 @    t          |           } |j        |fi | d S N)RootVisitorr   )r"   r   kwargsr   s       r   r   zSymbols.analyze_node%   s/    d##d%%f%%%%%r   c                 J    d| j         |fz  }|| j        |<   |
|| j        |<   |S )Nzl_%d_%s)r   r   r   )r"   nameloadidents       r   _define_refzSymbols._define_ref)   s5    TZ..	$ $DJur   c                 t    || j         v r| j         |         S | j        | j                            |          S d S r%   )r   r   	find_load)r"   targets     r   r.   zSymbols.find_load0   sB    TZ:f%%;";((000 #"r   c                 t    || j         v r| j         |         S | j        | j                            |          S d S r%   )r   r   find_refr"   r)   s     r   r1   zSymbols.find_ref6   sA    499T?";";''--- #"r   c                 X    |                      |          }|t          d|z            |S )NzITried to resolve a name to a reference that was unknown to the frame (%r))r1   AssertionError)r"   r)   rvs      r   refzSymbols.ref<   s>    ]]4  : 0267   	r   c                 6   t                               | j                  }|j                            | j                   | j                                        |_        | j                                        |_        | j                                        |_        |S r%   )	object__new__	__class____dict__updater   copyr   r!   )r"   r5   s     r   r=   zSymbols.copyE   sm    ^^DN++
4=)))).."":??$$K$$&&		r   c                    | j                             |           || j        vrc| j        <| j                            |          }| |                     |t          |f           d S |                     |t          d f           d S d S N)r*   )r!   addr   r   r1   r,   VAR_LOAD_ALIASVAR_LOAD_UNDEFINED)r"   r)   	outer_refs      r   storezSymbols.storeM   s     ty   {& K0066	($$T0K$LLLF T);T(BCCCCC ! r   c                 r    | j                             |           |                     |t          d f          S r?   )r!   r@   r,   VAR_LOAD_PARAMETERr2   s     r   declare_parameterzSymbols.declare_parameter_   s5    ,>+EFFFr   c                 t    |                      |          }| |                     |t          |f           d S d S r?   )r1   r,   VAR_LOAD_RESOLVE)r"   r)   r/   s      r   r*   zSymbols.loadc   sD    t$$>T)94(@AAAAA >r   c                 X   i }|D ]2}|j         D ](}|| j         v r|                    |d          dz   ||<   )3|D ]_}| j                            |j                   | j                            |j                   | j                             |j                    `t          |          D ]\  }}|t          |          k    r|                     |          }|
J d            | j        .| j                            |          }|t          |f| j        |<   ot          |f| j        |<   d S )Nr   r   zshould not happen)r!   getr   r<   r   r   lenr1   r   rA   rI   )	r"   branch_symbolsr!   branchr/   r   r)   branch_countouter_targets	            r   branch_updatezSymbols.branch_updateh   sc   $ 	; 	;F - ; ;T[((!'FA!6!6!:v;
 " 	+ 	+CISX&&&Jci(((Ksz****"+F"3"3 	: 	:D,s>2222]]4((F%%':%%%{&#{33D99+*8,)GDJv&"2D!9DJv	: 	:r   c                 p    i }| }|/|j         D ]}||vr|                     |          ||<   |j        }|/|S r%   )r!   r1   r   )r"   r5   r   r)   s       r   dump_storeszSymbols.dump_stores   sX     3 3r>>#}}T22BtH;D	 
 	r   c                     t                      }| }|Ft          | j                  D ](\  }\  }}|t          k    r|                    |           )|j        }|F|S r%   )r    r   r   rF   r@   r   )r"   r5   r   r/   instr_s         r   dump_param_targetszSymbols.dump_param_targets   sj    UU&/
&;&; # #"
...FF6NNN;D	 
 	r   )NNr%   )__name__
__module____qualname__r#   r   r,   r.   r1   r6   r=   rD   rG   r*   rQ   rS   rW    r   r   r   r      s        
 
 
 
& & &   1 1 1. . .    D D D$G G GB B B
: : :4      r   r   c                   \    e Zd Zd Zd ZexZxZxZxZxZ	xZ
Zd Zd Zd ZddZd Zd	 Zd
S )r&   c                 .    t          |          | _        d S r%   )r   sym_visitorr"   symbolss     r   r#   zRootVisitor.__init__   s    -g66r   c                 h    |                                 D ]}| j                            |           d S r%   iter_child_nodesr^   r   r"   r   r'   childs       r   _simple_visitzRootVisitor._simple_visit   sA    **,, 	* 	*E""5))))	* 	*r   c                 N    |j         D ]}| j                            |           d S r%   bodyr^   r   rd   s       r   visit_AssignBlockzRootVisitor.visit_AssignBlock   7    Y 	* 	*E""5))))	* 	*r   c                 l    |                     d          D ]}| j                            |           d S )N)call)excluderb   rd   s       r   visit_CallBlockzRootVisitor.visit_CallBlock   sF    **9*== 	* 	*E""5))))	* 	*r   c                 N    |j         D ]}| j                            |           d S r%   rh   rd   s       r   visit_OverlayScopezRootVisitor.visit_OverlayScope   rk   r   ri   c                 ~   |dk    r)| j                             |j        d           |j        }nl|dk    r|j        }n^|dk    rI| j                             |j        d           |j        | j                             |j                   d S t          d          |pdD ]}| j                             |           d S )Nri   T)store_as_paramelsetestzUnknown for branchr[   )r^   r   r/   ri   else_ru   RuntimeError)r"   r   
for_branchr'   rN   items         r   	visit_ForzRootVisitor.visit_For   s    ""4;t"DDDYFF6!!ZFF6!!""4;t"DDDy$ &&ty111F3444Lb 	) 	)D""4((((	) 	)r   c                     |j         D ]}| j                            |           |j        D ]}| j                            |           d S r%   )targetsr^   r   ri   )r"   r   r'   r/   re   s        r   
visit_WithzRootVisitor.visit_With   sb    l 	+ 	+F""6****Y 	* 	*E""5))))	* 	*r   c                 :    t          d|j        j        z            )NzCannot find symbols for %r)NotImplementedErrorr:   rX   )r"   r   argsr'   s       r   generic_visitzRootVisitor.generic_visit   s!    !(4>+BB
 
 	
r   N)ri   )rX   rY   rZ   r#   rf   visit_Templatevisit_Blockvisit_Macrovisit_FilterBlockvisit_Scopevisit_Ifvisit_ScopedEvalContextModifierrj   ro   rq   rz   r}   r   r[   r   r   r&   r&      s        7 7 7* * * DQQN QQ 	Q
 	Q 	Q !@* * ** * ** * *) ) ) ) * * *
 
 
 
 
r   r&   c                   t    e Zd ZdZd ZddZd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd ZdS )r   zA visitor for `Frame.inspect`.c                     || _         d S r%   )r`   r_   s     r   r#   zFrameSymbolVisitor.__init__   s    r   Fc                    |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   rD   r*   N)ctxr`   rG   r)   rD   r*   )r"   r   rs   r'   s       r   
visit_NamezFrameSymbolVisitor.visit_Name   s     	)TX00L**4955555X  Lty)))))XLdi(((((  r   c                 D    | j                             |j                   d S r%   )r`   r*   r)   r"   r   r'   s      r   visit_NSRefzFrameSymbolVisitor.visit_NSRef   s     $)$$$$$r   c                        j         |j        fi   j         fd} ||j                  } ||j                  } ||j        pd          } j                            |||g           d S )Nc                 r                                     x_        }| D ]} j        |fi  _        |S r%   )r=   r`   r   )r   r5   subnoder'   original_symbolsr"   s      r   inner_visitz0FrameSymbolVisitor.visit_If.<locals>.inner_visit   sS     0 5 5 7 77DL2  . .
7--f----+DLIr   r[   )r   ru   r`   ri   elif_rv   rQ   )r"   r   r'   r   body_symbolselif_symbolselse_symbolsr   s   ` `    @r   r   zFrameSymbolVisitor.visit_If   s    
49'''''<	 	 	 	 	 	 	 #{49--"{4:.."{4:#344""L,#MNNNNNr   c                 D    | j                             |j                   d S r%   )r`   rD   r)   r   s      r   r   zFrameSymbolVisitor.visit_Macro   s     49%%%%%r   c                 `     | j         |fi | | j                            |j                   d S r%   )r   r`   rD   r/   r   s      r   visit_ImportzFrameSymbolVisitor.visit_Import   s;    4**6***4;'''''r   c                      | j         |fi | |j        D ]R}t          |t                    r!| j                            |d                    8| j                            |           Sd S )Nr   )r   names
isinstancetupler`   rD   )r"   r   r'   r)   s       r   visit_FromImportz#FrameSymbolVisitor.visit_FromImport   s    4**6***J 	) 	)D$&& )""47++++""4((((		) 	)r   c                 R     | j         |j        fi |  | j         |j        fi | dS )z'Visit assignments in the correct order.N)r   r   r/   r   s      r   visit_AssignzFrameSymbolVisitor.visit_Assign  s@    
49'''''
4;))&)))))r   c                 ,     | 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   s      r   rz   zFrameSymbolVisitor.visit_For  s&     	
49'''''''r   c                 ,     | j         |j        fi | d S r%   )r   rm   r   s      r   ro   z"FrameSymbolVisitor.visit_CallBlock  s$    
49'''''''r   c                 ,     | j         |j        fi | d S r%   )r   filterr   s      r   r   z$FrameSymbolVisitor.visit_FilterBlock  s$    
4;))&)))))r   c                 D    |j         D ]}|                     |           d S r%   )valuesr   )r"   r   r'   r/   s       r   r}   zFrameSymbolVisitor.visit_With  s2    k 	 	FJJv	 	r   c                 ,     | j         |j        fi | dS )zStop visiting at block assigns.N)r   r/   r   s      r   rj   z$FrameSymbolVisitor.visit_AssignBlock  s$    
4;))&)))))r   c                     dS )zStop visiting at scopes.Nr[   r   s      r   r   zFrameSymbolVisitor.visit_Scope        r   c                     dS )zStop visiting at blocks.Nr[   r   s      r   r   zFrameSymbolVisitor.visit_Block  r   r   c                     dS )z!Do not visit into overlay scopes.Nr[   r   s      r   rq   z%FrameSymbolVisitor.visit_OverlayScope!  r   r   N)F)rX   rY   rZ   __doc__r#   r   r   r   r   r   r   r   rz   ro   r   r}   rj   r   r   rq   r[   r   r   r   r      s       ((  ) ) ) )% % %O O O$& & &( ( () ) )* * *
( ( (( ( (* * *  * * *' ' '' ' '0 0 0 0 0r   r   r%   )_compatr   r   r   rF   rI   rA   rB   r   r   r8   r   r&   r   r[   r   r   <module>r      s                              | | | | |f | | |~5
 5
 5
 5
 5
+ 5
 5
 5
pS0 S0 S0 S0 S0 S0 S0 S0 S0 S0r   