
    5 f                        d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZ  G d de          ZdS )    )annotations)Block	Decorator
ExpressionFuncDefFuncItemImport
LambdaExpr
MemberExprMypyFileNameExprNode
SymbolNodeVar)ExtendedTraverserVisitor)Errorsc                       e Zd ZdZd- fd
Zd.dZd/ fdZd0 fdZd1dZd2dZ	d3 fdZ
d4 fd Zd5d"Zd6d%Zd7d(Zd8d+Zd7d,Z xZS )9PreBuildVisitora  Mypy file AST visitor run before building the IR.

    This collects various things, including:

    * Determine relationships between nested functions and functions that
      contain nested functions
    * Find non-local variables (free variables)
    * Find property setters
    * Find decorators of functions
    * Find module import groups

    The main IR build pass uses this information.
    errorsr   current_filer   decorators_to_removedict[FuncDef, list[int]]returnNonec                   t                                                       i | _        i | _        g | _        t                      | _        i | _        i | _        i | _	        || _
        i | _        d | _        || _        || _        d S N)super__init__free_variablessymbols_to_funcsfuncssetprop_settersencapsulating_funcsnested_funcsfuncs_to_decoratorsr   module_import_groups_current_import_groupr   r   )selfr   r   r   	__class__s       S/var/www/equiseq/venv/lib/python3.11/site-packages/mypyc/irbuild/prebuildvisitor.pyr   zPreBuildVisitor.__init__%   s     	 @B =? &(
 +.%% DF  79 EG  ?S!
 AC!48"$&2    or   boolc                >    t          |t                    sd | _        dS )NT)
isinstancer	   r(   )r)   r-   s     r+   visitzPreBuildVisitor.visitU   s!    !V$$ 	.)-D&tr,   blockr   c                f    d | _         t                                          |           d | _         d S r   )r(   r   visit_block)r)   r2   r*   s     r+   r4   zPreBuildVisitor.visit_blockZ   s1    %)"E"""%)"""r,   decr   c                   |j         rt          |j         d         t                    r6|j         d         j        dk    r | j                            |j                   na|j                                         }|j        | j        v r+| j        |j                 }t          |          D ]}||= |sd S || j
        |j        <   t                                          |           d S )Nr   setter)
decoratorsr0   r   namer#   addfunccopyr   reversedr&   r   visit_decorator)r)   r5   decorators_to_store	to_removeir*   s        r+   r>   zPreBuildVisitor.visit_decorator_   s    > 	I #.+Z88 IS^A=N=SW_=_=_!%%ch////&)n&9&9&;&;#8t888 $ 9#( CI%i00 3 3/22 / 5H(2$$$$$r,   fdefr   c                Z    |                      |           |                     |           d S r   )
visit_funcvisit_symbol_node)r)   rB   s     r+   visit_func_defzPreBuildVisitor.visit_func_defz   s.    t$$$$$r,   exprr
   c                0    |                      |           d S r   )rD   r)   rG   s     r+   visit_lambda_exprz!PreBuildVisitor.visit_lambda_expr   s    r,   r;   r   c                Z   | j         rN| j                            | j         d         g                               |           | j         d         | j        |<   | j                             |           t                                          |           | j                                          d S N)r!   r$   
setdefaultappendr%   r   rD   pop)r)   r;   r*   s     r+   rD   zPreBuildVisitor.visit_func   s    
 : 	5 $//
2CCJJ4PPP '+jnDd#
$4   
r,   impr	   c                    | j         &| j        | j                                      |           n|g| j        |<   || _         t                                          |           d S r   )r(   r'   rO   r   visit_import)r)   rQ   r*   s     r+   rS   zPreBuildVisitor.visit_import   sc    %1%d&@AHHMMMM.1UD%c*),D&S!!!!!r,   r   c                    t          |j        t          t          f          r|                     |j                   d S d S r   )r0   noder   r   rE   rI   s     r+   visit_name_exprzPreBuildVisitor.visit_name_expr   s@    di#w00 	.""49-----	. 	.r,   varr   c                0    |                      |           d S r   )rE   )r)   rW   s     r+   	visit_varzPreBuildVisitor.visit_var   s    s#####r,   symbolr   c                   | j         sd S || j        v r| j        |         }|                     | j         d         |          r\| j         d         | j        |<   | j                            | j         d         t                                                    |           d S |                     || j         d                   r|                     |           d S d S | j         d         | j        |<   d S rL   )r!   r    	is_parentr   rN   r"   r:   add_free_variable)r)   rZ   	orig_funcs      r+   rE   z!PreBuildVisitor.visit_symbol_node   s    z 	 FT***-f5I~~djni88 /
 15
2%f-#..tz"~suuEEII&QQQQQ	4:b>:: / &&v.....	/ / -1JrND!&)))r,   fitemchildc                j    || j         vrdS | j         |         }||k    p|                     ||          S )NF)r%   r\   )r)   r_   r`   parents       r+   r\   zPreBuildVisitor.is_parent   sA     )))5"5)?$.."?"??r,   c                    | j         |         }| j                            |t                                                    |           d S r   )r    r   rN   r"   r:   )r)   rZ   r;   s      r+   r]   z!PreBuildVisitor.add_free_variable   sB     $V,&&tSUU3377?????r,   )r   r   r   r   r   r   r   r   )r-   r   r   r.   )r2   r   r   r   )r5   r   r   r   )rB   r   r   r   )rG   r
   r   r   )r;   r   r   r   )rQ   r	   r   r   )rG   r   r   r   )rW   r   r   r   )rZ   r   r   r   )r_   r   r`   r   r   r.   )__name__
__module____qualname____doc__r   r1   r4   r>   rF   rJ   rD   rS   rV   rY   rE   r\   r]   __classcell__)r*   s   @r+   r   r      sl        .3 .3 .3 .3 .3 .3`   
* * * * * *
% % % % % %6% % % %
        "" " " " " ". . . .$ $ $ $; ; ; ;:@ @ @ @@ @ @ @ @ @ @ @r,   r   N)
__future__r   
mypy.nodesr   r   r   r   r   r	   r
   r   r   r   r   r   r   mypy.traverserr   mypyc.errorsr   r    r,   r+   <module>rn      s   " " " " " "                              4 3 3 3 3 3      u@ u@ u@ u@ u@. u@ u@ u@ u@ u@r,   