3 C\#@spddlmZddlmZdZdZdZdZddd Zdd d Z Gd d d e Z GdddeZ GdddeZ dS)) NodeVisitor) iteritemsparamresolvealiasZ undefinedNcCs.t|d}t|}x|D]}|j|qW|S)N)parent)SymbolsFrameSymbolVisitorvisit)nodesparent_symbolssymvisitornoderi/private/var/folders/pf/wv4htv3x0qs2c2mp0dnn0kchsvlck3/T/pip-install-emcbgzcf/jinja2/jinja2/idtracking.py find_symbols s   rcCst|d}|j||S)N)r)r analyze_node)rr r rrrsymbols_for_nodes  rc@sxeZdZdddZddZdddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZdS)rNcCsD|dkr |dkrd}n |jd}||_||_i|_i|_t|_dS)Nr)levelrrefsloadssetstores)selfrrrrr__init__s zSymbols.__init__cKst|}|j|f|dS)N) RootVisitorr )rrkwargsrrrrr'szSymbols.analyze_nodecCs.d|j|f}||j|<|dk r*||j|<|S)Nzl_%d_%s)rrr)rnameloadidentrrr _define_ref+s   zSymbols._define_refcCs.||jkr|j|S|jdk r*|jj|SdS)N)rr find_load)rtargetrrrr#2s   zSymbols.find_loadcCs.||jkr|j|S|jdk r*|jj|SdS)N)rrfind_ref)rrrrrr%8s   zSymbols.find_refcCs"|j|}|dkrtd||S)NzITried to resolve a name to a reference that was unknown to the frame (%r))r%AssertionError)rrrvrrrref>s  z Symbols.refcCsBtj|j}|jj|j|jj|_|jj|_|jj|_|S)N) object__new__ __class____dict__updatercopyrr)rr'rrrr.Es     z Symbols.copycCs`|jj|||jkr\|jdk rJ|jj|}|dk rJ|j|t|fddS|j|tdfddS)N)r )raddrrr%r"VAR_LOAD_ALIASVAR_LOAD_UNDEFINED)rrZ outer_refrrrstoreMs    z Symbols.storecCs|jj||j|tdfdS)N)r )rr/r"VAR_LOAD_PARAMETER)rrrrrdeclare_parameter_s zSymbols.declare_parametercCs(|j|}|dkr$|j|t|fddS)N)r )r%r"VAR_LOAD_RESOLVE)rrr$rrrr cs z Symbols.loadc Csi}x<|D]4}x.|jD]$}||jkr&q|j|dd||<qWq Wx6|D].}|jj|j|jj|j|jj|jqHWxxt|D]l\}}|t|krq|j|}|dk std|j dk r|j j|}|dk rt |f|j|<qt |f|j|<qWdS)Nrrzshould not happen) rgetrr-rrlenr%r&rr0r5) rZbranch_symbolsrbranchr$r rZ branch_countZ outer_targetrrr branch_updatehs*        zSymbols.branch_updatecCsFi}|}x8|dk r@x$|jD]}||kr|j|||<qW|j}q W|S)N)rr%r)rr'rrrrr dump_storess   zSymbols.dump_storescCsPt}|}x@|dk rJx,t|jD]\}\}}|tkr |j|q W|j}q W|S)N)rrrr3r/r)rr'rr$instr_rrrdump_param_targetss  zSymbols.dump_param_targets)NN)N)__name__ __module__ __qualname__rrr"r#r%r(r.r2r4r r9r:r=rrrrrs   rc@sjeZdZddZddZeZZZZZ Z Z ddZ ddZ d d Zdd d ZddZddZdS)rcCst||_dS)N)r sym_visitor)rsymbolsrrrrszRootVisitor.__init__cKs"x|jD]}|jj|q WdS)N)iter_child_nodesrAr )rrrchildrrr _simple_visitszRootVisitor._simple_visitcKs x|jD]}|jj|qWdS)N)bodyrAr )rrrrDrrrvisit_AssignBlocks zRootVisitor.visit_AssignBlockcKs&x |jddD]}|jj|qWdS)Ncall)exclude)rH)rCrAr )rrrrDrrrvisit_CallBlockszRootVisitor.visit_CallBlockcKs x|jD]}|jj|qWdS)N)rFrAr )rrrrDrrrvisit_OverlayScopes zRootVisitor.visit_OverlayScoperFcKs|dkr"|jj|jdd|j}nN|dkr2|j}n>|dkrh|jj|jdd|jdk rd|jj|jdStdx|pxfD]}|jj|qzWdS)NrFT)store_as_paramelsetestzUnknown for branch)rAr r$rFelse_rN RuntimeError)rrZ for_branchrr8itemrrr visit_Fors zRootVisitor.visit_ForcKs<x|jD]}|jj|qWx|jD]}|jj|q$WdS)N)targetsrAr rF)rrrr$rDrrr visit_Withs  zRootVisitor.visit_WithcOstd|jjdS)NzCannot find symbols for %r)NotImplementedErrorr+r>)rrargsrrrr generic_visitszRootVisitor.generic_visitN)rF)r>r?r@rrEZvisit_Template visit_Block visit_Macrovisit_FilterBlock visit_Scopevisit_IfZvisit_ScopedEvalContextModifierrGrJrKrRrTrWrrrrrs rc@seZdZdZddZd$ddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#S)%r zA visitor for `Frame.inspect`.cCs ||_dS)N)rB)rrBrrrrszFrameSymbolVisitor.__init__FcKsT|s|jdkr|jj|jn2|jdkr8|jj|jn|jdkrP|jj|jdS)z2All assignments to names go through this function.rr2r N)ctxrBr4rr2r )rrrLrrrr visit_Names   zFrameSymbolVisitor.visit_NamecKs|jj|jdS)N)rBr r)rrrrrr visit_NSRefszFrameSymbolVisitor.visit_NSRefc s^j|jfjfdd}||j}||j}||jpDf}jj|||gdS)Ncs4j_}x|D]}j|fqW_|S)N)r.rBr )r r'Zsubnode)roriginal_symbolsrrr inner_visits  z0FrameSymbolVisitor.visit_If..inner_visit)r rNrBrFZelif_rOr9)rrrraZ body_symbolsZ elif_symbolsZ else_symbolsr)rr`rrr\s  zFrameSymbolVisitor.visit_IfcKs|jj|jdS)N)rBr2r)rrrrrrrYszFrameSymbolVisitor.visit_MacrocKs |j|f||jj|jdS)N)rWrBr2r$)rrrrrr visit_ImportszFrameSymbolVisitor.visit_ImportcKsJ|j|f|x6|jD],}t|tr6|jj|dq|jj|qWdS)Nr)rWnames isinstancetuplerBr2)rrrrrrrvisit_FromImports   z#FrameSymbolVisitor.visit_FromImportcKs$|j|jf||j|jf|dS)z'Visit assignments in the correct order.N)r rr$)rrrrrr visit_AssignszFrameSymbolVisitor.visit_AssigncKs|j|jf|dS)zqVisiting stops at for blocks. However the block sequence is visited as part of the outer scope. N)r iter)rrrrrrrRszFrameSymbolVisitor.visit_ForcKs|j|jf|dS)N)r rH)rrrrrrrJ sz"FrameSymbolVisitor.visit_CallBlockcKs|j|jf|dS)N)r filter)rrrrrrrZ sz$FrameSymbolVisitor.visit_FilterBlockcKsx|jD]}|j|qWdS)N)valuesr )rrrr$rrrrTs zFrameSymbolVisitor.visit_WithcKs|j|jf|dS)zStop visiting at block assigns.N)r r$)rrrrrrrGsz$FrameSymbolVisitor.visit_AssignBlockcKsdS)zStop visiting at scopes.Nr)rrrrrrr[szFrameSymbolVisitor.visit_ScopecKsdS)zStop visiting at blocks.Nr)rrrrrrrXszFrameSymbolVisitor.visit_BlockcKsdS)z!Do not visit into overlay scopes.Nr)rrrrrrrKsz%FrameSymbolVisitor.visit_OverlayScopeN)F)r>r?r@__doc__rr^r_r\rYrbrfrgrRrJrZrTrGr[rXrKrrrrr s" r )N)N)Zjinja2.visitorrZjinja2._compatrr3r5r0r1rrr)rrr rrrrs    ~4