a +b)@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 symvisitornoderE/usr/lib/python3.9/site-packages/ansible/_vendor/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|dur |durd}n |jd}||_||_i|_i|_t|_dS)Nrr)rr refsloadssetstores)selfr rrrr__init__s zSymbols.__init__rkwargsr cKst|}|j|fi|dSN) RootVisitorr)rrrrrrrr.szSymbols.analyze_node)nameloadr cCs2d|jd|}||j|<|dur.||j|<|S)NZl__)rrr)rr"r#identrrr _define_ref2s   zSymbols._define_ref)targetr cCs.||jvr|j|S|jdur*|j|SdSr )rr find_load)rr'rrrr(;s     zSymbols.find_load)r"r cCs.||jvr|j|S|jdur*|j|SdSr )rr find_refrr"rrrr)Ds     zSymbols.find_refcCs&||}|dur"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 cCsBt|j}|j|j|j|_|j|_|j|_|Sr ) object__new__ __class____dict__updatercopyrr)rr-rrrr4Vs     z Symbols.copycCs`|j|||jvr\|jdurJ|j|}|durJ|j|t|fddS|j|tdfddSN)r#)raddrr r)r&VAR_LOAD_ALIASVAR_LOAD_UNDEFINED)rr"Z outer_refrrrstore^s    z Symbols.storecCs|j||j|tdfdSr5)rr6r&VAR_LOAD_PARAMETERr*rrrdeclare_parameterps zSymbols.declare_parametercCs$||dur |j|t|fddSr5)r)r&VAR_LOAD_RESOLVEr*rrrr#tsz Symbols.load)branch_symbolsr c Csi}|D]0}|jD]$}||jvr"q||dd||<qq|D].}|j|j|j|j|j|jq>|D]l\}}|t|krqv||}|dusJd|jdur|j|}|durt |f|j|<qvt |f|j|<qvdS)Nrrzshould not happen) rgetrr3ritemslenr)r r7r<) rr=rbranchr'rr"Z branch_countZ outer_targetrrr branch_updatexs*      zSymbols.branch_updatecCsBi}|}|dur>t|jD]}||vr||||<q|j}q|Sr )sortedrr)r )rr-rr"rrr dump_storesszSymbols.dump_storescCsHt}|}|durD|jD]\}\}}|tkr||q|j}q |Sr )rrr?r:r6r )rr-rr'Zinstrr$rrrdump_param_targetss zSymbols.dump_param_targets)NN)N)__name__ __module__ __qualname__tOptionalintrrNodeAnyrstrTupler&r(r)r.r4r9r;r#SequencerBDictrDSetrErrrrrs*      c@seZdZdddddZejejddddZeZ eZ eZ eZ eZ eZeZejejddd d Zejejddd d Zejejddd dZdejeejddddZejejddddZejejejddddZdS)r!rNsymbolsr cCst||_dSr )r sym_visitorrrTrrrrszRootVisitor.__init__rcKs|D]}|j|qdSr Ziter_child_nodesrUrrrrchildrrr _simple_visits zRootVisitor._simple_visitcKs|jD]}|j|qdSr bodyrUrrXrrrvisit_AssignBlocks zRootVisitor.visit_AssignBlockcKs"|jddD]}|j|q dS)N)call)ZexcluderWrXrrrvisit_CallBlockszRootVisitor.visit_CallBlockcKs|jD]}|j|qdSr r[rXrrrvisit_OverlayScopes zRootVisitor.visit_OverlayScoper\)r for_branchrr cKs|dkr"|jj|jdd|j}nN|dkr2|j}n>|dkrh|jj|jdd|jdurd|j|jdStd|r|D]}|j|qxdS)Nr\T)store_as_paramelsetestzUnknown for branch)rUrr'r\else_rd RuntimeError)rrrarrAitemrrr visit_Fors zRootVisitor.visit_ForcKs4|jD]}|j|q|jD]}|j|qdSr )targetsrUrr\)rrrr'rYrrr visit_Withs  zRootVisitor.visit_With)rargsrr cOstdt|jdS)NzCannot find symbols for )NotImplementedErrortyperF)rrrkrrrr generic_visitszRootVisitor.generic_visit)r\)rFrGrHrrrLrIrMrZZvisit_Template visit_Block visit_Macrovisit_FilterBlock visit_Scopevisit_IfZvisit_ScopedEvalContextModifier AssignBlockr] CallBlockr_ OverlayScoper`ForrNrhWithrjrnrrrrr!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`.rNrScCs ||_dSr )rTrVrrrrszFrameSymbolVisitor.__init__F)rrbrr cKsT|s|jdkr|j|jn2|jdkr8|j|jn|jdkrP|j|jdS)z2All assignments to names go through this function.rr9r#N)ctxrTr;r"r9r#)rrrbrrrr visit_Names   zFrameSymbolVisitor.visit_NamercKs|j|jdSr )rTr#r"rrrrrr visit_NSRefszFrameSymbolVisitor.visit_NSRefc srj|jfijtjtjddfdd }||j}||j}||j pXd}j |||gdS)Nr)rr cs4_}|D]}j|fiq_|Sr )r4rTr)rr-ZsubnoderZoriginal_symbolsrrr inner_visits z0FrameSymbolVisitor.visit_If..inner_visitr) rrdrTrIIterablerrLr\Zelif_rerB)rrrr~Z body_symbolsZ elif_symbolsZ else_symbolsrr}rrss  zFrameSymbolVisitor.visit_IfcKs|j|jdSr )rTr9r"r{rrrrpszFrameSymbolVisitor.visit_MacrocKs$|j|fi||j|jdSr )rnrTr9r'r{rrr visit_ImportszFrameSymbolVisitor.visit_ImportcKsJ|j|fi||jD],}t|tr8|j|dq|j|qdS)Nr)rnnames isinstancetuplerTr9)rrrr"rrrvisit_FromImports   z#FrameSymbolVisitor.visit_FromImportcKs,|j|jfi||j|jfi|dS)z'Visit assignments in the correct order.N)rrr'r{rrr 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)riterr{rrrrh#szFrameSymbolVisitor.visit_ForcKs|j|jfi|dSr )rr^r{rrrr_)sz"FrameSymbolVisitor.visit_CallBlockcKs|j|jfi|dSr )rfilterr{rrrrq,sz$FrameSymbolVisitor.visit_FilterBlockcKs|jD]}||qdSr )valuesr)rrrr'rrrrj/s zFrameSymbolVisitor.visit_WithcKs|j|jfi|dS)zStop visiting at block assigns.N)rr'r{rrrr]3sz$FrameSymbolVisitor.visit_AssignBlockcKsdS)zStop visiting at scopes.Nrr{rrrrr7szFrameSymbolVisitor.visit_ScopecKsdS)zStop visiting at blocks.Nrr{rrrro:szFrameSymbolVisitor.visit_BlockcKsdS)z!Do not visit into overlay scopes.Nrr{rrrr`=sz%FrameSymbolVisitor.visit_OverlayScope)F)'rFrGrH__doc__rrNameboolrIrMrzZNSRefr|ZIfrsZMacrorpZImportrZ FromImportrZAssignrrwrhrur_Z FilterBlockrqrxrjrtr]ZScoperrZBlockrorvr`rrrrr s*   r )N)N)typingrIrrrr:r<r7r8rrLrJrrrr!r rrrrs(     :