B ^a)@sddlZddlmZddlmZdZdZdZdZ dej ej ej d d d d d Z dej ej d d d ddZGdd d ZGdddeZGdddeZdS)N)nodes) NodeVisitorparamZresolvealiasZ undefinedSymbols)rparent_symbolsreturncCs.t|d}t|}x|D]}||qW|S)N)parent)rFrameSymbolVisitorvisit)rrsymvisitornoderB/opt/alt/python37/lib/python3.7/site-packages/jinja2/idtracking.py find_symbols s   r)rrr cCst|d}|||S)N)r )r analyze_node)rrr rrrsymbols_for_nodes  rc@s*eZdZd#ejdejeddddZejej ddddZ d$e ejej e eje fe dd d Z e ejej d d d Ze eje dddZe e dddZddddZe ddddZe e dddZe ddddZejdddddZeje e fddd Zeje dd!d"ZdS)%rN)r levelr cCsD|dkr |dkrd}n |jd}||_||_i|_i|_t|_dS)Nrr)rr refsloadssetstores)selfr rrrr__init__s zSymbols.__init__)rkwargsr cKst|}|j|f|dS)N) RootVisitorr )rrrrrrrr.szSymbols.analyze_node)nameloadr cCs2d|jd|}||j|<|dk r.||j|<|S)NZl__)rrr)rrridentrrr _define_ref2s   zSymbols._define_ref)targetr cCs.||jkr|j|S|jdk r*|j|SdS)N)rr find_load)rr#rrrr$;s     zSymbols.find_load)rr cCs.||jkr|j|S|jdk r*|j|SdS)N)rr find_ref)rrrrrr%Ds     zSymbols.find_refcCs&||}|dkr"td|d|S)NzFTried to resolve a name to a reference that was unknown to the frame ())r%AssertionError)rrrvrrrrefMs  z Symbols.ref)r cCsJttt|j}|j|j|j |_|j |_ |j |_ |S)N) tcastrobject__new__ __class____dict__updatercopyrr)rr(rrrr1Vs    z Symbols.copycCs`|j|||jkr\|jdk rJ|j|}|dk rJ|j|t|fddS|j|tdfddS)N)r)raddrr r%r"VAR_LOAD_ALIASVAR_LOAD_UNDEFINED)rrZ outer_refrrrstore^s    z Symbols.storecCs|j||j|tdfdS)N)r)rr2r"VAR_LOAD_PARAMETER)rrrrrdeclare_parameterps zSymbols.declare_parametercCs$||dkr |j|t|fddS)N)r)r%r"VAR_LOAD_RESOLVE)rrrrrrtsz Symbols.load)branch_symbolsr c Csi}x<|D]4}x.|jD]$}||jkr&q||dd||<qWq Wx6|D].}|j|j|j|j|j|jqHWxx|D]l\}}|t|krq||}|dk std|j dk r|j |}|dk rt |f|j|<qt |f|j|<qWdS)Nrrzshould not happen) rgetrr0ritemslenr%r'r r3r8) rr9rbranchr#r rZ branch_countZ outer_targetrrr branch_updatexs*        zSymbols.branch_updatecCsJi}|}x<|dk rDx(t|jD]}||kr||||<qW|j}q W|S)N)sortedrr%r )rr(rrrrr dump_storess  zSymbols.dump_storescCsPt}|}x@|dk rJx,|jD]\}\}}|tkr ||q W|j}q W|S)N)rrr;r6r2r )rr(rr#Zinstrr rrrdump_param_targetss  zSymbols.dump_param_targets)NN)N)__name__ __module__ __qualname__r*OptionalintrrNodeAnyrstrZTupler"r$r%r)r1r5r7rSequencer>ZDictr@SetrArrrrrs     c@seZdZdddddZejejddddZeZ eZ eZ eZ eZ eZeZejejddd d Zejejddd d Zejejddd dZdejeejddddZejejddddZejejejddddZdS)rrN)symbolsr cCst||_dS)N)r sym_visitor)rrLrrrrszRootVisitor.__init__)rrr cKs"x|D]}|j|q WdS)N)iter_child_nodesrMr )rrrchildrrr _simple_visitszRootVisitor._simple_visitcKs x|jD]}|j|qWdS)N)bodyrMr )rrrrOrrrvisit_AssignBlocks zRootVisitor.visit_AssignBlockcKs&x |jddD]}|j|qWdS)N)call)Zexclude)rNrMr )rrrrOrrrvisit_CallBlockszRootVisitor.visit_CallBlockcKs x|jD]}|j|qWdS)N)rQrMr )rrrrOrrrvisit_OverlayScopes zRootVisitor.visit_OverlayScoperQ)r for_branchrr cKs|dkr"|jj|jdd|j}nN|dkr2|j}n>|dkrh|jj|jdd|jdk rd|j|jdStd|rx|D]}|j|qzWdS)NrQT)store_as_paramelsetestzUnknown for branch)rMr r#rQelse_rY RuntimeError)rrrVrr=itemrrr visit_Fors  zRootVisitor.visit_ForcKs<x|jD]}|j|qWx|jD]}|j|q$WdS)N)targetsrMr rQ)rrrr#rOrrr visit_Withs  zRootVisitor.visit_With)rargsrr cOstdt|jdS)NzCannot find symbols for )NotImplementedErrortyperB)rrr`rrrr generic_visitszRootVisitor.generic_visit)rQ)rBrCrDrrrGr*rHrPZvisit_Template visit_Block visit_Macrovisit_FilterBlock visit_Scopevisit_IfZvisit_ScopedEvalContextModifier AssignBlockrR CallBlockrT OverlayScoperUForrIr]Withr_rcrrrrrs  rc@sneZdZdZdddddZd(ejeej ddd d Z ej ej dd d d Z ej ej dd ddZejej dd ddZejej dd ddZejej dd ddZejej dd ddZejej dd ddZejej dd ddZejej dd ddZejej dd ddZejej dd d d!Z ej!ej dd d"d#Z"ej#ej dd d$d%Z$ej%ej dd d&d'Z&dS))r zA visitor for `Frame.inspect`.rN)rLr cCs ||_dS)N)rL)rrLrrrrszFrameSymbolVisitor.__init__F)rrWrr cKsT|s|jdkr|j|jn2|jdkr8|j|jn|jdkrP|j|jdS)z2All assignments to names go through this function.rr5rN)ZctxrLr7rr5r)rrrWrrrr visit_Names   zFrameSymbolVisitor.visit_Name)rrr cKs|j|jdS)N)rLrr)rrrrrr visit_NSRefszFrameSymbolVisitor.visit_NSRefc snj|jfjtjtjddfdd }||j}||j}||j pTd}j |||gdS)Nr)rr cs4_}x|D]}j|fqW_|S)N)r1rLr )rr(Zsubnode)roriginal_symbolsrrr inner_visits  z0FrameSymbolVisitor.visit_If..inner_visitr) r rYrLr*IterablerrGrQZelif_rZr>)rrrrqZ body_symbolsZ elif_symbolsZ else_symbolsr)rrprrrhs  zFrameSymbolVisitor.visit_IfcKs|j|jdS)N)rLr5r)rrrrrrreszFrameSymbolVisitor.visit_MacrocKs |j|f||j|jdS)N)rcrLr5r#)rrrrrr visit_ImportszFrameSymbolVisitor.visit_ImportcKsJ|j|f|x6|jD],}t|tr6|j|dq|j|qWdS)Nr)rcnames isinstancetuplerLr5)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)rrrrrrr]#szFrameSymbolVisitor.visit_ForcKs|j|jf|dS)N)r rS)rrrrrrrT)sz"FrameSymbolVisitor.visit_CallBlockcKs|j|jf|dS)N)r filter)rrrrrrrf,sz$FrameSymbolVisitor.visit_FilterBlockcKsx|jD]}||qWdS)N)valuesr )rrrr#rrrr_/s zFrameSymbolVisitor.visit_WithcKs|j|jf|dS)zStop visiting at block assigns.N)r r#)rrrrrrrR3sz$FrameSymbolVisitor.visit_AssignBlockcKsdS)zStop visiting at scopes.Nr)rrrrrrrg7szFrameSymbolVisitor.visit_ScopecKsdS)zStop visiting at blocks.Nr)rrrrrrrd:szFrameSymbolVisitor.visit_BlockcKsdS)z!Do not visit into overlay scopes.Nr)rrrrrrrU=sz%FrameSymbolVisitor.visit_OverlayScope)F)'rBrCrD__doc__rrNameboolr*rHrnZNSRefroZIfrhZMacroreZImportrsZ FromImportrwZAssignrxrlr]rjrTZ FilterBlockrfrmr_rirRZScopergZBlockrdrkrUrrrrr s$   r )N)N)typingr*rrrr6r8r3r4rrrGrErrrrr rrrrs   :