
    h!                    2   S r SSKrSSKJr  SSKJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  SS	KJr  S
SKJr  S
SKJr  S
SKJr  S
SKJr  S
SKJr  S
SKJr  S
SKJr  S
SKJr  S
SKJr  S
SKJr  S
SKJ r   S
SK!J"r"  \RF                  (       a
  SSK$r%S
SK&J'r'  \RP                  " S\RR                  S\RT                  4   S9r+SSSSSS S!S"S#.r,S$\+S%\+4S& jr-S'\.S%\RR                  S(\R^                  S)/S4   4S* jr0S'\.S%\RR                  S(\Rb                  S)/S4   4S+ jr2   SFS,\Rf                  S-S.S/\Rh                  \.   S0\Rh                  \.   S1\Rh                  \Rj                     S2\6S3\6S%\Rh                  \.   4S4 jjr7S5\RT                  S%\64S6 jr8S7\Rr                  \Rt                     S8\Rr                  \.   S%\Rv                  \.   4S9 jr< " S: S;5      r= " S< S)5      r> " S= S>\?5      r@ " S? S@\"5      rA " SA SB\"5      rB " SC SD\C5      rD " SE S(\"5      rEg)Gz0Compiles nodes from the parser into Python code.    N)contextmanager)update_wrapper)StringIO)chain)	iskeyword)escape)Markup   )nodes)TemplateAssertionError)Symbols)VAR_LOAD_ALIAS)VAR_LOAD_PARAMETER)VAR_LOAD_RESOLVE)VAR_LOAD_UNDEFINED)EvalContext)	Optimizer)_PassArg)concat)NodeVisitor)EnvironmentF.)boundz==z!=>z>=<z<=inznot in)eqnegtgteqltlteqr   notinfreturnc           
         ^  SSS[         R                  SSS[        R                  S[        R                  4
U 4S jjn[	        UT 5      $ )	NselfCodeGeneratornodeframeFramekwargsr%   c                    > U R                   bV  UR                  R                  (       d;  U R                   R                  XR                  5      nXA:w  a  U R                  XB5      $ T" XU40 UD6$ N)	optimizereval_ctxvolatilevisit)r'   r)   r*   r,   new_noder$   s        G/var/www/auris/envauris/lib/python3.13/site-packages/jinja2/compiler.pynew_funcoptimizeconst.<locals>.new_func.   sZ     >>%enn.E.E~~++D..AHzz(22U-f--    )r   ExprtAnyr   )r$   r5   s   ` r4   optimizeconstr;   -   sK    
.
.%*ZZ
.8?
.KL55
.	

. (A&&r7   opr(   r+   c           	      ^   ^  [         SSS[        R                  S[        SS 4U 4S jj5       nU$ )Nr'   r(   r)   r*   r%   c                   > U R                   R                  (       az  TU R                   R                  ;   a`  U R                  ST< S35        U R	                  UR
                  U5        U R                  S5        U R	                  UR                  U5        O^U R                  S5        U R	                  UR
                  U5        U R                  ST S35        U R	                  UR                  U5        U R                  S5        g )Nz environment.call_binop(context, , ( ))environment	sandboxedintercepted_binopswriter2   leftrightr'   r)   r*   r<   s      r4   visitor_make_binop.<locals>.visitor>   s     &&21A1A1T1T+TJJ9"rBCJJtyy%(JJtJJtzz5)JJsOJJtyy%(JJ2$ay!JJtzz5)

3r7   )r;   r   BinExprr+   r<   rJ   s   ` r4   _make_binoprN   =   s<    o U]] 5 T    Nr7   c           	      ^   ^  [         SSS[        R                  S[        SS 4U 4S jj5       nU$ )Nr'   r(   r)   r*   r%   c                 X  > U R                   R                  (       aM  TU R                   R                  ;   a3  U R                  ST< S35        U R	                  UR
                  U5        O0U R                  ST-   5        U R	                  UR
                  U5        U R                  S5        g )Nzenvironment.call_unop(context, r?   r@   rB   )rC   rD   intercepted_unopsrF   r2   r)   rI   s      r4   rJ   _make_unop.<locals>.visitorU   s|     &&21A1A1S1S+SJJ8bABJJtyy%(JJsRx JJtyy%(

3r7   )r;   r   	UnaryExprr+   rM   s   ` r4   
_make_unoprT   R   s>     
o 
U__ 
U 
t 
 
 Nr7   r)   rC   r   namefilenamestream
defer_init	optimizedc                     [        U [        R                  5      (       d  [        S5      eUR	                  XX4XV5      nUR                  U 5        Uc  UR                  R                  5       $ g)z+Generate the python source for a node tree.z Can't compile non template nodesN)
isinstancer   Template	TypeErrorcode_generator_classr2   rW   getvalue)r)   rC   rU   rV   rW   rX   rY   	generators           r4   generatera   e   sc     dENN++:;;008ZI OOD~((**r7   valuec                 d   U b  U [         L d	  U [        L a  g[        U 5      [        [        [
        [        [        [        [        1;   a  g[        U 5      [        [        [        [        1;   a  [        S U  5       5      $ [        U 5      [        L a   [        S U R!                  5        5       5      $ g)z)Does the node have a safe representation?Tc              3   8   #    U  H  n[        U5      v   M     g 7fr.   has_safe_repr).0vs     r4   	<genexpr> has_safe_repr.<locals>.<genexpr>   s     3U=##U   c              3   `   #    U  H$  u  p[        U5      =(       a    [        U5      v   M&     g 7fr.   re   rg   krh   s      r4   ri   rj      s$     S]TQ=#8a(88]s   ,.F)NotImplementedEllipsistypeboolintfloatcomplexrangestrr	   tuplelistset	frozensetalldictitemsrb   s    r4   rf   rf   }   s    }/5H3DE{tS%%fEEE{udC333U333E{dSU[[]SSSr7   r   namesc                     [        U5      n U  H  nUR                  U5        M     UR                  $ ! [         a     UR                  $ f = f)zCheck if the names passed are accessed undeclared.  The return value
is a set of all the undeclared names from the sequence of names found.
)UndeclaredNameVisitorr2   VisitorExit
undeclared)r   r   rJ   r)   s       r4   find_undeclaredr      sW     $E*GDMM$    s   3 
A
Ac                   l    \ rS rSrS\R
                  \R                  \R                  4   SS4S jr	Sr
g)MacroRef   r)   r%   Nc                 :    Xl         SU l        SU l        SU l        g NF)r)   accesses_calleraccesses_kwargsaccesses_varargsr'   r)   s     r4   __init__MacroRef.__init__   s    	$$ %r7   )r   r   r   r)   )__name__
__module____qualname____firstlineno__r9   Unionr   Macro	CallBlockr   __static_attributes__ r7   r4   r   r      s+    &QWWU[[%//%AB &t &r7   r   c            	           \ rS rSrSr  SS\S\R                  S    S\R                  \   SS4S jjr	SS	 jr
SS
\SS 4S jjrSS jr\
rSrg)r+      z&Holds compile time information for us.Nr0   parentlevelr%   c                 H   Xl         X l        Uc$  [        US9U l        SU l        S U l        S U l        OL[        UR                  US9U l        UR                  U l        UR
                  U l        UR                  U l        SU l        SU l        SU l	        SU l
        SU l        g )Nr   F)r0   r   r   symbolsrequire_output_checkbufferblocktoplevel	rootlevel
loop_frameblock_frame
soft_frame)r'   r0   r   r   s       r4   r   Frame.__init__   s     ! >"/DL ).D% ,0DK +/DJ #6>>?DL(.(C(CD% --DKDJ 
    
  r7   c                     [         R                  U R                  5      nUR                  R	                  U R                  5        U R
                  R                  5       Ul        U$ )z!Create a copy of the current one.)object__new__	__class____dict__updater   copyr'   rvs     r4   r   
Frame.copy   sC    ^^DNN+
4==)\\&&(
	r7   isolatedc                     U(       a+  [        U R                  U R                  R                  S-   S9$ [        U R                  U 5      $ )zReturn an inner frame.r
   r   )r+   r0   r   r   )r'   r   s     r4   innerFrame.inner   s6    dll.@.@1.DEET]]D))r7   c                 B    U R                  5       nSUl        SUl        U$ )zReturn a soft frame.  A soft frame may not be modified as
standalone thing as it shares the resources with the frame it
was created of, but it's not a rootlevel frame any longer.

This is only used to implement if-statements and conditional
expressions.
FT)r   r   r   r   s     r4   soft
Frame.soft   s"     YY[	r7   )r   r   r   r0   r   r   r   r   r   r   r   )NN)r%   zte.SelfF)r   r   r   r   __doc__r   r9   Optionalrs   r   r   rr   r   r   __copy__r   r   r7   r4   r+   r+      sn    0
 '+!%	1 1  

7#1  zz#	1 
 
1 f*d *w * Hr7   c                       \ rS rSrSrSrg)r      z?Exception used by the `UndeclaredNameVisitor` to signal a stop.r   Nr   r   r   r   r   r   r   r7   r4   r   r      s    Ir7   r   c                       \ rS rSrSrSS jrS\R                  SS4S jrS\R                  SS4S jr
S\R                  SS4S	 jrS
rg)DependencyFinderVisitor   z.A visitor that collects filter and test calls.r%   Nc                 @    [        5       U l        [        5       U l        g r.   )rz   filterstestsr'   s    r4   r    DependencyFinderVisitor.__init__   s    #&5!$
r7   r)   c                 p    U R                  U5        U R                  R                  UR                  5        g r.   )generic_visitr   addrU   r   s     r4   visit_Filter$DependencyFinderVisitor.visit_Filter  s&    4 #r7   c                 p    U R                  U5        U R                  R                  UR                  5        g r.   )r   r   r   rU   r   s     r4   
visit_Test"DependencyFinderVisitor.visit_Test  s$    4 

tyy!r7   c                     g)zStop visiting at blocks.Nr   r   s     r4   visit_Block#DependencyFinderVisitor.visit_Block      r7   )r   r   r%   N)r   r   r   r   r   r   r   Filterr   Testr   Blockr   r   r   r7   r4   r   r      sO    8'$ $$ $"uzz "d "' ' 'r7   r   c                       \ rS rSrSrS\R                  \   SS4S jrS\	R                  SS4S jrS\	R                  SS4S	 jrS
rg)r   i  zA visitor that checks if a name is accessed without being
declared.  This is different from the frame visitor as it will
not stop at closure frames.
r   r%   Nc                 B    [        U5      U l        [        5       U l        g r.   )rz   r   r   )r'   r   s     r4   r   UndeclaredNameVisitor.__init__  s    Z
&)er7   r)   c                 6   UR                   S:X  ad  UR                  U R                  ;   aJ  U R                  R	                  UR                  5        U R                  U R                  :X  a
  [        5       eg U R                  R                  UR                  5        g )Nload)ctxrU   r   r   r   r   discardr   s     r4   
visit_Name UndeclaredNameVisitor.visit_Name  sh    88v$))tzz"9OO		*$**,!m# - JJtyy)r7   c                     g)zStop visiting a blocks.Nr   r   s     r4   r   !UndeclaredNameVisitor.visit_Block!  r   r7   )r   r   )r   r   r   r   r   r9   Iterablerw   r   r   Namer   r   r   r   r   r7   r4   r   r     sP    
,ajjo ,$ ,*uzz *d *& & &r7   r   c                       \ rS rSrSrSrg)CompilerExiti%  zRaised if the compiler encountered a situation where it just
doesn't make sense to further process the code.  Any block that
raises such an exception is not further processed.
r   Nr   r   r7   r4   r   r   %  s    r7   r   c                   4   \ rS rSr%    SSSS\R
                  \   S\R
                  \   S\R
                  \R                     S\S	\S
S4S jjr	\
S
\4S j5       rS\S\S
S4S jrS
\4S jrS\S
S4S jr SS\S\S
S4S jjrSS jrSS\S
S4S jjrSS\S\R
                  \R*                     S
S4S jjrS\S
S4S jr SS\S\S\R
                  \R*                     S
S4S jjrS\R2                  \R*                     S\S
S4S jrS \S
S4S! jr SS \S\R
                  \R*                     S"\S
S4S# jjrSS\R
                  \R*                     S"\S
S4S$ jjr SS\R<                  \R>                  \R@                  \RB                  4   S\S%\R
                  \RD                  \\RF                  4      S
S4S& jjr$S\R2                  \R*                     S
S4S' jr%S\S
S4S( jr&SS\S)\S
S4S* jjr'SS+\S,\S
\4S- jjr(S\S
\4S. jr)S\R<                  \RT                  \RV                  4   S\S
\RX                  \\-4   4S/ jr.S0\-S\S
S4S1 jr/S\R*                  S
\4S2 jr0S\S
\4S3 jr1SS4 jr2S\S
S4S5 jr3SS6 jr4S7\S
S4S8 jr5S7\S
S4S9 jr6SS: jr7S
\4S; jr8S
\4S< jr9S\S
\4S= jr:S7\S
\4S> jr;SS? jr<S\S
S4S@ jr= SS\R|                  S\R
                  \   S
S4SA jjr?S\R                  S\S
S4SB jrAS\R                  S\S
S4SC jrCS\R                  S\S
S4SD jrES\R<                  \R                  \R                  4   S\S
S4SE jrHS\R                  S\S
S4SF jrIS\R                  S\S
S4SG jrJS\R                  S\S
S4SH jrLS\R                  S\S
S4SI jrNS\RT                  S\S
S4SJ jrOS\RV                  S\S
S4SK jrPS\R                  S\S
S4SL jrRS\R                  S\S
S4SM jrTS\R                  S\S
S4SN jrV " SO SP\R                  5      rX\YSQ\RF                  S
\RF                  4SR j5       rZSr[\R
                  \X   \\SS'   S
\X4ST jr]SU\R2                  \RF                     S
\4SV jr^S\R                  S\SW\XS
\4SX jr`S\R                  S\SW\XS
S4SY jraS\R                  S\SW\XS
S4SZ jrbS\R                  S\S
S4S[ jrdS\R                  S\S
S4S\ jrfS\R                  S\S
S4S] jrhS\R                  S\S
S4S^ jrjS\R                  S\S
S4S_ jrlS\R                  S\S
S4S` jrnS\R                  S\S
S4Sa jrpS\RX                  S\S
S4Sb jrqS\R                  S\S
S4Sc jrsS\R                  S\S
S4Sd jru\v" Se5      rw\v" Sf5      rx\v" Sg5      ry\v" Sh5      rz\v" Si5      r{\v" Sj5      r|\v" Sk5      r}\v" Sl5      r~\v" Sm5      r\" Se5      r\" Sf5      r\" Sn5      r\S\GR
                  S\S
S4So j5       r\S\GR                  S\S
S4Sp j5       rS\GR                  S\S
S4Sq jr\S\GR                  S\S
S4Sr j5       r\S\GR                  S\S
S4Ss j5       rS\GR                  S\S
S4St jr\S\R<                  \R@                  \RB                  4   S\Su\S
\GR$                  S   4Sv j5       r\S\R@                  S\S
S4Sw j5       r\S\RB                  S\S
S4Sx j5       r\S\GR,                  S\S
S4Sy j5       r\ SS\R>                  S\Sz\S
S4S{ jj5       rS\GR2                  S\S
S4S| jrS\GR6                  S\S
S4S} jrS\GR:                  S\S
S4S~ jrS\GR>                  S\S
S4S jrS\GRB                  S\S
S4S jrS\GRF                  S\S
S4S jrS\GRJ                  S\S
S4S jrS\GRN                  S\S
S4S jrS\GRR                  S\S
S4S jrS\GRV                  S\S
S4S jrS\GRZ                  S\S
S4S jrS\GR^                  S\S
S4S jrS\GRb                  S\S
S4S jrS\GRf                  S\S
S4S jrS\GRj                  S\S
S4S jrSrg)r(   i,  NrC   r   rU   rV   rW   rX   rY   r%   c                    Uc
  [        5       nXl        X l        X0l        X@l        SU l        XPl        S U l        U(       a  [        U5      U l        0 U l	        0 U l
        SU l        SU l        SU l        0 U l        0 U l        / U l        S U l        SU l        SU l        SU l        SU l        SU l        / U l        / U l        S/U l        g )NFr   r
   Tcontext)r   rC   rU   rV   rW   created_block_contextrX   r/   r   import_aliasesblocksextends_so_farhas_known_extendscode_linenor   r   
debug_info_write_debug_info
_new_lines
_last_line_first_write_last_identifier_indentation_assign_stack_param_def_block_context_reference_stack)r'   rC   rU   rV   rW   rX   rY   s          r4   r   CodeGenerator.__init__-  s     >ZF&	 %*"$04&{3DN 13 13  
 "'  (*
)+ 6826   ! !"  24 57 *3%r7   c                     U R                   S L$ r.   )r/   r   s    r4   rY   CodeGenerator.optimizedv  s    ~~T))r7   msglinenozte.NoReturnc                 D    [        XU R                  U R                  5      e)z*Fail with a :exc:`TemplateAssertionError`.)r   rU   rV   )r'   r   r   s      r4   failCodeGenerator.fail|  s    $S$))T]]KKr7   c                 J    U =R                   S-  sl         SU R                    3$ )zGet a new unique identifier.r
   t_)r   r   s    r4   temporary_identifier"CodeGenerator.temporary_identifier  s'    "D))*++r7   r*   c                 j    U R                  5       Ul        U R                  UR                   S35        g)z7Enable buffering for the frame from that point onwards.z = []N)r  r   	writeliner'   r*   s     r4   r   CodeGenerator.buffer  s)    002%,,u-.r7   force_unescapedc                 >   U(       d  UR                   R                  (       a  U R                  S5        U R                  5         U R                  SUR                   S35        U R                  5         U R                  S5        U R                  5         U R                  SUR                   S35        U R                  5         gUR                   R                  (       a   U R                  SUR                   S35        gU R                  SUR                   S35        g)z(Return the buffer contents of the frame.zif context.eval_ctx.autoescape:zreturn Markup(concat())else:zreturn concat(rB   N)r0   r1   r	  indentr   outdent
autoescape)r'   r*   r  s      r4   return_buffer_contents$CodeGenerator.return_buffer_contents  s     ~~&&@A!6u||nBGHw'~Q?@**!6u||nBGH~Q78r7   c                 .    U =R                   S-  sl         g)zIndent by one.r
   Nr   r   s    r4   r  CodeGenerator.indent  s    Qr7   stepc                 .    U =R                   U-  sl         g)zOutdent by step.Nr  )r'   r  s     r4   r  CodeGenerator.outdent  s    T!r7   r)   c                     UR                   c  U R                  SU5        gU R                  UR                    S3U5        g)z%Yield or write into the frame buffer.Nyield .append()r   r	  )r'   r*   r)   s      r4   start_writeCodeGenerator.start_write  s3    <<NN8T*NNell^84d;r7   c                 B    UR                   b  U R                  S5        gg)z1End the writing process started by `start_write`.NrB   )r   rF   r
  s     r4   	end_writeCodeGenerator.end_write  s    <<#JJsO $r7   sc                 j    U R                  X#5        U R                  U5        U R                  U5        g)z4Simple shortcut for start_write + write + end_write.N)r  rF   r!  )r'   r#  r*   r)   s       r4   simple_writeCodeGenerator.simple_write  s)     	%

1ur7   r   c                 |     U R                  S5        U H  nU R                  X25        M     g! [         a     gf = f)zVisit a list of nodes as block in a frame.  If the current frame
is no buffer a dummy ``if 0: yield None`` is written automatically.
passN)r	  r2   r   )r'   r   r*   r)   s       r4   
blockvisitCodeGenerator.blockvisit  s;    	NN6"

4'  		s   +. 
;;xc                    U R                   (       a  U R                  (       d  U R                  R                  SU R                   -  5        U =R                  U R                   -  sl        U R
                  b8  U R                  R                  U R
                  U R                  45        SU l        SU l        U R                  R                  SU R                  -  5        SU l         U R                  R                  U5        g)z&Write a string into the output stream.
NFz    r   )	r   r   rW   rF   r   r   r   appendr   )r'   r+  s     r4   rF   CodeGenerator.write  s    ??$$!!$"89  DOO3 ))5OO**D,B,BDDTDT+UV-1D* %DKKft'8'889DO!r7   extrac                 H    U R                  X#5        U R                  U5        g)z!Combination of newline and write.N)newlinerF   )r'   r+  r)   r0  s       r4   r	  CodeGenerator.writeline  s     	T!

1r7   c                     [        U R                  SU-   5      U l        Ub>  UR                  U R                  :w  a#  UR                  U l        UR                  U l        ggg)z/Add one or more newlines before the next write.r
   N)maxr   r   r   r   )r'   r)   r0  s      r4   r2  CodeGenerator.newline  sL    dooq5y9t >%)[[D""kkDO !?r7   extra_kwargsc                    [        S [        S UR                   5       U=(       d    S5       5       5      nUR                   H%  nU R	                  S5        U R                  XR5        M'     U(       dh  UR                   H%  nU R	                  S5        U R                  Xb5        M'     Ub0  UR                  5        H  u  pxU R	                  SU SU 35        M     UR                  (       a-  U R	                  S5        U R                  UR                  U5        U(       Ga!  UR                  b  U R	                  S5        OU R	                  S	5        UR                   HO  nU R	                  UR                  < S
35        U R                  UR                  U5        U R	                  S5        MQ     Ub1  UR                  5        H  u  pxU R	                  U< S
U S35        M     UR                  b?  U R	                  S5        U R                  UR                  U5        U R	                  S5        gU R	                  S5        gUR                  b.  U R	                  S5        U R                  UR                  U5        gg)a  Writes a function call to the stream for the current node.
A leading comma is added automatically.  The extra keyword
arguments may not include python keywords otherwise a syntax
error could occur.  The extra keyword arguments should be given
as python dict.
c              3   j   #    U  H)  n[        [        R                  " [        U5      5      v   M+     g 7fr.   )is_python_keywordr9   castrw   )rg   rn   s     r4   ri   *CodeGenerator.signature.<locals>.<genexpr>  s)      
L affS!n--Ls   13c              3   8   #    U  H  oR                   v   M     g 7fr.   )keyrg   r+  s     r4   ri   r<    s     7;aEE;rk   r   r?   N=z, *z
, **dict({z, **{: z}, **rB   }z, **)anyr   r,   argsrF   r2   r~   dyn_args
dyn_kwargsr>  rb   )	r'   r)   r*   r7  kwarg_workaroundargkwargr>  rb   s	            r4   	signatureCodeGenerator.signature  s     
74;;79KL
 

 99CJJtJJs"   

4 

5( % '"."4"4"6JCJJC5%12 #7==JJuJJt}}e,*

<(

7#

eii]"-.

5;;.

4  % '"."4"4"6JCJJ#5'45 #7*

7#

4??E2

3

3__(JJvJJt. )r7   c           
         [        5       nU H  nUR                  U5        M     U R                  UR                  S4U R                  UR                  S44 GH  u  pEn[	        U5       H  nXt;  a  U R                  5       XG'   U R                  S5        U R                  5         U R                  XG    SU SU< S35        U R                  5         U R                  S5        U R                  5         U R                  S5        U R                  S	XG    S
35        U R                  5         U R                  SUSS  SU< S35        U R                  5         U R                  5         M     GM     g)a  Find all filter and test names used in the template and
assign them to variables in the compiled namespace. Checking
that the names are registered with the environment is done when
compiling the Filter and Test nodes. If the node is in an If or
CondExpr node, the check is done at runtime instead.

.. versionchanged:: 3.0
    Filters and tests in If and CondExpr nodes are checked at
    runtime instead of compile time.
r   r   try:z = environment.[]zexcept KeyError:z@internalcodedef z
(*unused):zraise TemplateRuntimeError("No N named z	 found."))	r   r2   r   r   sortedr  r	  r  r  )r'   r   rJ   r)   id_mapr   
dependencyrU   s           r4   pull_dependenciesCodeGenerator.pull_dependencies  sC    *+DMM$  \\7??I6

*
%F: u%#'#<#<#>FL v&&,zl!D8STUV12/fl^:>?5j"o5FdXY0 ) &*
r7   c           	         / nUR                   R                  R                  5        H  u  nu  pEU[        :X  a  M  U[        :X  a+  U R                  U SU R                  5        SU< S35        MI  U[        :X  a  U R                  U SU 35        Mk  U[        :X  a  UR                  U5        M  [        S5      e   U(       a$  U R                  SR                  U5       S35        g g )N = r@   rB   zunknown load instruction
 = missing)r   loadsr~   r   r   r	  get_resolve_funcr   r   r.  NotImplementedErrorjoin)r'   r*   undefstargetactionparams         r4   enter_frameCodeGenerator.enter_frameH  s    ',}}':':'@'@'B#FOV++++&T-B-B-D,EQuiqQR>)&UG45--f%)*DEE (C NNejj01<= r7   with_python_scopec                     U(       d\  / nUR                   R                   H  nUR                  U5        M     U(       a$  U R                  SR	                  U5       S35        g g g )NrY  rZ  )r   r[  r.  r	  r^  )r'   r*   re  r_  r`  s        r4   leave_frameCodeGenerator.leave_frameX  sT     F----f% .%**V"4!5Z@A 	 !r7   async_value
sync_valuec                 @    U R                   R                  (       a  U$ U$ r.   )rC   is_async)r'   ri  rj  s      r4   choose_asyncCodeGenerator.choose_async`  s    "..77{GZGr7   c                 ,    U R                  5        SU 3$ )NrP  )rm  )r'   rU   s     r4   funcCodeGenerator.funcc  s    ##%&d4&11r7   c           
          UR                  5       nUR                  R                  U5        [        U5      nSn[	        5       n/ n[        UR                  5       Hv  u  pxUR                  S:X  a  UnUR                  S;   a  UR                  UR                  5        UR                  UR                  R                  UR                  5      5        Mx     [        UR                  S5      n	SU	;   a[  Ub'   UR                  U[        UR                  5      -
       O*UR                  UR                  R%                  S5      5        SUl        SU	;   a7  SU;  a1  UR                  UR                  R%                  S5      5        SUl        SU	;   a7  SU;  a1  UR                  UR                  R%                  S5      5        SUl        S	Ul        UR                  R                  U5        U R/                  U R1                  S
5       SSR3                  U5       S3U5        U R5                  5         U R7                  U5        U R9                  U5        U R;                  U5        [        UR                  5       H  u  pxUR                  R                  UR                  5      n
U R/                  SU
 S35        U R5                  5          UR                  U[        UR                  5      -
     nU R/                  U
 S35        U R=                  X5        U R?                  U
5        U RA                  5         M     U RC                  5         U RE                  UR                  U5        U RG                  USS9  U RI                  USS9  U RA                  5         X#4$ ! [         a     U R!                  SUR"                  5         GNxf = f! [         a3    U R/                  U
 SUR                  < SUR                  < S35         Nf = f)z/Dump the function def of a macro or call block.Ncaller)r,   varargs)rs  r,   rt  zhWhen defining macros or call blocks the special "caller" argument must be omitted or be given a default.Tr,   rt  Fmacror@   r?   ):if  is missing:rY  z = undefined("parameter z was not provided", name=rB   )r  re  )%r   r   analyze_noder   rz   	enumeraterD  rU   r   r.  refr   bodydefaultslen
IndexErrorr  r   declare_parameterr   r   r   r   r	  rp  r^  r  r   rc  push_parameter_definitionsr2   mark_parameter_storedr  pop_parameter_definitionsr)  r  rg  )r'   r)   r*   	macro_refexplicit_callerskip_special_paramsrD  idxrH  r   r|  defaults               r4   
macro_bodyCodeGenerator.macro_bodyf  sP    ""4(TN	!e!$)),HCxx8#"%xx00#''1KK))#((34 - %TYY0OP
z! *MM/C		N"BC EMM;;HEF(,I%z!h6I&IKK77AB(,I%
"y8K'KKK77	BC)-I& &+"""4($))G,-Qtyy.?rBDIE''.!$)),HC--##CHH-CNNS\23KKM	+--c$))n(<= #c{+

7*&&s+LLN -  	&&(		5)##E4#@$7e " II1 	B  e3CHH< @ XXL+s$   4%N %O &N=<N= :O=<O=r  c                 `   SR                  S UR                  R                   5       5      n[        UR                  SS5      n[	        UR                  R                  5      S:X  a  US-  nU R                  SU< SU S	UR                  < SUR                  < SUR                  < S
35        g)z<Dump the macro definition for the def created by macro_body.r?   c              3   L   #    U  H  n[        UR                  5      v   M     g 7fr.   )reprrU   r?  s     r4   ri   *CodeGenerator.macro_def.<locals>.<genexpr>  s     H4Gqd166ll4Gs   "$rU   Nr
   ,zMacro(environment, macro, z, (z), z, context.eval_ctx.autoescape))	r^  r)   rD  getattrr  rF   r   r   r   )r'   r  r*   	arg_tuplerU   s        r4   	macro_defCodeGenerator.macro_def  s    IIHINN4G4GHH	y~~vt4y~~""#q(I

(I; ?)),By/I/I.L M)),,JL	
r7   c                 b    SUR                    3nU R                  b  U SU R                  < 3nU$ )z.Return a human readable position for the node.zline  in )r   rU   )r'   r)   r   s      r4   positionCodeGenerator.position  s5    T[[M"99 4tDII=)B	r7   c                     SR                  S UR                  R                  5       R                  5        5       5      nSU S3$ )Nr?   c              3   6   #    U  H  u  pU< S U 3v   M     g7frA  Nr   )rg   rU   r`  s      r4   ri   3CodeGenerator.dump_local_context.<locals>.<genexpr>  s$      
 C hb! Cs   {rB  )r^  r   dump_storesr~   )r'   r*   items_kvs      r4   dump_local_context CodeGenerator.dump_local_context  sD    99 
 % 9 9 ; A A C
 
 H:R  r7   c                     U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        g)zWrites a common preamble that is used by root and block functions.
Primarily this sets up common local helpers and enforces a generator
through a dead branch.
z$resolve = context.resolve_or_missingz!undefined = environment.undefinedzconcat = environment.concatzcond_expr_undefined = Undefinedzif 0: yield NoneNr	  r   s    r4   write_commonsCodeGenerator.write_commons  sG    
 	=>:;45 	89)*r7   c                 j    U R                   R                  UR                  R                  5       5        g)a)  Pushes all parameter targets from the given frame into a local
stack that permits tracking of yet to be assigned parameters.  In
particular this enables the optimization from `visit_Name` to skip
undefined expressions for parameters in macros as macros can reference
otherwise unbound parameters.
N)r   r.  r   dump_param_targetsr
  s     r4   r  (CodeGenerator.push_parameter_definitions  s%     	$$U]]%E%E%GHr7   c                 8    U R                   R                  5         g)z+Pops the current parameter definitions set.N)r   popr   s    r4   r  'CodeGenerator.pop_parameter_definitions  s    !!#r7   r`  c                 d    U R                   (       a  U R                   S   R                  U5        gg)zpMarks a parameter in the current parameter definitions as stored.
This will skip the enforced undefined checks.
rQ  N)r   r   r'   r`  s     r4   r  #CodeGenerator.mark_parameter_stored  s+       !!"%--f5 !r7   c                 :    U R                   R                  U5        g r.   )r   r.  r  s     r4   push_context_reference$CodeGenerator.push_context_reference  s    %%,,V4r7   c                 8    U R                   R                  5         g r.   )r   r  r   s    r4   pop_context_reference#CodeGenerator.pop_context_reference  s    %%))+r7   c                      U R                   S   $ )NrQ  r   r   s    r4   get_context_refCodeGenerator.get_context_ref  s    ,,R00r7   c                 8    U R                   S   nUS:X  a  gU S3$ )NrQ  r   resolvez.resolver  r  s     r4   r\  CodeGenerator.get_resolve_func  s*    ..r2Y""r7   c                 L    U R                  5        SU R                  U5       S3$ )Nz	.derived(rB   )r  r  r
  s     r4   derive_contextCodeGenerator.derive_context  s,    &&()43J3J53Q2RRSTTr7   c                 H    U R                   (       d  gXR                   S   ;   $ )z4Checks if a given target is an undeclared parameter.FrQ  )r   r  s     r4   parameter_is_undeclared%CodeGenerator.parameter_is_undeclared  s"    $$..r222r7   c                 J    U R                   R                  [        5       5        g)z+Pushes a new layer for assignment tracking.N)r   r.  rz   r   s    r4   push_assign_tracking"CodeGenerator.push_assign_tracking  s    !!#%(r7   c                    U R                   R                  5       nUR                  (       d"  UR                  (       d  UR                  (       a  U(       d  gU Vs/ s H  o3SS S:w  d  M  UPM     nn[        U5      S:X  a  [        [        U5      5      nUR                  R                  U5      nUR                  (       a  U R                  SU< SU 35        gUR                  (       a  U R                  SU< SU 35        gU R                  SU< SU 35        OUR                  (       a  U R                  S5        O4UR                  (       a  U R                  S	5        OU R                  S
5        [        [        U5      5       HO  u  puU(       a  U R                  S5        UR                  R                  U5      nU R                  U< SU 35        MQ     U R                  S5        UR                  (       d  UR                  (       do  U(       ag  [        U5      S:X  a  U R                  SUS   < S35        gSR                  [        [         [        U5      5      5      nU R                  SU S35        ggggs  snf )z_Pops the topmost level for assignment tracking and updates the
context variables if necessary.
Nr
   _z_loop_vars[] = z_block_vars[context.vars[z_loop_vars.update({z_block_vars.update({context.vars.update({r?   rA  })context.exported_vars.add(r   rB   zcontext.exported_vars.update((r  )r   r  r   r   r   r  nextiterr   r|  r	  r{  rS  rF   r^  mapr  )	r'   r*   varsr+  public_namesrU   r|  r  	names_strs	            r4   pop_assign_tracking!CodeGenerator.pop_assign_tracking  s    !!%%'!!$$NN#'84aRa5C<48t9>T
#D--##D)CTHD>?  dXT#?@NN]4($se<=45""5667&vd|4	JJt$mm''-

dXRu-.	 5
 JJt  )9)9l< A%!;LO;NaPQ IIc$|0D&EF	!?	{"MN ?K)9 1 9s   I?*I?c           	         Ub   S5       e[        U R                  U R                  5      nSSKJn  SSKJn  U R                  R                  (       a  [        XT-   5      nO[        U5      nU R                  SSR                  U5      -   5        U R                  (       a  SOSnUR                  [        R                  5      S LnUR                  [        R                  5       H`  n	U	R                  U R                   ;   a+  U R#                  S	U	R                  < S
3U	R$                  5        XR                   U	R                  '   Mb     UR                  [        R&                  5       H  n
U
R(                  U R*                  ;  d  M  U
R(                  nU R-                  5       =U R*                  U'   nSU;   a0  UR/                  SS5      u  pU R                  SU SU SU 35        M  U R                  SU SU 35        M     U R                  SU R                  < 35        U R                  U R1                  S5       SU S3SS9  U R3                  5         U R5                  5         [7        U5      nS[9        UR:                  S5      ;   a/  UR<                  R?                  S5      nU R                  U S35        UR<                  RA                  U5        S=Ul!        Ul"        U=(       a    U RF                  (       + Ul$        U(       a  U R                  S5        U RK                  U5        U RM                  UR:                  5        U RO                  UR:                  U5        U RQ                  USS9  U RS                  5         U(       Ga'  U RF                  (       d!  U R3                  5         U R                  S5        U R3                  5         U R                  R                  (       d  U R                  S5        OU R                  S5        U R                  S5        U R3                  5         U R                  S5        U R3                  5         U R                  S 5        U RS                  5         U RS                  5         U R                  S!5        U RS                  SU RF                  (       + -   5        U R                   RU                  5        GH  u  nn	U R                  U R1                  S"U-   5       SU S3U	S5        U R3                  5         U R5                  5         [7        U5      nSUl+        [9        U	R:                  S#5      nSU;   a/  UR<                  R?                  S5      nU R                  U S35        S$U;   a6  UR<                  R?                  S$5      nU R                  U S%U< S&U S'35        UR<                  RA                  U	5        UUl,        U R                  S(5        U RK                  U5        U RM                  U	R:                  5        U RO                  U	R:                  U5        U RQ                  USS9  U RS                  5         GM     SR                  S) U R                    5       5      nU R                  S*U S+3SS9  S,R                  S- U RZ                   5       5      nU R                  S.U< 35        g )/Nzno root frame allowedr
   )async_exported)exportedzfrom jinja2.runtime import r?    z, environment=environmentzblock z defined twice.zfrom z import z as zimport zname = rootz(context, missing=missingrv  )r0  r'   r   z = TemplateReference(context)Tzparent_template = Nonery  if parent_template is not None:z4yield from parent_template.root_render_func(context)z0agen = parent_template.root_render_func(context)rM  zasync for event in agen:zyield eventzfinally: await agen.aclose()block_)r'   superr  z = context.super(z, block_rB   z_block_vars = {}c              3   0   #    U  H  o< S U 3v   M     g7f)z: block_Nr   r?  s     r4   ri   /CodeGenerator.visit_Template.<locals>.<genexpr>  s     !K{!E!"5{s   z
blocks = {rB  &c              3   4   #    U  H  u  pU S U 3v   M     g7f)r@  Nr   rm   s      r4   ri   r    s     Gtq1#Qqc
s   zdebug_info = ).r   rC   rU   runtimer  r  rl  rS  r	  r^  rX   findr   Extendsfind_allr   r   r  r   ImportedName
importnamer   r  rsplitrp  r  r  r+   r   r}  r   r  rz  r   r   r   r   rc  rV  r)  rg  r  r~   r   r   r   )r'   r)   r*   r0   r  r  exported_namesenvenvhave_extendsr   import_impaliasmoduleobjr|  rU   r   r   blocks_kv_strdebug_kv_strs                        r4   visit_TemplateCodeGenerator.visit_Template=  sj    }555}t//;+%$$#H$=>N#H-N4tyy7PPQ ,G yy/t; ]]5;;/EzzT[[(		F5::.?N&+KK

# 0 }}U%7%78G!!)<)<<((373L3L3NN##C(5#:"%**S!"4KFNNU6((3%tE7#KLNNWSEeW#=> 9 	./ 	yy !!:6("EQ 	 	
 	 h_TYY	::--11&9CNNcU"?@A""4(+//%1%P$:P:P6P"NN34tyy)		5)$7 ))@AKKM##,,UVQRv&9:}-=>LL$"8"889:  ;;,,.KD%NN99X_-..GxrR
 KKM   /K&*K#(5FGJ#!));;FC#&CDE*$!));;GD#&7xxvQOP,,U3 $KNN-.[)""5::.OOEJJ4[DALLN7 /: 		!Kt{{!KK]O26a@xxGtGG|&678r7   c                 \   SnUR                   (       aH  U R                  (       a  gU R                  S:  a&  U R                  S5        U R	                  5         US-  nUR
                  (       a  U R                  U5      nOU R                  5       nUR                  (       ab  U R                  SUR                  < S3U5        U R	                  5         U R                  SUR                  < S3U5        U R                  5         U R                  R                  (       d2  UR                  c%  U R                  S	UR                  < S
U S3U5        OU R                  SUR                  < S
U S35        U R                  S5        U R	                  5         U R                  U R                  5        S3U5        U R	                  5         U R                  SU5        U R                  5         U R                  5         U R                  SU R                  SS5       35        U R                  U5        g)z.Call a block and register it for the template.r   Nif parent_template is None:r
   zif len(context.blocks[z]) <= 1:z+raise TemplateRuntimeError("Required block z not found")zyield from context.blocks[z][0](rB   zgen = context.blocks[rM  for event in gen:event	finally: await gen.aclose()gen.close())r   r   r   r	  r  scopedr  r  requiredrU   r  rC   rl  r   rm  r%  )r'   r)   r*   r   r   s        r4   r   CodeGenerator.visit_Block  s   >> %%""Q&<=
;;))%0G**,G==NN3DII=I4PKKMNN=dii],W LLN((U\\-ANN,TYYMwiqI4 NN2499-uWIQOPNN6"KKMNN$$&''89 KKMgu-LLNLLNNND--.BMRST 	Ur7   c                    UR                   (       d  U R                  SUR                  5        U R                  S:  an  U R                  (       d!  U R                  S5        U R                  5         U R                  S5        U R                  (       a
  [        5       eU R                  5         U R                  SU5        U R                  UR                  U5        U R                  SU R                  < S35        U R                  S5        U R                  5         U R                  S	5        U R                  5         UR                  (       a  S
U l        U =R                  S-  sl        g)zCalls the extender.z,cannot use extend from a non top-level scoper   r  z5raise TemplateRuntimeError("extended multiple times")z+parent_template = environment.get_template(r?   rB   z9for name, parent_block in parent_template.blocks.items():z8context.blocks.setdefault(name, []).append(parent_block)Tr
   N)r   r  r   r   r   r	  r  r   r  r2   templaterF   rU   r   r'   r)   r*   s      r4   visit_ExtendsCodeGenerator.visit_Extends  s    ~~IIDdkkR
 "
 ))@ANNRS %%"n$DdK

4==%(

R		}A&'RSQR
 ??%)D" 	q r7   c                   ^ ^ UR                   (       a!  T R                  S5        T R                  5         Sn[        UR                  [
        R                  5      (       a^  [        UR                  R                  [        5      (       a  SnOm[        UR                  R                  [        [        45      (       a  SnO;[        UR                  [
        R                  [
        R                  45      (       a  SnT R                  SU S3U5        T R                  UR                  T5        T R                  ST R                  < S35        UR                   (       as  T R!                  5         T R                  S	5        T R                  5         T R                  S
5        T R!                  5         T R                  S5        T R                  5         SUU 4S jjnUR"                  (       a  T R                  ST R%                  T5       S35        T R                  S5        T R                  5         T R                  T R'                  5        S35        U" 5         T R!                  5         T R                  ST R'                  SS5       35        OET R(                  R*                  (       a  T R                  S5        U" 5         OT R                  S5        UR                   (       a  T R!                  5         gg)zHandles includes.rM  get_or_select_templateget_templateselect_templateztemplate = environment.r@   r?   rB   zexcept TemplateNotFound:r(  r  Nc                  j   > TR                  5         TR                  ST 5        TR                  5         g )Nr  )r  r%  r  )r*   r'   s   r4   	loop_body.CodeGenerator.visit_Include.<locals>.loop_body-  s%    KKMgu-LLNr7   zNgen = template.root_render_func(template.new_context(context.get_all(), True, r  r  r  r  r  zGfor event in (await template._get_default_module_async())._body_stream:z6yield from template._get_default_module()._body_streamr   )ignore_missingr	  r  r[   r  r   Constrb   rw   rx   ry   TupleListr2   rF   rU   r  with_contextr  rm  rC   rl  )r'   r)   r*   	func_namer  s   ` `  r4   visit_IncludeCodeGenerator.visit_Include  s#   NN6"KKM,	dmmU[[11$----s33*	DMM//%??-	UZZ'@AA)I01=tD

4==%(

R		}A&'LLNNN56KKMNN6"LLNNN7#KKM	 	
 NN++E2327
 NN6"KKMNNd//122CDEKLLNNND--.BMRST &&NN! KNNSTLLN r7   c                    U R                  U R                  S5       S35        U R                  UR                  U5        U R                  SU R                  < S35        UR
                  (       a;  SU R                  S5       3nU R                  U SU R                  U5       S35        g U R                  S	U R                  S5       S
35        g )Nawait zenvironment.get_template(r?   z).make_module_asyncz(context.get_all(), True, rB   _get_default_modulez	(context))rF   rm  r2   r  rU   r  r  )r'   r)   r*   f_names       r4   _import_commonCodeGenerator._import_commonL  s     	

d''122KLM

4==%(

R		}B'("4#4#4X#>"?@FJJ(4T5L5LU5S4TTUV JJ,T->->x-H,ISTr7   c                    U R                  UR                  R                  UR                  5       S3U5        UR                  (       a   U R                  SUR                  < S35        U R                  X5        UR                  (       aB  UR                  R                  S5      (       d!  U R                  SUR                  < S35        ggg)zVisit regular imports.rY  r  r  r  context.exported_vars.discard(rB   N)r	  r   r|  r`  r   rF   r  
startswithr   s      r4   visit_ImportCodeGenerator.visit_Import[  s    %--++DKK89=tD>>JJt{{oT:;D(>>$++"8"8"="=NN;DKK?!LM #>>r7   c           	        ^ U R                  U5        U R                  S5        U R                  UT5        / n/ nUR                   GH]  n[	        U[
        5      (       a  Uu  pVOUnU R                  TR                  R                  U5       SU< S35        U R                  STR                  R                  U5       S35        U R                  5         U R                  U5      R                  SS5      R                  SS	5      nS
U SU< 3nU R                  TR                  R                  U5       SU< SU< S35        U R                  5         TR                  (       d  GM"  UR                  U5        UR                  S5      (       a  GML  UR                  U5        GM`     U(       av  [!        U5      S:X  a7  US   nU R                  SU< STR                  R                  U5       35        O0SR#                  U4S jU 5       5      n	U R                  SU	 S35        U(       a^  [!        U5      S:X  a  U R                  SUS   < S35        gSR#                  [%        [&        U5      5      n
U R                  SU
 S35        gg)zVisit named imports.zincluded_template = z = getattr(included_template, z
, missing)rw  rx  r  z{{rB  z}}z9the template {included_template.__name__!r} (imported on z%) does not export the requested name z = undefined(fz, name=rB   r  r
   r   r  r  r?   c              3   d   >#    U  H%  o< S TR                   R                  U5       3v   M'     g7fr  )r   r|  )rg   rU   r*   s     r4   ri   1CodeGenerator.visit_FromImport.<locals>.<genexpr>  s-      %GPthb!2!24!8 9:ys   -0r  r  r  z)context.exported_vars.difference_update((r  N)r2  rF   r  r   r[   rx   r	  r   r|  r  r  replacer  r   r.  r  r  r^  r  r  )r'   r)   r*   	var_namesdiscarded_namesrU   r  r  messagenames_kvr  s     `        r4   visit_FromImportCodeGenerator.visit_FromImportf  sW   T

)*D%(	JJD$&&"eNN==$$U+, -//3hjB NNS!2!25!9 :,GHKKM
 }}T*223=EEc4PH!!)
 +77;h@ 
 NN==$$U+,N7+WTHTUV LLN~~~  ''',,#**519 < 9~" |thd5==;L;LT;R:STU99 %GP%  !7zEF?#q(!?PQ@R?UUVWX IIc$&@A	?	{"M r7   c                 
   UR                  5       nSUl        UR                  5       nUR                  5       nUR                  =(       dR    S[        UR	                  SS9S5      ;   =(       d/    [        S UR                  [        R                  5       5       5      nS nU(       a  UR                  R                  S5      nUR                  R                  USS9  UR                  (       a  UR                  R                  US	S9  UR                  (       Ga  U R                  5       nUR                  R                  US
S9  U R                  U R!                  U5       S3UR                  5        U R#                  5         U R%                  U5        U R                  U R'                  SS5      5        U R)                  UR*                  U5        U R-                  S5        U R-                  U R'                  SS5      5        U R-                  S5        U R#                  5         U R                  SUR                  5        U R)                  UR                  U5        U R-                  S5        U R#                  5         U R                  S5        U R)                  UR*                  U5        U R/                  S5        U R1                  USS9  UR                  (       aV  U R                  U R!                  S5       S3U5        U R#                  5         U R3                  U5        UR2                  Ul        U(       a  U R                  U S35        UR                  [        R4                  5       HC  n	U	R6                  S:X  d  M  U	R8                  S:X  d  M'  U R;                  SU	R<                  5        ME     UR                  (       a$  U R                  5       n
U R                  U
 S35        U R                  U R'                  SS5      U5        U R)                  UR*                  U5        U(       a(  U R-                  SU SU R'                  S5       S35        OU R-                  S5        UR                  (       a  U R-                  W S35        UR                  (       a  U R-                  S5        OU R>                  R@                  (       a  U(       d  U R-                  S 5        U R)                  URB                  U5        U R>                  R@                  (       a  U(       d  U R-                  S!5        UR                  (       a  U R-                  S!5        UR                  (       a  U R-                  S"5        OU R-                  U(       a  S#OS5        U R#                  5         U R%                  U5        U R                  S$5        U RE                  URF                  U5        UR                  (       a  U R                  W
 S%35        U R/                  5         U R1                  X1R                  =(       a    UR                  (       + S9  UR                  (       as  U R                  SW
 S35        U R#                  5         U R%                  U5        U RE                  UR                  U5        U R1                  U5        U R/                  5         UR                  (       a  U RI                  U5        U R/                  5         U RK                  X!5        U R-                  U R'                  S&5       S'35        U R>                  R@                  (       a  U R-                  S 5        U R)                  URB                  U5        U R>                  R@                  (       a  U R-                  S!5        U R-                  S(5        U RM                  U5        U RN                  (       a3  U RN                  S)   RQ                  UR                  RR                  5        g g )*NTloop)r}  )only)r*  c              3   8   #    U  H  oR                   v   M     g 7fr.   )r  )rg   r   s     r4   ri   *CodeGenerator.visit_For.<locals>.<genexpr>  s     H-GE<<-Grk   r}  )
for_branchelsetestz(fiter):z
async for zfor r  zauto_aiter(fiter)fiter:rw  r     ry  z%(reciter, loop_render_func, depth=0):rZ  storez8Can't assign to special loop variable in for-loop targetz = 1r?   AsynczLoopContext(r@   reciterzauto_aiter(rB   z&, undefined, loop_render_func, depth):z, undefined):z_loop_vars = {}z = 0r  zloop(z, loop)rQ  )*r   r   	recursiver   iter_child_nodesrC  r  r   r   r   r  rz  else_r0  r  r	  rp  r  rc  rm  r2   r`  rF   r  rg  r   r   r   rU   r  r   rC   rl  r  r)  r}  r  r  r!  r   difference_updatestores)r'   r)   r*   r   
test_frame
else_frameextended_looploop_refloop_filter_funcrU   iteration_indicators              r4   	visit_ForCodeGenerator.visit_For  s   [[]
 $
[[]
[[]
 NN It44)4DiPQI HT]]5;;-GHH	 	 !));;FCH'''@::++DV+D999#88:++DV+DNNdii(89:(CTYYOKKMZ(NN4,,\6BCJJt{{J/JJvJJt(()<gFGJJsOKKMNN5$)),JJtyy*-JJsOKKMNN8$JJt{{J/LLOZ4@
 >>NN99V$%%JKT KKMKK
# !+ 1 1J NNhZz23MM%**-Dxx7"tyyF':		NKK . ::"&";";"=NN12$78t((v>E

4;;
+JJH:T$*;*;G*D)E\RSJJv99JJ*+1-.>>JJy!((

=)JJtyy%(((

399JJsO>>JJ?@JJ-SA$()		:.::NN12$78..*K^ 	 	
 ::NNS!4 5Q78KKMZ(OODJJ
3Z(LLN >>''
3LLNU)JJ$++H56e<=((

=)JJtyy%(((

3JJy!NN5! r"44Z5G5G5N5NO r7   c                    UR                  5       nU R                  SU5        U R                  UR                  U5        U R	                  S5        U R                  5         U R                  UR                  U5        U R                  5         UR                   H~  nU R                  SU5        U R                  UR                  U5        U R	                  S5        U R                  5         U R                  UR                  U5        U R                  5         M     UR                  (       aN  U R                  S5        U R                  5         U R                  UR                  U5        U R                  5         g g )Nrw  r2  zelif r  )r   r	  r2   r0  rF   r  r)  r}  r  elif_r9  )r'   r)   r*   if_framerE  s        r4   visit_IfCodeGenerator.visit_If(  s    ::<ud#

499h'

3		8,ZZENN7E*JJuzz8,JJsOKKMOOEJJ1LLN   ::NN7#KKMOODJJ1LLN	 r7   c                    U R                  X5      u  p4U R                  5         UR                  (       a`  UR                  R	                  S5      (       d   U R                  SUR                  < S35        U R                  SUR                  < S35        U R                  UR                  R                  UR                  5       S35        U R                  XC5        g )Nr  r  rB   r  r  rY  )
r  r2  r   rU   r  rF   r	  r   r|  r  )r'   r)   r*   macro_framer  s        r4   visit_MacroCodeGenerator.visit_Macro=  s    !%!=>>99'',,

7		}AFGNN]499-t<=

emm''		23378y.r7   c                     U R                  X5      u  p4U R                  S5        U R                  XC5        U R                  X!5        U R	                  UR
                  USS9  U R                  U5        g )Nz	caller = T)forward_caller)r  r	  r  r  
visit_Callcallr!  )r'   r)   r*   
call_framer  s        r4   visit_CallBlockCodeGenerator.visit_CallBlockG  s[     $ <
{#y-%		5>ur7   c                 t   UR                  5       nUR                  R                  U5        U R                  U5        U R	                  U5        U R                  UR                  U5        U R                  X!5        U R                  UR                  U5        U R                  U5        U R                  U5        g r.   )r   r   rz  rc  r   r)  r}  r  r   filterr!  rg  )r'   r)   r*   filter_frames       r4   visit_FilterBlockCodeGenerator.visit_FilterBlockO  s    {{}))$/&L!		<0%$++|4u&r7   c                    UR                  5       nUR                  R                  U5        U R                  U5        [	        UR
                  UR                  5       HH  u  pEU R                  5         U R                  XC5        U R                  S5        U R                  XR5        MJ     U R                  UR                  U5        U R                  U5        g )NrY  )r   r   rz  rc  ziptargetsvaluesr2  r2   rF   r)  r}  rg  )r'   r)   r*   
with_framer`  exprs         r4   
visit_WithCodeGenerator.visit_WithZ  s    [[]
''-$dkk:LFLLNJJv*JJuJJt#	 ;
 			:.$r7   c                 ^    U R                  U5        U R                  UR                  U5        g r.   )r2  r2   r)   r   s      r4   visit_ExprStmtCodeGenerator.visit_ExprStmtf  s     T

499e$r7   c                   |    \ rS rSr% \R
                  \R                  S\4      \S'   \R
                  \   \S'   Sr	g)CodeGenerator._FinalizeInfoij  .constsrcr   N)
r   r   r   r   r9   r   Callablerw   __annotations__r   r   r7   r4   _FinalizeInfore  j  s,    zz!**S#X.//ZZ_r7   rj  rb   c                     [        U 5      $ )zThe default finalize function if the environment isn't
configured with one. Or, if the environment has one, this is
called on that function's output for constants.
)rw   r   s    r4   _default_finalizeCodeGenerator._default_finalizen  s     5zr7   	_finalizec                 z  ^ ^^ T R                   b  T R                   $ T R                  =nmSnT R                  R                  (       a  SnT R                  R                  m[        R
                  S[        R                  S[        R                  S0R                  [        R                  " T5      5      nSnUc*  S[        R                  S[        R                  4UU4S jjnO7U U S	3nUS:X  a*  S[        R                  S[        R                  4UUU 4S
 jjnT R                  X5      T l         T R                   $ )aI  Build the finalize function to be used on constants and at
runtime. Cached so it's only created once for all output nodes.

Returns a ``namedtuple`` with the following attributes:

``const``
    A function to finalize constant data at compile time.

``src``
    Source code to output around nodes to be evaluated at
    runtime.
Nzenvironment.finalize(r   context.eval_ctxrC   rb   r%   c                     > T" T" U 5      5      $ r.   r   )rb   r  env_finalizes    r4   finalize.CodeGenerator._make_finalize.<locals>.finalize  s    "<#677r7   r?   c                 6   > T" T" TR                   U 5      5      $ r.   )rC   )rb   r  rr  r'   s    r4   rs  rt    s    &|D4D4De'LMMr7   )rn  rl  rC   rs  r   r   eval_contextgetfrom_objr9   r:   rj  )r'   rs  rg  pass_argr  rr  s   `   @@r4   _make_finalizeCodeGenerator._make_finalizex  s$    >>%>>! "3337$$)C++44L  )%%'9$$m c!!,/	  H8AEE 8aee 8 8 hZr*},N N!%% N N ++H:~~r7   groupc                 *    [        [        U5      5      $ )zGiven a group of constant values converted from ``Output``
child nodes, produce a string to write to the template module
source.
)r  r   )r'   r|  s     r4   _output_const_repr CodeGenerator._output_const_repr  s    
 F5M""r7   rs  c                     UR                  UR                  5      nUR                  R                  (       a  [        U5      n[	        U[
        R                  5      (       a  [        U5      $ UR                  U5      $ )a  Try to optimize a child of an ``Output`` node by trying to
convert it to constant, finalized data at compile time.

If :exc:`Impossible` is raised, the node is not constant and
will be evaluated at runtime. Any other exception will also be
evaluated at runtime for easier debugging.
)	as_constr0   r  r   r[   r   TemplateDatarw   rf  )r'   r)   r*   rs  rf  s        r4   _output_child_to_const$CodeGenerator._output_child_to_const  sZ     enn->>$$5ME dE..//u:~~e$$r7   c                 ,   UR                   R                  (       a  U R                  S5        O>UR                   R                  (       a  U R                  S5        OU R                  S5        UR                  b  U R                  UR                  5        gg)zHOutput extra source code before visiting a child of an
``Output`` node.
z1(escape if context.eval_ctx.autoescape else str)(zescape(zstr(N)r0   r1   rF   r  rg  r'   r)   r*   rs  s       r4   _output_child_preCodeGenerator._output_child_pre  sb     >>""JJJK^^&&JJy!JJv<<#JJx||$ $r7   c                 d    U R                  S5        UR                  b  U R                  S5        gg)zGOutput extra source code after visiting a child of an
``Output`` node.
rB   N)rF   rg  r  s       r4   _output_child_post CodeGenerator._output_child_post  s)     	

3<<#JJsO $r7   c                    UR                   (       a3  U R                  (       a  g U R                  S5        U R                  5         U R	                  5       n/ nUR
                   H  n UR                  (       d4  [        U[
        R                  5      (       d  [
        R                  " 5       eU R                  XRU5      nU(       a.  [        US   [        5      (       a  US   R                  U5        M  UR                  U/5        M     UR                  b\  [        U5      S:X  a  U R                  UR                   S35        OU R                  UR                   S35        U R                  5         U H  n[        U[        5      (       aJ  U R!                  U5      nUR                  c  U R                  SU-   5        ML  U R                  US-   5        Mb  UR                  c  U R                  SU5        OU R#                  U5        U R%                  XrU5        U R'                  Xr5        U R)                  XrU5        UR                  c  M  U R+                  S5        M     UR                  b2  U R-                  5         U R                  [        U5      S:X  a  SOS	5        UR                   (       a  U R-                  5         g g ! [
        R                  [        4 a    UR                  U5         GM  f = f)
Nr  rQ  r
   r  z	.extend((r  r  rB   r  )r   r   r	  r  rz  r   rf  r[   r  
Impossibler  	Exceptionr.  ry   r   r  r~  r2  r  r2   r  rF   r  )	r'   r)   r*   rs  r}  childrf  itemvals	            r4   visit_OutputCodeGenerator.visit_Output  s?   %%%%NN89KKM&&(;=
 ZZE NN "%););<<**,,33E(K 
48T22R&UG$/  2 <<#4yA~%,,x89%,,y9:KKMD$%%--d3<<'NN8c>2NN39-<<'NN8T2LL& &&tH=

4'''X><<+JJsO+ . <<#LLNNN#d)q.3d;%%LLN &_ $$i0  E"s   'AK+K21K2c                    U R                  5         [        5       nUR                  [        R                  5       H  nUR
                  U;   a  M  UR                  UR
                  5        UR                  R                  UR
                  5      nU R                  SU S35        U R                  5         U R                  S5        U R                  5         M     U R                  U5        U R                  UR                  U5        U R                  S5        U R                  UR                   U5        U R#                  U5        g )Nzif not isinstance(z, Namespace):zMraise TemplateRuntimeError("cannot assign attribute on non-namespace object")rY  )r  rz   r  r   NSRefrU   r   r   r|  r	  r  r  r2  r2   r`  rF   r)   r  )r'   r)   r*   	seen_refsnsrefr|  s         r4   visit_AssignCodeGenerator.visit_Assign.  s    !!# !$	]]5;;/EzzY& MM%**%--##EJJ/CNN/uMBCKKMNNF LLN 0  	T

4;;&

5

499e$  'r7   c                 x   U R                  5         UR                  5       nSUl        UR                  R	                  U5        U R                  U5        U R                  U5        U R                  UR                  U5        U R                  U5        U R                  UR                  U5        U R                  S5        UR                  b  U R                  UR                  U5        OU R                  SUR                   S35        U R                  S5        U R                  U5        U R!                  U5        g )NFz9 = (Markup if context.eval_ctx.autoescape else identity)(concat(rB   )r  r   r   r   rz  rc  r   r)  r}  r2  r2   r`  rF   rU  r   r  rg  )r'   r)   r*   r   s       r4   visit_AssignBlockCodeGenerator.visit_AssignBlockM  s    !!#kkm ,1(((.%K 		;/T

4;;&

NO;;"dkk;7JJ!3!3 4A67

3  '%r7   c           	      X   UR                   S:X  al  UR                  (       d"  UR                  (       d  UR                  (       a9  U R                  (       a(  U R                  S   R                  UR                  5        UR                  R                  UR                  5      nUR                   S:X  ah  UR                  R                  U5      nUb#  US   [        :X  a  U R                  U5      (       a'  U R                  SUR                  < SU SU S35        g U R                  U5        g )	Nr4  rQ  r   r   z(undefined(name=z) if z is missing else rB   )r   r   r   r   r   r   rU   r   r|  	find_loadr   r  rF   )r'   r)   r*   r|  r   s        r4   r   CodeGenerator.visit_Namee  s    88wNNe..%2C2C!!""2&**4995mm		*
 88v==**3/D G1144S99

&tyym5=NseSTU 

3r7   c                     UR                   R                  UR                  5      nU R                  U SUR                  < S35        g )NrN  rO  )r   r|  rU   r	  attr)r'   r)   r*   r|  s       r4   visit_NSRefCodeGenerator.visit_NSRef~  s9    
 mm		*#a		}A./r7   c                     UR                  UR                  5      n[        U[        5      (       a  U R	                  [        U5      5        g U R	                  [        U5      5        g r.   )r  r0   r[   rt   rF   rw   r  )r'   r)   r*   r  s       r4   visit_ConstCodeGenerator.visit_Const  sA    mmENN+c5!!JJs3x JJtCy!r7   c                      U R                  [        UR                  UR                  5      5      5        g ! [        R
                   a#    U R                  SUR                  < S35         g f = fNz6(Markup if context.eval_ctx.autoescape else identity)(rB   )rF   r  r  r0   r   r  datar   s      r4   visit_TemplateData CodeGenerator.visit_TemplateData  sW    	JJtDMM%..9:; 	JJHUVW	s   36 4A-,A-c                     U R                  S5        Sn[        UR                  5       H.  u  p4U(       a  U R                  S5        U R                  XB5        M0     U R                  US:X  a  S5        g S5        g )Nr@   rQ  r?   r   z,)rB   rF   r{  r~   r2   r'   r)   r*   r  r  s        r4   visit_TupleCodeGenerator.visit_Tuple  s[    

3"4::.IC

4 JJt# / 	

3!84--r7   c                     U R                  S5        [        UR                  5       H.  u  p4U(       a  U R                  S5        U R                  XB5        M0     U R                  S5        g )NrN  r?   rO  r  r  s        r4   
visit_ListCodeGenerator.visit_List  sJ    

3"4::.IC

4 JJt# / 	

3r7   c                 F   U R                  S5        [        UR                  5       Hf  u  p4U(       a  U R                  S5        U R                  UR                  U5        U R                  S5        U R                  UR
                  U5        Mh     U R                  S5        g )Nr  r?   rA  rB  )rF   r{  r~   r2   r>  rb   r  s        r4   
visit_DictCodeGenerator.visit_Dict  sn    

3"4::.IC

4 JJtxx'JJtJJtzz5) / 	

3r7   +-*/z//z**%andorznot c                 4   UR                   R                  (       a  SnO UR                   R                  (       a  SnOSnU R                  U S35        UR                   H%  nU R                  XB5        U R                  S5        M'     U R                  S5        g )Nz8(markup_join if context.eval_ctx.volatile else str_join)markup_joinstr_joinz((r?   r  )r0   r1   r  rF   r   r2   )r'   r)   r*   r  rH  s        r4   visit_ConcatCodeGenerator.visit_Concat  sr    >>""RI^^&&%I"I

i[#$::CJJs"JJt  	

4r7   c                     U R                  S5        U R                  UR                  U5        UR                   H  nU R                  X25        M     U R                  S5        g )Nr@   rB   )rF   r2   r^  opsrI   s       r4   visit_CompareCodeGenerator.visit_Compare  sD    

3

499e$((BJJr! 

3r7   c                     U R                  S[        UR                      S35        U R                  UR                  U5        g )NrA   )rF   	operatorsr<   r2   r^  r   s      r4   visit_OperandCodeGenerator.visit_Operand  s3    

Qy)*!,-

499e$r7   c                 P   U R                   R                  (       a  U R                  S5        U R                  S5        U R                  UR                  U5        U R                  SUR
                  < S35        U R                   R                  (       a  U R                  S5        g g )N(await auto_await(zenvironment.getattr(r?   rB   r  )rC   rl  rF   r2   r)   r  r   s      r4   visit_GetattrCodeGenerator.visit_Getattr  sv    $$JJ+,

)*

499e$

R		}A&'$$JJt %r7   c                    [        UR                  [        R                  5      (       a[  U R	                  UR
                  U5        U R                  S5        U R	                  UR                  U5        U R                  S5        g U R                  R                  (       a  U R                  S5        U R                  S5        U R	                  UR
                  U5        U R                  S5        U R	                  UR                  U5        U R                  S5        U R                  R                  (       a  U R                  S5        g g )NrN  rO  r  zenvironment.getitem(r?   rB   r  )	r[   rH  r   Slicer2   r)   rF   rC   rl  r   s      r4   visit_GetitemCodeGenerator.visit_Getitem  s     dhh,,JJtyy%(JJsOJJtxx'JJsO((

/0JJ-.JJtyy%(JJtJJtxx'JJsO((

4  )r7   c                 @   UR                   b  U R                  UR                   U5        U R                  S5        UR                  b  U R                  UR                  U5        UR                  b.  U R                  S5        U R                  UR                  U5        g g )Nr2  )startr2   rF   stopr  r   s      r4   visit_SliceCodeGenerator.visit_Slice  sq    ::!JJtzz5)

399 JJtyy%(99 JJsOJJtyy%( !r7   	is_filterc              #     #    U R                   R                  (       a  U R                  S5        U(       a[  U R                  U R                  UR                      S35        U R                   R                  R                  UR                  5      nOZU R                  U R                  UR                      S35        U R                   R                  R                  UR                  5      nUcJ  UR                  (       d9  U(       a  SOSnU R                  SU SUR                  < S3UR                  5        [        R                  S[        R                  S	[        R                   S
0R                  [        R                  " U5      5      nUb  U R                  U S35        S v   U R                  X5        U R                  S5        U R                   R                  (       a  U R                  S5        g g 7f)Nr  r@   rU  r0  zNo rR  r  r   rp  rC   r?   rB   r  )rC   rl  rF   r   rU   rw  r   r   r  r   r   r   rv  rx  rJ  )r'   r)   r*   r  rp  	type_namery  s          r4   _filter_test_common!CodeGenerator._filter_test_common  s     $$JJ+,JJ$,,tyy12!45##++//		:DJJ$**TYY/023##))--dii8D
 < 0 0$-6IIII;gdii]!<dkkJ i!!#5  -
 #d#
	 	 JJ(2' 	t#

3$$JJt %s   G6G8c                    U R                  XS5         UR                  b  U R                  UR                  U5        OUR                  R                  (       a-  U R                  SUR                   SUR                   S35        OZUR                  R                  (       a   U R                  SUR                   S35        OU R                  SUR                   S35        S S S 5        g ! , (       d  f       g = f)NTz(Markup(concat(z.)) if context.eval_ctx.autoescape else concat(r  zMarkup(concat(r  rB   )r  r)   r2   r0   r1   rF   r   r  r   s      r4   r   CodeGenerator.visit_Filter,  s    %%d48 yy$

499e,((

%ell^ 4CCH<<.PRT **

^ELL><=

WU\\N!45 988s   CC))
C7c                     U R                  XS5         U R                  UR                  U5        S S S 5        g ! , (       d  f       g = fr   )r  r2   r)   r   s      r4   r   CodeGenerator.visit_Test=  s0    %%d59JJtyy%( :99s	   9
Ac                 D  ^ ^^ TR                  5       mSUUU 4S jjnT R                  S5        T R                  TR                  T5        T R                  S5        T R                  TR                  T5        T R                  S5        U" 5         T R                  S5        g )Nc                     > TR                   b  TR                  TR                   T 5        g TR                  STR                  T5       S35        g )Nz1cond_expr_undefined("the inline if-expression on z6 evaluated to false and no else section was defined."))expr2r2   rF   r  )r*   r)   r'   s   r4   write_expr21CodeGenerator.visit_CondExpr.<locals>.write_expr2F  sL    zz%

4::u-JJMM$'( )*+r7   r@   z if z else rB   r   )r   rF   r2   expr1r0  )r'   r)   r*   r  s   ``` r4   visit_CondExprCodeGenerator.visit_CondExprB  sq    

		 		 	

3

4::u%

6

499e$

8

3r7   rN  c                    U R                   R                  (       a  U R                  S5        U R                   R                  (       a  U R                  S5        OU R                  S5        U R	                  UR
                  U5        U(       a  SS0OS nUR                  (       a  SS0O0 nUR                  (       a  SS0O0 nU(       a  UR                  " U40 UD6  OU(       d  U(       a  [        U40 UD6nU R                  XU5        U R                  S5        U R                   R                  (       a  U R                  S5        g g )	Nr  zenvironment.call(context, zcontext.call(rs  
_loop_vars_block_varsrB   r  )rC   rl  rF   rD   r2   r)   r   r   r   r}   rJ  )r'   r)   r*   rN  r7  loop_kwargsblock_kwargss          r4   rO  CodeGenerator.visit_CallY  s     $$JJ+,%%JJ34JJ'

499e$/=(+46;6F6F|\2B9>9J9J}5PR<|<L<|<LtL1

3$$JJt %r7   c                 x    U R                  UR                  S-   5        U R                  UR                  U5        g )Nr@  )rF   r>  r2   rb   r   s      r4   visit_KeywordCodeGenerator.visit_Keywordp  s(    

488c>"

4::u%r7   c                     U R                  S5        U R                  UR                  U5        U R                  S5        g )NzMarkup(rB   rF   r2   r^  r   s      r4   visit_MarkSafeCodeGenerator.visit_MarkSafev  s+    

9

499e$

3r7   c                     U R                  S5        U R                  UR                  U5        U R                  S5        g r  r  r   s      r4   visit_MarkSafeIfAutoescape(CodeGenerator.visit_MarkSafeIfAutoescape{  s.     	

KL

499e$

3r7   c                 @    U R                  SUR                  -   5        g )Nzenvironment.rF   rU   r   s      r4   visit_EnvironmentAttribute(CodeGenerator.visit_EnvironmentAttribute  s     	

>DII-.r7   c                 \    U R                  SUR                  < SUR                   35        g )Nzenvironment.extensions[z].)rF   
identifierrU   r   s      r4   visit_ExtensionAttribute&CodeGenerator.visit_ExtensionAttribute  s'     	

,T__,?r$))MNr7   c                 T    U R                  U R                  UR                     5        g r.   )rF   r   r  r   s      r4   visit_ImportedName CodeGenerator.visit_ImportedName  s    

4&&t78r7   c                 :    U R                  UR                  5        g r.   r  r   s      r4   visit_InternalName CodeGenerator.visit_InternalName  s    

499r7   c                 &    U R                  S5        g )Nr   )rF   r   s      r4   visit_ContextReference$CodeGenerator.visit_ContextReference  s     	

9r7   c                 D    U R                  U R                  U5      5        g r.   )rF   r  r   s      r4   visit_DerivedContextReference+CodeGenerator.visit_DerivedContextReference  s     	

4&&u-.r7   c                 (    U R                  SU5        g )Ncontinuer  r   s      r4   visit_ContinueCodeGenerator.visit_Continue  s    z4(r7   c                 (    U R                  SU5        g )Nbreakr  r   s      r4   visit_BreakCodeGenerator.visit_Break  s    w%r7   c                     UR                  5       nUR                  R                  U5        U R                  U5        U R	                  UR
                  U5        U R                  U5        g r.   )r   r   rz  rc  r)  r}  rg  )r'   r)   r*   scope_frames       r4   visit_ScopeCodeGenerator.visit_Scope  sO    kkm((.%		;/%r7   c                    U R                  5       nU R                  U SU R                  U5       35        U R                  U S35        U R                  UR                  U5        U R                  U5        UR                  SS9nUR                  R                  U5        U R                  U5        U R                  UR                  U5        U R                  U5        U R                  5         g )NrY  z.vars = T)r   )r  r	  r  r2   r   r  r   r   rz  rc  r)  r}  rg  r  )r'   r)   r*   r   r  s        r4   visit_OverlayScope CodeGenerator.visit_OverlayScope  s    '')#c$"5"5e"<!=>?#h'(

4<<'##C(kk4k0((.%		;/%""$r7   c                    UR                    H  nU R                  SUR                   S35        U R                  UR                  U5         UR                  R                  UR                  5      n[        UR                  UR                  U5        M     g ! [        R                   a    SUR                  l
         M  f = f)Nzcontext.eval_ctx.rY  T)optionsr	  r>  r2   rb   r  r0   setattrr   r  r1   )r'   r)   r*   keywordr  s        r4   visit_EvalContextModifier'CodeGenerator.visit_EvalContextModifier  s     ||GNN.w{{m3?@JJw}}e,:mm,,U^^< S9 $
 ## /*.'/s   %B%C ?C c                 J   U R                  5       nUR                  R                  5       nU R                  U S35        U R	                  X5        UR
                   H  nU R                  XR5        M     UR                  R                  U5        U R                  SU S35        g )Nz = context.eval_ctx.save()zcontext.eval_ctx.revert(rB   )r  r0   saver	  r!  r}  r2   revert)r'   r)   r*   old_ctx_name	saved_ctxr  s         r4   visit_ScopedEvalContextModifier-CodeGenerator.visit_ScopedEvalContextModifier  s     002NN'')	,'ABC&&t3YYEJJu$ i(1,qABr7   )r   r   rn  r   r   r   r   r   r   r   r   r   r   r   rX   rC   r   rV   r   r   r   rU   r/   rW   r   NFTr   r   )r
   r.   )Nr   )zasync r  )r   r   r   r   r9   r   rw   TextIOrr   r   propertyrY   rs   r  r  r+   r   r  r  r  r   Noder  r!  r%  r   r)  rF   r	  r2  r   Callr   r   Mappingr:   rJ  rV  rc  rg  rm  rp  r   r   r  r   r  r  r  r  r  r  r  r  r  r  r  r\  r  r  r  r  r\   r  r   r   r  r  Includer  Import
FromImportr  r  r'  ForrB  IfrG  rK  rR  FilterBlockrW  Withr_  ExprStmtrb  
NamedTuplerj  staticmethodrl  rn  ri  rz  r~  r8   r  r  r  Outputr  Assignr  AssignBlockr  r   r   r  r  r  r  r  r  r  r  r  Dictr  rN   	visit_Add	visit_Sub	visit_Mul	visit_Divvisit_FloorDiv	visit_Pow	visit_Mod	visit_Andvisit_OrrT   	visit_Pos	visit_Neg	visit_Notr;   Concatr  Comparer  Operandr  Getattrr  Getitemr  r  r  r   Iteratorr  r   r   CondExprr  rO  Keywordr  MarkSafer  MarkSafeIfAutoescaper  EnvironmentAttributer  ExtensionAttributer   r  r  InternalNamer  ContextReferencer	  DerivedContextReferencer  Continuer  Breakr  Scoper  OverlayScoper  EvalContextModifierr!  ScopedEvalContextModifierr(  r   r   r7   r4   r(   r(   ,  s    (, G4"G4 jjoG4 **S/	G4
 

188$G4 G4 G4 
G4R *4 * *
L LS L] L,c ,
/E /d / 5:99-19	9("C " "< <ajj.D <PT <u   DH"*+**UZZ*@		

5:: 6 	u 	 	s t  IJJJuzz2BE	*AJJuzz2 *# *d * ;?	7/ggejj%,,

:;7/ 7/ jj3:!67	7/
 
7/r,qzz%**'= ,$ ,\> >4 > B B4 BD BH HC HQT H2 2 2Q GGEKK89Q BGQ 	
	!Q f

8 

E 

d 

UZZ C ! !# !+I I$ I$6C 6D 65S 5T 5,1 1## #UE Uc U3c 3d 3))O )O4 )O\ @Dx9NNx9+,::e+<x9	x9t/ /E /d /b(!%-- (! (!$ (!T8%-- 8 8$ 8tUGGELL%*:*::;UDIU	U	N 	Ne 	N 	N5U%5%5 5e 5 5nIPeii IP IP$ IPVUXX e  */ /E /d /EOO E d 	'e&7&7 	' 	'$ 	'
%uzz 
%% 
%D 
%%5>> %% %D %   155   ,0Iqzz-(/. .`#

155(9 #c #%JJ%',%8E%	%*%JJ%',%8E%	% 	JJ	',	8E			M Me M M^( (e ( (>&e&7&7 & &$ &0uzz % D 20 0E 0d 0" "E "d "u'9'9 % D . .E .d .uzz % D uzz % D  C IC IC IC I &ND!IC IE"I4 H3I3I6"I e    %--  $  %%-- % %$ % 	%-- 	 	$ 	 	 !%-- ! !$ ! !() )E )d ) 'GGELL%**45'>C'PT'	
D	' 'R 6 6e 6 6 6  )uzz )% )D ) ) 5>> % D  , EJJJ',>B	 ,&%-- & &$ &5>> % D 
..7<	/../7</	/
O,,O5:O	O
9u'9'9 9% 9D 9u'9'9 % D **38	
/11/:?/	/
)5>> )% )D )& &E &d && &E &d &%u'9'9 %% %D %:--:6;:	:
C33
C<A
C	
Cr7   r*  )Fr   typingr9   
contextlibr   	functoolsr   ior   	itertoolsr   r   r   r:  
markupsafer   r	   r  r   
exceptionsr   
idtrackingr   r   r   r   r   r   r/   r   utilsr   r   rJ   r   TYPE_CHECKINGtyping_extensionsterC   r   TypeVarrh  r:   r   r  r;   rw   rL   rN   rS   rT   r\   r   r+  rr   ra   rf   r   r-  Setr   r   r+   RuntimeErrorr   r   r   r  r   r(   r   r7   r4   <module>rn     s0   6  % $   2    .  & * ( *       ??"(IIcCJ/0 



		'Q '1 ' C AJJ'PRV'VW *ZZ%//7;TAB0 $(
.. **S/ jjo	
 JJqxx    ZZ_0 4 "::ejj!*+**S/UU3Z& &P PfJ, J'k '&&K &,9 bCK bCr7   