U a)@sddlZddlmZddlmZdZdZdZdZ dej ej ej d d d d d Z dej ej d d d ddZGdd d ZGdddeZGdddeZdS)N)nodes) NodeVisitorparamresolvealiasZ undefinedSymbols)rparent_symbolsreturncCs*t|d}t|}|D]}||q|SN)parent)rFrameSymbolVisitorvisit)rr symvisitornoderRC:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-8gbwd15f\jinja2\idtracking.py find_symbols s   r)rr r cCst|d}|||Sr )r analyze_node)rr rrrrsymbols_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|dSN) RootVisitorr)rrrrrrrr.szSymbols.analyze_node)nameloadr cCs2d|jd|}||j|<|dk r.||j|<|S)NZl__)rrr)rr"r#identrrr _define_ref2s   zSymbols._define_ref)targetr cCs.||jkr|j|S|jdk r*|j|SdSr )rr find_load)rr'rrrr(;s     zSymbols.find_load)r"r cCs.||jkr|j|S|jdk r*|j|SdSr )rr find_refrr"rrrr)Ds     zSymbols.find_refcCs&||}|dkr"td|d|S)NzFTried to resolve a name to a reference that was unknown to the frame ())r)AssertionError)rr"rvrrrrefMs   z Symbols.ref)r cCsJttt|j}|j|j|j |_|j |_ |j |_ |Sr ) tcastrobject__new__ __class____dict__updatercopyrr)rr-rrrr6Vs    z Symbols.copycCs`|j|||jkr\|jdk rJ|j|}|dk rJ|j|t|fddS|j|tdfddSN)r#)raddrr r)r&VAR_LOAD_ALIASVAR_LOAD_UNDEFINED)rr"Z outer_refrrrstore^s    z Symbols.storecCs|j||j|tdfdSr7)rr8r&VAR_LOAD_PARAMETERr*rrrdeclare_parameterps zSymbols.declare_parametercCs$||dkr |j|t|fddSr7)r)r&VAR_LOAD_RESOLVEr*rrrr#tsz Symbols.load)branch_symbolsr c Csi}|D]0}|jD]$}||jkr"q||dd||<qq|D].}|j|j|j|j|j|jq>|D]l\}}|t|krqv||}|dk std|j dk r|j |}|dk rt |f|j|<qvt |f|j|<qvdS)Nrrzshould not happen) rgetrr5ritemslenr)r,r r9r>) rr?rbranchr'rr"Z branch_countZ outer_targetrrr branch_updatexs*      zSymbols.branch_updatecCs>i}|}|dk r:|jD]}||kr||||<q|j}q|Sr )rr)r )rr-rr"rrr dump_storess zSymbols.dump_storescCsHt}|}|dk rD|jD]\}\}}|tkr||q|j}q |Sr )rrrAr<r8r )rr-rr'instrr$rrrdump_param_targetss zSymbols.dump_param_targets)NN)N)__name__ __module__ __qualname__r/OptionalintrrNodeAnyrstrTupler&r(r)r.r6r;r=r#SequencerDDictrESetrGrrrrrs0      c@seZdZdddddZejejddddZeZ eZ eZ eZ eZ eZeZejejddd d Zejejddd d Zejejddd dZdejeejddddZejejddddZejejejddddZdS)r!rNsymbolsr cCst||_dSr )r sym_visitorrrUrrrrszRootVisitor.__init__rcKs|D]}|j|qdSr Ziter_child_nodesrVrrrrchildrrr _simple_visits zRootVisitor._simple_visitcKs|jD]}|j|qdSr bodyrVrrYrrrvisit_AssignBlocks zRootVisitor.visit_AssignBlockcKs"|jddD]}|j|q dS)N)call)excluderXrYrrrvisit_CallBlockszRootVisitor.visit_CallBlockcKs|jD]}|j|qdSr r\rYrrrvisit_OverlayScopes zRootVisitor.visit_OverlayScoper])r for_branchrr cKs|dkr"|jj|jdd|j}nN|dkr2|j}n>|dkrh|jj|jdd|jdk rd|j|jdStd|r|D]}|j|qxdS)Nr]T)store_as_paramelsetestzUnknown for branch)rVrr'r]else_rf RuntimeError)rrrcrrCitemrrr visit_Fors zRootVisitor.visit_ForcKs4|jD]}|j|q|jD]}|j|qdSr )targetsrVrr])rrrr'rZrrr visit_Withs  zRootVisitor.visit_With)rargsrr cOstdt|jdS)NzCannot find symbols for )NotImplementedErrortyperH)rrrmrrrr generic_visitszRootVisitor.generic_visit)r])rHrIrJrrrMr/rNr[Zvisit_Template visit_Block visit_Macrovisit_FilterBlock visit_Scopevisit_IfZvisit_ScopedEvalContextModifier AssignBlockr^ CallBlockra OverlayScoperbForrOrjWithrlrprrrrr!s* r!c@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`.rNrTcCs ||_dSr )rUrWrrrrszFrameSymbolVisitor.__init__F)rrdrr cKsT|s|jdkr|j|jn2|jdkr8|j|jn|jdkrP|j|jdS)z2All assignments to names go through this function.rr;r#N)ctxrUr=r"r;r#)rrrdrrrr visit_Names   zFrameSymbolVisitor.visit_NamercKs|j|jdSr )rUr#r"rrrrrr visit_NSRefszFrameSymbolVisitor.visit_NSRefc snj|jfjtjtjddfdd }||j}||j}||j pTd}j |||gdS)Nr)rr cs0_}|D]}j|fq_|Sr )r6rUr)rr-ZsubnoderZoriginal_symbolsrrr inner_visits z0FrameSymbolVisitor.visit_If..inner_visitr) rrfrUr/IterablerrMr]Zelif_rgrD)rrrrZ body_symbolsZ elif_symbolsZ else_symbolsrrrrus  zFrameSymbolVisitor.visit_IfcKs|j|jdSr )rUr;r"r}rrrrrszFrameSymbolVisitor.visit_MacrocKs |j|f||j|jdSr )rprUr;r'r}rrr visit_ImportszFrameSymbolVisitor.visit_ImportcKsF|j|f||jD],}t|tr4|j|dq|j|qdS)Nr)rpnames isinstancetuplerUr;)rrrr"rrrvisit_FromImports   z#FrameSymbolVisitor.visit_FromImportcKs$|j|jf||j|jf|dS)z'Visit assignments in the correct order.N)rrr'r}rrr 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)riterr}rrrrj#szFrameSymbolVisitor.visit_ForcKs|j|jf|dSr )rr_r}rrrra)sz"FrameSymbolVisitor.visit_CallBlockcKs|j|jf|dSr )rfilterr}rrrrs,sz$FrameSymbolVisitor.visit_FilterBlockcKs|jD]}||qdSr )valuesr)rrrr'rrrrl/s zFrameSymbolVisitor.visit_WithcKs|j|jf|dS)zStop visiting at block assigns.N)rr'r}rrrr^3sz$FrameSymbolVisitor.visit_AssignBlockcKsdS)zStop visiting at scopes.Nrr}rrrrt7szFrameSymbolVisitor.visit_ScopecKsdS)zStop visiting at blocks.Nrr}rrrrq:szFrameSymbolVisitor.visit_BlockcKsdS)z!Do not visit into overlay scopes.Nrr}rrrrb=sz%FrameSymbolVisitor.visit_OverlayScope)F)'rHrIrJ__doc__rrNameboolr/rNr|ZNSRefr~ZIfruZMacrorrZImportrZ FromImportrZAssignrryrjrwraZ FilterBlockrsrzrlrvr^ZScopertZBlockrqrxrbrrrrr s.  r )N)N)typingr/rrrr<r>r9r:rrMrKrrrr!r rrrrs,     :