
    -Sh!                         d Z ddlmZ ddlmZ ddlmZ ddlZddlZddlZ ej        dd          Z	 G d d	ej
                  Z G d
 de          Z G d de          Z G d de          Zd ZdS )z/Perform static analysis on python syntax trees.    )absolute_import)division)print_functionNExternalReferencenamenodename_refc                   ^     e Zd Z fdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z xZS )ScopeVisitorc                     t          t          |                                            d | _        t	          d           x| _        | _        d S N)superr   __init___parent	RootScope
root_scopescope)self	__class__s    V/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/pasta/base/scope.pyr   zScopeVisitor.__init__'   s>    	,&&(((DL#,T??2DOdjjj    c                     |d S | j         j        || j         _        | j                             || j                   | j        }|| _        t	          t
          |                               |           || _        d S r   )r   r	   
set_parentr   r   r   visit)r   r	   tmpr   s      r   r   zScopeVisitor.visit,   ss    |f#!doOtT\222
,CDL	,##D)))DLLLr   c                     |D ]u}t          ||d           }|t          |t                    r|D ]}|                     |           Ft          |t          j                  r|                     |           vd S r   )getattr
isinstancelistr   astAST)r   r	   attrsattrvalitems         r   visit_in_orderzScopeVisitor.visit_in_order7   s      D$%%c		C		  	 	D
**T



	c37## 

3 r   c           	         |j         D ]e}|j                            d          }|j        s| j                            |d         |          }| j                            |d         ||           |d         }|dd          D ]Q}|d|z   z  }|                    |          }|	                    |           | j                            |||           R| j                            |j        |          }t          dt          |                    D ]8}| j                            d                    |d |                   |           9| j                            |j        ||           g|                     |           d S )N.r   r
      )namesr   splitasnamer   define_namer   add_external_referencelookup_namedefinerangelenjoingeneric_visit)	r   r	   alias
name_partscur_namepartial_namepartr   is	            r   visit_ImportzScopeVisitor.visit_ImportB   s    Q Q:##C((j\ Q:))*Q-??..z!}e8@ 	/ 	B 	B 	B "!}qrrN 	D 	DD
#*
$,))$//(
//%
 
 
 
/
0
0u:B 1 D D D D		D z%%elE:: q#j//** 	8 	8A
/
0
0*RaR.1I1I168 8 8 8..uz54.PPPPtr   c                    |j         rs|j                             d          }t          dt          |          dz             D ]8}| j                            d                    |d |                   |           9|j        D ]l}| j        	                    |j
        p|j        |          }|j         r<| j                            d                    |j         |j        f          ||           m|                     |           d S )Nr)   r+   r*   )moduler-   r3   r4   r   r0   r5   r,   r   r/   r.   r   r6   )r   r	   r8   r<   r7   r   s         r   visit_ImportFromzScopeVisitor.visit_ImportFroma   s   { O;$$S))jQJ!+,, O O!..sxx
2A2/G/GNNNN G GZ##EL$>EJFFd	 G..HHdk5:.// 	/ 	G 	G 	G 	tr   c                    t          |j        t          j        t          j        f          r!| j                            |j        |           nt          |j        t          j                  rj| j        	                    |j                  
                    |           | j                            || j        	                    |j                             |                     |           d S r   )r   ctxr!   StoreParamr   r/   idLoadr1   add_referencer   set_name_for_noder6   r   r	   s     r   
visit_NamezScopeVisitor.visit_Namen   s    $(SY	233 O
jTWd++++	DHch	'	' O
jTW%%33D999
o''dj.D.DTW.M.MNNNtr   c                    |                      |d           t          | j                            |          t          j                  rn | j                            |j        |           	 | j        	                    |          | _        |                      |ddd           | j        j
        | _        d S # | j        j
        | _        w xY w)Ndecorator_listargsreturnsbody)r'   r   r   parentr!   ClassDefr   r/   r   create_scopeparent_scoperI   s     r   visit_FunctionDefzScopeVisitor.visit_FunctionDefv   s    .///$/((..== .

jTY---+:**400dj
$	6::::*djjj4:*dj****s   +7B5 5Cc                     |                      |dd           t          j        r5dD ]0}t          ||d           }|| j                            ||           1d S |                      |dd           d S )NdefaultsrM   )varargkwargrW   rX   )r'   sixPY2r   r   r/   )r   r	   arg_attr_namearg_names       r   visit_argumentszScopeVisitor.visit_arguments   s    j&111
w 	3 / 1 1-455
*
 
 4
0
0
01 1 $'22222r   c                 p    | j                             |j        |           |                     |           d S r   )r   r/   argr6   rI   s     r   	visit_argzScopeVisitor.visit_arg   s6    J48T***tr   c                 .   |                      |dd           | j                            |j        |           	 | j                            |          | _        |                      |d           | j        j        | _        d S # | j        j        | _        w xY w)NrL   basesrO   )r'   r   r/   r   rR   rS   rI   s     r   visit_ClassDefzScopeVisitor.visit_ClassDef   s    .888J49d++++:**400dj
$''':*djjj4:*dj****s   5B Bc                 
   |                      |           | j                            |j                  }|rL|                    |j                  }| j                            ||           |                    |           d S d S r   )r6   r   get_name_for_nodevaluer1   r$   rH   rG   )r   r	   node_value_name	node_names       r   visit_AttributezScopeVisitor.visit_Attribute   s    to77
CCO $!--di88i
o''i888d#####$ $r   )__name__
__module____qualname__r   r   r'   r=   r@   rJ   rT   r]   r`   rc   ri   __classcell__r   s   @r   r   r   %   s        3 3 3 3 3
	 	 	 	 		 	 	  >    + + +3 3 3  + + +$ $ $ $ $ $ $r   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )Scopec                 0    || _         i | _        || _        d S r   )rS   r,   r	   )r   rS   r	   s      r   r   zScope.__init__   s    $DDJDIIIr   c                     	 | j         |         }n)# t          $ r t          |          x}| j         |<   Y nw xY w|                    |           |S r   )r,   KeyErrorNamer2   )r   r   r	   name_objs       r   r/   zScope.define_name   sd    /D!hh / / /$(JJ.hD!!!/OODOs    #66c                     	 | j         |         S # t          $ r Y nw xY w| j        t          |          x}| j         |<   |S | j                            |          S r   )r,   rs   rS   rt   r1   r   r   ru   s      r   r1   zScope.lookup_name   sp    Z   
d $(JJ.hD!o((...s    
c                 4    | j                                         S r   )rS   get_root_scoper   s    r   ry   zScope.get_root_scope   s    ++---r   c                 P    |                                                      |          S r   )ry   lookup_scoperI   s     r   r|   zScope.lookup_scope   s"      --d333r   c                 v    t          | |          }|                                                     ||           |S r   )rp   ry   _set_scope_for_node)r   r	   subscopes      r   rR   zScope.create_scope   s8    T4  H--dH===Or   N)	rj   rk   rl   r   r/   r1   ry   r|   rR    r   r   rp   rp      sn          
  / / /. . .4 4 4    r   rp   c                   P     e Zd Z fdZddZd Zd Zd Zd Zd Z	d	 Z
d
 Z xZS )r   c                     t          t          |                               d |           i | _        i | _        i | _        i | _        d S r   )r   r   r   external_references_parents_nodes_to_names_node_scopes)r   r	   r   s     r   r   zRootScope.__init__   sH    	)T##D$///!DDMDDr   Nc                     t          |||          }|| j        v r"| j        |                             |           d S |g| j        |<   d S )Nr   )r   r   append)r   r   r	   r
   refs        r   r0   z RootScope.add_external_reference   s[    
D8
D
D
DCt'''
t$++C00000(+udt$$$r   c                     | S r   r   rz   s    r   ry   zRootScope.get_root_scope   s    Kr   c                 8    | j                             |d           S r   )r   getrI   s     r   rP   zRootScope.parent   s    =T4(((r   c                 6    || j         |<   || | j        |<   d S d S r   )r   r   )r   r	   rP   s      r   r   zRootScope.set_parent   s-     DM$~ $d ~r   c                 8    | j                             |d           S r   )r   r   rI   s     r   re   zRootScope.get_name_for_node   s    ##D$///r   c                     || j         |<   d S r   )r   )r   r	   r   s      r   rH   zRootScope.set_name_for_node   s    !%Dr   c                 t    |r5	 | j         |         S # t          $ r |                     |          }Y nw xY w|5d S r   )r   rs   rP   rI   s     r   r|   zRootScope.lookup_scope   s^    
 !! && ! ! !{{4  !  !
 4s    33c                     || j         |<   d S r   )r   )r   r	   
node_scopes      r   r~   zRootScope._set_scope_for_node   s    (Ddr   r   )rj   rk   rl   r   r0   ry   rP   r   re   rH   r|   r~   rm   rn   s   @r   r   r      s            - - - -  ) ) )% % %
0 0 0& & &  ) ) ) ) ) ) )r   r   c                   &    e Zd Zd Zd Zd Zd ZdS )rt   c                 >    || _         d | _        g | _        i | _        d S r   )rE   
definitionreadsr#   )r   rE   s     r   r   zName.__init__   s"    DGDODJDJJJr   c                 :    | j                             |           d S r   )r   r   rI   s     r   rG   zName.add_reference  s    Jdr   c                 Z    | j         r| j                            |           d S || _         d S r   )r   r   r   rI   s     r   r2   zName.define  s3     
jdooor   c                     	 | j         |         S # t          $ r8 t          d                    | j        |f                    x}| j         |<   |cY S w xY w)Nr)   )r#   rs   rt   r5   rE   rw   s      r   r1   zName.lookup_name
  sc    Z   $(47D/)B)B$C$CChD!ooos    ?AAN)rj   rk   rl   r   rG   r2   r1   r   r   r   rt   rt      sP                  r   rt   c                 V    t                      }|                    |            |j        S r   )r   r   r   )treevs     r   analyzer     s!    nn!''$---	
.r   )__doc__
__future__r   r   r   r!   collectionsrY   
namedtupler   NodeVisitorr   objectrp   r   rt   r   r   r   r   <module>r      sN   5 5 ' & & & & &       % % % % % % 



     



 +K*+>+GI I ~$ ~$ ~$ ~$ ~$3? ~$ ~$ ~$B" " " " "F " " "J*) *) *) *) *) *) *) *)\    6   2    r   