a `#@spddlmZddlmZdZdZdZdZddd Zdd d Z Gd d d e Z GdddeZ GdddeZ dS)) iteritems) NodeVisitorparamresolvealiasZ undefinedNcCs*t|d}t|}|D]}||q|SN)parent)SymbolsFrameSymbolVisitorvisit)nodesparent_symbolssymvisitornoder5/usr/lib/python3.9/site-packages/jinja2/idtracking.py find_symbols s   rcCst|d}|||Sr)r analyze_node)rr rrrrsymbols_for_nodes  rc@sxeZdZdddZddZdddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZdS)r NcCsD|dur |durd}n |jd}||_||_i|_i|_t|_dSNr)levelrrefsloadssetstores)selfrrrrr__init__s zSymbols.__init__cKst|}|j|fi|dSN) RootVisitorr )rrkwargsrrrrr%szSymbols.analyze_nodecCs.d|j|f}||j|<|dur*||j|<|S)Nzl_%d_%s)rrr)rnameloadidentrrr _define_ref)s   zSymbols._define_refcCs.||jvr|j|S|jdur*|j|SdSr)rr find_load)rtargetrrrr&0s   zSymbols.find_loadcCs.||jvr|j|S|jdur*|j|SdSr)rrfind_refrr"rrrr(6s   zSymbols.find_refcCs"||}|durtd||S)NzITried to resolve a name to a reference that was unknown to the frame (%r))r(AssertionError)rr"rvrrrref<s z Symbols.refcCsBt|j}|j|j|j|_|j|_|j|_|Sr) object__new__ __class____dict__updatercopyrr)rr+rrrr2Es     z Symbols.copycCs`|j|||jvr\|jdurJ|j|}|durJ|j|t|fddS|j|tdfddSN)r#)raddrrr(r%VAR_LOAD_ALIASVAR_LOAD_UNDEFINED)rr"Z outer_refrrrstoreMs    z Symbols.storecCs|j||j|tdfdSr3)rr4r%VAR_LOAD_PARAMETERr)rrrdeclare_parameter_s zSymbols.declare_parametercCs(||}|dur$|j|t|fddSr3)r(r%VAR_LOAD_RESOLVE)rr"r'rrrr#cs z Symbols.loadc Csi}|D]0}|jD]$}||jvr"q||dd||<qq|D].}|j|j|j|j|j|jq>t|D]\\}}|t|krqv||}|jdur|j|}|durt |f|j|<qvt |f|j|<qvdSr) rgetrr1rrlenr(rr5r:) rZbranch_symbolsrbranchr'rr"Z branch_countZ outer_targetrrr branch_updatehs(      zSymbols.branch_updatecCs>i}|}|dur:|jD]}||vr||||<q|j}q|Sr)rr(r)rr+rr"rrr dump_storess zSymbols.dump_storescCsHt}|}|durDt|jD]\}\}}|tkr||q|j}q |Sr)rrrr8r4r)rr+rr'Zinstr_rrrdump_param_targetss zSymbols.dump_param_targets)NN)N)__name__ __module__ __qualname__rrr%r&r(r,r2r7r9r#r>r?rArrrrr s    r c@sjeZdZddZddZeZZZZZ Z Z ddZ ddZ d d Zdd d ZddZddZdS)r cCst||_dSr)r sym_visitorrsymbolsrrrrszRootVisitor.__init__cKs|D]}|j|qdSrZiter_child_nodesrEr rrr!childrrr _simple_visits zRootVisitor._simple_visitcKs|jD]}|j|qdSrbodyrEr rIrrrvisit_AssignBlocks zRootVisitor.visit_AssignBlockcKs"|jddD]}|j|q dS)N)call)ZexcluderHrIrrrvisit_CallBlockszRootVisitor.visit_CallBlockcKs|jD]}|j|qdSrrLrIrrrvisit_OverlayScopes zRootVisitor.visit_OverlayScoperMcKs|dkr"|jj|jdd|j}nN|dkr2|j}n>|dkrh|jj|jdd|jdurd|j|jdStd|pvdD]}|j|qxdS)NrMT)store_as_paramelsetestzUnknown for branchr)rEr r'rMelse_rT RuntimeError)rrZ for_branchr!r=itemrrr visit_Fors  zRootVisitor.visit_ForcKs4|jD]}|j|q|jD]}|j|qdSr)targetsrEr rM)rrr!r'rJrrr visit_Withs  zRootVisitor.visit_WithcOstd|jjdS)NzCannot find symbols for %r)NotImplementedErrorr/rB)rrargsr!rrr generic_visits zRootVisitor.generic_visitN)rM)rBrCrDrrKZvisit_Template visit_Block visit_Macrovisit_FilterBlock visit_Scopevisit_IfZvisit_ScopedEvalContextModifierrNrPrQrXrZr]rrrrr s&  r c@seZdZdZddZd$ddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#S)%r zA visitor for `Frame.inspect`.cCs ||_dSr)rGrFrrrrszFrameSymbolVisitor.__init__FcKsT|s|jdkr|j|jn2|jdkr8|j|jn|jdkrP|j|jdS)z2All assignments to names go through this function.rr7r#N)ctxrGr9r"r7r#)rrrRr!rrr visit_Names   zFrameSymbolVisitor.visit_NamecKs|j|jdSr)rGr#r"rrr!rrr visit_NSRefszFrameSymbolVisitor.visit_NSRefc sbj|jfijfdd}||j}||j}||jpHd}j|||gdS)Ncs4_}|D]}j|fiq_|Sr)r2rGr )r r+Zsubnoder!Zoriginal_symbolsrrr inner_visits z0FrameSymbolVisitor.visit_If..inner_visitr)r rTrGrMZelif_rUr>)rrr!rhZ body_symbolsZ elif_symbolsZ else_symbolsrrgrrbs  zFrameSymbolVisitor.visit_IfcKs|j|jdSr)rGr7r"rerrrr_szFrameSymbolVisitor.visit_MacrocKs$|j|fi||j|jdSr)r]rGr7r'rerrr visit_ImportszFrameSymbolVisitor.visit_ImportcKsJ|j|fi||jD],}t|tr8|j|dq|j|qdS)Nr)r]names isinstancetuplerGr7)rrr!r"rrrvisit_FromImports   z#FrameSymbolVisitor.visit_FromImportcKs,|j|jfi||j|jfi|dS)z'Visit assignments in the correct order.N)r rr'rerrr visit_AssignszFrameSymbolVisitor.visit_AssigncKs|j|jfi|dS)zqVisiting stops at for blocks. However the block sequence is visited as part of the outer scope. N)r iterrerrrrXszFrameSymbolVisitor.visit_ForcKs|j|jfi|dSr)r rOrerrrrP sz"FrameSymbolVisitor.visit_CallBlockcKs|j|jfi|dSr)r filterrerrrr`sz$FrameSymbolVisitor.visit_FilterBlockcKs|jD]}||qdSr)valuesr )rrr!r'rrrrZs zFrameSymbolVisitor.visit_WithcKs|j|jfi|dS)zStop visiting at block assigns.N)r r'rerrrrNsz$FrameSymbolVisitor.visit_AssignBlockcKsdS)zStop visiting at scopes.NrrerrrraszFrameSymbolVisitor.visit_ScopecKsdS)zStop visiting at blocks.Nrrerrrr^szFrameSymbolVisitor.visit_BlockcKsdS)z!Do not visit into overlay scopes.NrrerrrrQ!sz%FrameSymbolVisitor.visit_OverlayScopeN)F)rBrCrD__doc__rrdrfrbr_rirmrnrXrPr`rZrNrar^rQrrrrr s" r )N)N)Z_compatrrrr8r:r5r6rrr-r r r rrrrs    8