관리-도구
편집 파일: idtracking.cpython-39.pyc
a �����`�#����������������������@���sp���d�dl�mZ�d�dlmZ�dZdZdZdZddd �Zdd d�Z G�dd ��d e �ZG�dd��de�ZG�dd��de�Z dS�)����)� iteritems)�NodeVisitor�param�resolve�aliasZ undefinedNc�����������������C���s*���t�|d�}t|�}|�D�]}|�|��q|S��N)�parent)�Symbols�FrameSymbolVisitor�visit)�nodes�parent_symbols�sym�visitor�node��r����5/usr/lib/python3.9/site-packages/jinja2/idtracking.py�find_symbols ���s ���� r���c�����������������C���s���t�|d�}|�|���|S�r���)r ����analyze_node)r���r ���r���r���r���r����symbols_for_node���s���� r���c�������������������@���sx���e�Zd�Zddd�Zdd��Zddd�Zdd ��Zd d��Zdd ��Zdd��Z dd��Z dd��Zdd��Zdd��Z dd��Zdd��ZdS�)r ���Nc�����������������C���sD���|d�u�r |d�u�rd}n |j�d�}||�_�||�_i�|�_i�|�_t��|�_d�S�)N�����r���)�levelr����refs�loads�set�stores)�selfr���r���r���r���r����__init__���s���� zSymbols.__init__c�����������������K���s���t�|��}|j|fi�|���d�S��N)�RootVisitorr���)r���r����kwargsr���r���r���r���r���%���s����zSymbols.analyze_nodec�����������������C���s.���d|�j�|f�}||�j|<�|d�ur*||�j|<�|S�)Nzl_%d_%s)r���r���r���)r����name�load�identr���r���r����_define_ref)���s ���� zSymbols._define_refc�����������������C���s.���||�j�v�r|�j�|�S�|�jd�ur*|�j�|�S�d�S�r���)r���r���� find_load)r����targetr���r���r���r%���0���s���� zSymbols.find_loadc�����������������C���s.���||�j�v�r|�j�|�S�|�jd�ur*|�j�|�S�d�S�r���)r���r����find_ref�r���r!���r���r���r���r'���6���s���� zSymbols.find_refc�����������������C���s"���|���|�}|d�u�rtd|���|S�)NzITried to resolve a name to a reference that was unknown to the frame (%r))r'����AssertionError)r���r!����rvr���r���r����ref<���s���� ��zSymbols.refc�����������������C���sB���t��|�j�}|j�|�j��|�j���|_|�j���|_|�j���|_|S�r���) �object�__new__� __class__�__dict__�updater����copyr���r���)r���r*���r���r���r���r1���E���s����zSymbols.copyc�����������������C���s`���|�j��|��||�jvr\|�jd�urJ|�j�|�}|d�urJ|�j|t|fd��d�S�|�j|td�fd��d�S��N)r"���)r����addr���r���r'���r$����VAR_LOAD_ALIAS�VAR_LOAD_UNDEFINED)r���r!���Z outer_refr���r���r����storeM���s���� z Symbols.storec�����������������C���s���|�j��|��|�j|td�fd�S�r2���)r���r3���r$����VAR_LOAD_PARAMETERr(���r���r���r����declare_parameter_���s����zSymbols.declare_parameterc�����������������C���s(���|���|�}|d�u�r$|�j|t|fd��d�S�r2���)r'���r$����VAR_LOAD_RESOLVE)r���r!���r&���r���r���r���r"���c���s���� zSymbols.loadc����������� ������C���s����i�}|D�]0}|j�D�]$}||�j�v�r"q|�|d�d�||<�qq|D�].}|�j�|j��|�j�|j��|�j��|j���q>t|�D�]l\}}|t|�kr�qv|��|�}|d�us�J�d��|�jd�ur�|�j�|�}|d�ur�t |f|�j|<�qvt |f|�j|<�qvd�S�)Nr���r���zshould not happen)r����getr���r0���r���r����lenr'���r���r4���r9���) r���Zbranch_symbolsr����branchr&���r���r!���Zbranch_countZouter_targetr���r���r���� branch_updateh���s*���� zSymbols.branch_updatec�����������������C���s>���i�}|�}|d�ur:|j�D�]}||vr|��|�||<�q|j}q|S�r���)r���r'���r���)r���r*���r���r!���r���r���r����dump_stores����s���� zSymbols.dump_storesc�����������������C���sH���t���}|�}|d�urDt|�j�D�]\}\}}|tkr|�|��q|j}q |S�r���)r���r���r���r7���r3���r���)r���r*���r���r&���Zinstr�_r���r���r����dump_param_targets����s����zSymbols.dump_param_targets)NN)N)�__name__� __module__�__qualname__r���r���r$���r%���r'���r+���r1���r6���r8���r"���r=���r>���r@���r���r���r���r���r ������s��� r ���c�������������������@���sj���e�Zd�Zdd��Zdd��Ze�Z�Z�Z�Z�Z �Z Zdd��Zdd��Z d d ��Zddd �Zdd��Zdd��ZdS�)r���c�����������������C���s���t�|�|�_d�S�r���)r ����sym_visitor�r����symbolsr���r���r���r�������s����zRootVisitor.__init__c�����������������K���s���|����D�]}|�j�|��qd�S�r����Ziter_child_nodesrD���r����r���r���r ����childr���r���r���� _simple_visit����s����zRootVisitor._simple_visitc�����������������K���s���|j�D�]}|�j�|��qd�S�r�����bodyrD���r���rH���r���r���r����visit_AssignBlock����s���� zRootVisitor.visit_AssignBlockc�����������������K���s"���|j�dd�D�]}|�j�|��qd�S�)N)�call)ZexcluderG���rH���r���r���r����visit_CallBlock����s����zRootVisitor.visit_CallBlockc�����������������K���s���|j�D�]}|�j�|��qd�S�r���rK���rH���r���r���r����visit_OverlayScope����s���� zRootVisitor.visit_OverlayScoperL���c�����������������K���s����|dkr"|�j�j|jdd��|j}nN|dkr2|j}n>|dkrh|�j�j|jdd��|jd�urd|�j��|j��d�S�td��|pvdD�]}|�j��|��qxd�S�)NrL���T)�store_as_param�else�testzUnknown for branchr���)rD���r���r&���rL����else_rS����RuntimeError)r���r���Z for_branchr ���r<����itemr���r���r���� visit_For����s���� zRootVisitor.visit_Forc�����������������K���s4���|j�D�]}|�j�|��q|jD�]}|�j�|��qd�S�r���)�targetsrD���r���rL���)r���r���r ���r&���rI���r���r���r���� visit_With����s���� zRootVisitor.visit_Withc�����������������O���s���t�d|jj���d�S�)NzCannot find symbols for %r)�NotImplementedErrorr.���rA���)r���r����argsr ���r���r���r���� generic_visit����s���� �zRootVisitor.generic_visitN)rL���)rA���rB���rC���r���rJ���Zvisit_Template�visit_Block�visit_Macro�visit_FilterBlock�visit_Scope�visit_IfZvisit_ScopedEvalContextModifierrM���rO���rP���rW���rY���r\���r���r���r���r���r�������s&��� ����� r���c�������������������@���s����e�Zd�ZdZdd��Zd$dd�Zdd��Zd d ��Zdd��Zd d��Z dd��Z dd��Zdd��Zdd��Z dd��Zdd��Zdd��Zdd��Zdd ��Zd!d"��Zd#S�)%r ���zA visitor for `Frame.inspect`.c�����������������C���s ���||�_�d�S�r���)rF���rE���r���r���r���r�������s����zFrameSymbolVisitor.__init__Fc�����������������K���sT���|s|j�dkr|�j�|j��n2|j�dkr8|�j�|j��n|j�dkrP|�j�|j��dS�)z2All assignments to names go through this function.r���r6���r"���N)�ctxrF���r8���r!���r6���r"���)r���r���rQ���r ���r���r���r���� visit_Name����s���� zFrameSymbolVisitor.visit_Namec�����������������K���s���|�j��|j��d�S�r���)rF���r"���r!����r���r���r ���r���r���r����visit_NSRef����s����zFrameSymbolVisitor.visit_NSRefc��������������������sb����j�|jfi�������j�����fdd�}||j�}||j�}||jpHd�}�j�|||g��d�S�)Nc��������������������s4����������_}|�D�]}�j|fi������q��_|S�r���)r1���rF���r���)r���r*���Zsubnode�r ���Zoriginal_symbolsr���r���r����inner_visit����s ����z0FrameSymbolVisitor.visit_If.<locals>.inner_visitr���)r���rS���rF���rL���Zelif_rT���r=���)r���r���r ���rg���Zbody_symbolsZelif_symbolsZelse_symbolsr���rf���r���ra�������s���� zFrameSymbolVisitor.visit_Ifc�����������������K���s���|�j��|j��d�S�r���)rF���r6���r!���rd���r���r���r���r^�������s����zFrameSymbolVisitor.visit_Macroc�����������������K���s$���|�j�|fi�|���|�j�|j��d�S�r���)r\���rF���r6���r&���rd���r���r���r����visit_Import����s����zFrameSymbolVisitor.visit_Importc�����������������K���sJ���|�j�|fi�|���|jD�],}t|t�r8|�j�|d���q|�j�|��qd�S�)Nr���)r\����names� isinstance�tuplerF���r6���)r���r���r ���r!���r���r���r����visit_FromImport����s ���� z#FrameSymbolVisitor.visit_FromImportc�����������������K���s,���|�j�|jfi�|���|�j�|jfi�|���dS�)z'Visit assignments in the correct order.N)r���r���r&���rd���r���r���r����visit_Assign��s����zFrameSymbolVisitor.visit_Assignc�����������������K���s���|�j�|jfi�|���dS�)zqVisiting stops at for blocks. However the block sequence is visited as part of the outer scope. N)r����iterrd���r���r���r���rW�����s����zFrameSymbolVisitor.visit_Forc�����������������K���s���|�j�|jfi�|���d�S�r���)r���rN���rd���r���r���r���rO��� ��s����z"FrameSymbolVisitor.visit_CallBlockc�����������������K���s���|�j�|jfi�|���d�S�r���)r����filterrd���r���r���r���r_�����s����z$FrameSymbolVisitor.visit_FilterBlockc�����������������K���s���|j�D�]}|��|��qd�S�r���)�valuesr���)r���r���r ���r&���r���r���r���rY�����s���� zFrameSymbolVisitor.visit_Withc�����������������K���s���|�j�|jfi�|���dS�)zStop visiting at block assigns.N)r���r&���rd���r���r���r���rM�����s����z$FrameSymbolVisitor.visit_AssignBlockc�����������������K���s���dS�)zStop visiting at scopes.Nr���rd���r���r���r���r`�����s����zFrameSymbolVisitor.visit_Scopec�����������������K���s���dS�)zStop visiting at blocks.Nr���rd���r���r���r���r]�����s����zFrameSymbolVisitor.visit_Blockc�����������������K���s���dS�)z!Do not visit into overlay scopes.Nr���rd���r���r���r���rP���!��s����z%FrameSymbolVisitor.visit_OverlayScopeN)F)rA���rB���rC����__doc__r���rc���re���ra���r^���rh���rl���rm���rW���rO���r_���rY���rM���r`���r]���rP���r���r���r���r���r �������s"��� r ���)N)N)Z_compatr���r���r���r7���r9���r4���r5���r���r���r,���r ���r���r ���r���r���r���r����<module>���s��� 8