dbfdg 3 G\#@spddlmZddlmZdZdZdZdZddd Zdd d Z Gd d d e Z GdddeZ GdddeZ dS)) NodeVisitor) iteritemsparamZresolvealiasZ undefinedNcCs.t|d}t|}x|D]}|j|qW|S)N)parent)SymbolsFrameSymbolVisitorvisit)nodesparent_symbolssymvisitornoder /usr/lib/python3.6/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 )rrkwargsr rrrr'szSymbols.analyze_nodecCs.d|j|f}||j|<|dk r*||j|<|S)Nzl_%d_%s)rrr)rnameloadZidentrrr _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"rrrrcs z Symbols.loadc Csi}x<|D]4}x.|jD]$}||jkr&q|j|dd||<qWq Wx6|D].}|jj|j|jj|j|jj|jqHWxht|D]\\}}|t|krq|j|}|jdk r|jj|}|dk rt |f|j|<qt |f|j|<qWdS)Nrr) rgetrr+rrlenr#rr.r3) 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)rrrr1r-r)rr%rr"Zinstr_rrrdump_param_targetss  zSymbols.dump_param_targets)NN)N)__name__ __module__ __qualname__rrr r!r#r&r,r0r2rr7r8r: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_nodesr>r )rrrchildrrr _simple_visitszRootVisitor._simple_visitcKs x|jD]}|jj|qWdS)N)bodyr>r )rrrrArrrvisit_AssignBlocks zRootVisitor.visit_AssignBlockcKs&x |jddD]}|jj|qWdS)Ncall)exclude)rE)r@r>r )rrrrArrrvisit_CallBlockszRootVisitor.visit_CallBlockcKs x|jD]}|jj|qWdS)N)rCr>r )rrrrArrrvisit_OverlayScopes zRootVisitor.visit_OverlayScoperCcKs|dkr"|jj|jdd|j}nN|dkr2|j}n>|dkrh|jj|jdd|jdk rd|jj|jdStdx|pxfD]}|jj|qzWdS)NrCT)store_as_paramelsetestzUnknown for branch)r>r r"rCelse_rK RuntimeError)rrZ for_branchrr6itemrrr visit_Fors zRootVisitor.visit_ForcKs<x|jD]}|jj|qWx|jD]}|jj|q$WdS)N)Ztargetsr>r rC)rrrr"rArrr visit_Withs  zRootVisitor.visit_WithcOstd|jjdS)NzCannot find symbols for %r)NotImplementedErrorr)r;)rrargsrrrr generic_visitszRootVisitor.generic_visitN)rC)r;r<r=rrBZvisit_Template visit_Block visit_Macrovisit_FilterBlock visit_Scopevisit_IfZvisit_ScopedEvalContextModifierrDrGrHrOrPrSrrrrrs rc@seZdZdZddZd$ddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#S)%rzA visitor for `Frame.inspect`.cCs ||_dS)N)r?)rr?rrrrszFrameSymbolVisitor.__init__FcKsT|s|jdkr|jj|jn2|jdkr8|jj|jn|jdkrP|jj|jdS)z2All assignments to names go through this function.rr0rN)Zctxr?r2rr0r)rrrIrrrr visit_Names   zFrameSymbolVisitor.visit_NamecKs|jj|jdS)N)r?rr)rrrrrr visit_NSRefszFrameSymbolVisitor.visit_NSRefc s^j|jfjfdd}||j}||j}||jpDf}jj|||gdS)Ncs4j_}x|D]}j|fqW_|S)N)r,r?r )r r%Zsubnode)roriginal_symbolsrrr inner_visits  z0FrameSymbolVisitor.visit_If..inner_visit)r rKr?rCZelif_rLr7)rrrr\Z body_symbolsZ elif_symbolsZ else_symbolsr)rr[rrrXs  zFrameSymbolVisitor.visit_IfcKs|jj|jdS)N)r?r0r)rrrrrrrUszFrameSymbolVisitor.visit_MacrocKs |j|f||jj|jdS)N)rSr?r0r")rrrrrr visit_ImportszFrameSymbolVisitor.visit_ImportcKsJ|j|f|x6|jD],}t|tr6|jj|dq|jj|qWdS)Nr)rSnames isinstancetupler?r0)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)rrrrrrrOszFrameSymbolVisitor.visit_ForcKs|j|jf|dS)N)r rE)rrrrrrrG sz"FrameSymbolVisitor.visit_CallBlockcKs|j|jf|dS)N)r filter)rrrrrrrV sz$FrameSymbolVisitor.visit_FilterBlockcKsx|jD]}|j|qWdS)N)valuesr )rrrr"rrrrPs zFrameSymbolVisitor.visit_WithcKs|j|jf|dS)zStop visiting at block assigns.N)r r")rrrrrrrDsz$FrameSymbolVisitor.visit_AssignBlockcKsdS)zStop visiting at scopes.Nr)rrrrrrrWszFrameSymbolVisitor.visit_ScopecKsdS)zStop visiting at blocks.Nr)rrrrrrrTszFrameSymbolVisitor.visit_BlockcKsdS)z!Do not visit into overlay scopes.Nr)rrrrrrrHsz%FrameSymbolVisitor.visit_OverlayScopeN)F)r;r<r=__doc__rrYrZrXrUr]rarbrOrGrVrPrDrWrTrHrrrrrs" r)N)N)Zjinja2.visitorrZjinja2._compatrr1r3r.r/rrr'rrrrrrrs    ~4