o ^a)@sddlZddlmZddlmZdZdZdZdZ dd ej ej d ej d d d fd dZ ddej d ej d d d fddZGdd d ZGdddeZGdddeZdS)N)nodes) NodeVisitorparamresolvealias undefinedrparent_symbolsSymbolsreturncCs*t|d}t|}|D]}||q |SN)parent)r FrameSymbolVisitorvisit)rr symvisitornoder3/usr/lib/python3/dist-packages/jinja2/idtracking.py find_symbols s  rrcCst|d}|||Sr )r analyze_node)rr rrrrsymbols_for_nodes  rc @sDeZdZ d%dejddejeddfddZdejdej ddfd d Z d&d e d ejej e eje fde fd dZ de dejej fddZd e deje fddZd e de fddZd'ddZd e ddfddZd e de fddZd e ddfddZdejdddfdd Zdeje e ffd!d"Zdeje fd#d$ZdS)(r Nr levelr cCsD|dur|dur d}n|jd}||_||_i|_i|_t|_dS)Nrr)rr refsloadssetstores)selfr rrrr__init__s  zSymbols.__init__rkwargscKst|}|j|fi|dSN) RootVisitorr)rrrrrrrr.szSymbols.analyze_nodenameloadcCs2d|jd|}||j|<|dur||j|<|S)Nl__)rrr)rr"r#identrrr _define_ref2s   zSymbols._define_reftargetcC.||jvr |j|S|jdur|j|SdSr )rr find_load)rr(rrrr*;    zSymbols.find_loadcCr)r )rr find_refrr"rrrr,Dr+zSymbols.find_refcCs&||}|durtd|d|S)NzFTried to resolve a name to a reference that was unknown to the frame ())r,AssertionError)rr"rvrrrrefMs z Symbols.refcCsJttt|j}|j|j|j |_|j |_ |j |_ |Sr ) tcastr object__new__ __class____dict__updatercopyrr)rr0rrrr9Vs    z Symbols.copycCsd|j|||jvr0|jdur%|j|}|dur%|j|t|fddS|j|tdfddSdSN)r#)raddrr r,r'VAR_LOAD_ALIASVAR_LOAD_UNDEFINED)rr" outer_refrrrstore^s    z Symbols.storecCs|j||j|tdfdSr:)rr;r'VAR_LOAD_PARAMETERr-rrrdeclare_parameterps zSymbols.declare_parametercCs(||dur|j|t|fddSdSr:)r,r'VAR_LOAD_RESOLVEr-rrrr#tsz Symbols.loadbranch_symbolsc Csi}|D]}|jD]}||jvrq ||dd||<q q|D]}|j|j|j|j|j|jq|D]6\}}|t|krFq;||}|dusSJd|jdurj|j|}|durjt |f|j|<q;t |f|j|<q;dS)Nrrzshould not happen) rgetrr8ritemslenr,r r<rB) rrCrbranchr(rr" branch_count outer_targetrrr branch_updatexs.      zSymbols.branch_updatecCsHi}|}|dur"t|jD] }||vr||||<q |j}|dus|Sr )sortedrr,r )rr0rr"rrr dump_storesszSymbols.dump_storescCsNt}|}|dur%|jD]\}\}}|tkr||q|j}|dus |Sr )rrrEr@r;r )rr0rr(instrr%rrrdump_param_targetss zSymbols.dump_param_targets)NNr )r r )__name__ __module__ __qualname__r2OptionalintrrNodeAnyrstrTupler'r*r,r1r9r?rAr#SequencerJDictrLSetrNrrrrr s8      c @seZdZdddZdejdejddfd d ZeZ eZ eZ eZ eZ eZeZdejdejddfd d Zdejdejddfd dZdejdejddfddZ ddejdedejddfddZdejdejddfddZdejdejdejddfddZdS)r!symbolsr r NcCst||_dSr )r sym_visitorrr[rrrrszRootVisitor.__init__rrcKs|D]}|j|qdSr iter_child_nodesr\rrrrchildrrr _simple_visits zRootVisitor._simple_visitcK|jD]}|j|qdSr bodyr\rr`rrrvisit_AssignBlock zRootVisitor.visit_AssignBlockcKs"|jddD]}|j|qdS)N)call)excluder^r`rrrvisit_CallBlockszRootVisitor.visit_CallBlockcKrcr rdr`rrrvisit_OverlayScopergzRootVisitor.visit_OverlayScopere for_branchcKs|dkr|jj|jdd|j}n'|dkr|j}n|dkr4|jj|jdd|jdur2|j|jdStd|rE|D] }|j|q.inner_visitr) rror[r2IterablerrTreelif_rprJ)rrrr body_symbols elif_symbols else_symbolsrrrrs" zFrameSymbolVisitor.visit_IfcKrr )r[r?r"rrrrr}rzFrameSymbolVisitor.visit_MacrocKs$|j|fi||j|jdSr )ryr[r?r(rrrr visit_ImportszFrameSymbolVisitor.visit_ImportcKsJ|j|fi||jD]}t|tr|j|dq |j|q dS)Nr)rynames isinstancetupler[r?)rrrr"rrrvisit_FromImports   z#FrameSymbolVisitor.visit_FromImportcKs,|j|jfi||j|jfi|dS)z'Visit assignments in the correct order.N)rrr(rrrr visit_AssignszFrameSymbolVisitor.visit_AssigncK|j|jfi|dS)zqVisiting stops at for blocks. However the block sequence is visited as part of the outer scope. N)riterrrrrrs#szFrameSymbolVisitor.visit_ForcK|j|jfi|dSr )rrhrrrrrj)z"FrameSymbolVisitor.visit_CallBlockcKrr )rfilterrrrrr~,rz$FrameSymbolVisitor.visit_FilterBlockcKs|jD]}||qdSr )valuesr)rrrr(rrrru/s  zFrameSymbolVisitor.visit_WithcKr)zStop visiting at block assigns.N)rr(rrrrrf3sz$FrameSymbolVisitor.visit_AssignBlockcKdS)zStop visiting at scopes.Nrrrrrr7zFrameSymbolVisitor.visit_ScopecKr)zStop visiting at blocks.Nrrrrrr|:rzFrameSymbolVisitor.visit_BlockcKr)z!Do not visit into overlay scopes.Nrrrrrrk=rz%FrameSymbolVisitor.visit_OverlayScoperz)F)'rOrPrQ__doc__rrNameboolr2rUrNSRefrIfrMacror}Importr FromImportrAssignrrrsrrj FilterBlockr~rrurrfScoperBlockr|rrkrrrrrs6    rr )typingr2rrrr@rBr<r=rrTrRrrr r!rrrrrs6      :