
    i                        d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZ ddlmZ  G d d	          Z G d
 d          Z G d de          ZdS )zGHelpers that store information about functions and the related classes.    )annotations)FuncItem)ClassIR)INVALID_FUNC_DEF)
BasicBlockValue)AssignmentTargetc            
      6   e Zd ZdZedddddddddf
d'dZd(dZed)d            Zed)d            Z	ed*d            Z
e
j        d+d            Z
ed,d            Zej        d-d             Zed.d"            Zej        d/d#            Zed0d%            Zd)d&ZdS )1FuncInfoz;Contains information about functions as they are generated. NFfitemr   namestr
class_name
str | None	namespace	is_nestedboolcontains_nestedis_decorated
in_non_extadd_nested_funcs_to_envis_comprehension_scopereturnNonec                    || _         || _        || _        || _        d | _        d | _        d | _        d | _        || _        || _	        || _
        || _        |	| _        |
| _        d S N)r   r   r   ns_callable_class
_env_class_generator_class_curr_env_regr   r   r   r   r   r   )selfr   r   r   r   r   r   r   r   r   r   s              T/root/projects/qq-shell/venv/lib64/python3.11/site-packages/mypyc/irbuild/context.py__init__zFuncInfo.__init__   s     
	$ 6: +/ 8< ,0 #.($'>$
 '=###    c                d    d                     d | j        | j        | j        fD                       S )N_c              3     K   | ]}||V  	d S r    ).0xs     r$   	<genexpr>z+FuncInfo.namespaced_name.<locals>.<genexpr>>   s'      NNaANNNNNNNr&   )joinr   r   r   r#   s    r$   namespaced_namezFuncInfo.namespaced_name=   s0    xxNNDIt#HNNNNNNr&   c                2    | j         j        p| j         j        S r   )r   is_generatoris_coroutiner/   s    r$   r2   zFuncInfo.is_generator@   s    z&A$**AAr&   c                    | j         j        S r   )r   r3   r/   s    r$   r3   zFuncInfo.is_coroutineD   s    z&&r&   ImplicitClassc                "    | j         J | j         S r   r   r/   s    r$   callable_classzFuncInfo.callable_classH       #///##r&   clsc                    || _         d S r   r7   r#   r:   s     r$   r8   zFuncInfo.callable_classM       "r&   r   c                "    | j         J | j         S r   r    r/   s    r$   	env_classzFuncInfo.env_classQ   s    ***r&   irc                    || _         d S r   r?   r#   rA   s     r$   r@   zFuncInfo.env_classV   s    r&   GeneratorClassc                "    | j         J | j         S r   r!   r/   s    r$   generator_classzFuncInfo.generator_classZ   s    $000$$r&   c                    || _         d S r   rF   r<   s     r$   rG   zFuncInfo.generator_class_   s     #r&   r   c                "    | j         J | j         S r   r"   r/   s    r$   curr_env_regzFuncInfo.curr_env_regc       !---!!r&   c                j    | j         r| j         j        j        sd}n| j        o| j         o| j         }|S )NF)r!   rA   is_final_classr2   r   r   )r#   results     r$   #can_merge_generator_and_env_classesz,FuncInfo.can_merge_generator_and_env_classesh   sJ       	[)>)A)P 	[FF&Zt~+=ZdFZBZFr&   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )r   r   )r   r5   )r:   r5   r   r   )r   r   rA   r   r   r   )r   rD   )r:   rD   r   r   r   r   )__name__
__module____qualname____doc__r   r%   r0   propertyr2   r3   r8   setterr@   rG   rK   rP   r*   r&   r$   r   r      s       EE +!% %" (-',*= *= *= *= *=\O O O O B B B XB ' ' ' X' $ $ $ X$ # # # #    X     % % % X% $ $ $ $ " " " X"     r&   r   c                      e Zd ZdZddZedd            Zej        dd
            Zedd            Zej        dd            Zedd            Z	e	j        dd            Z	dS )r5   a  Contains information regarding implicitly generated classes.

    Implicit classes are generated for nested functions and generator
    functions. They are not explicitly defined in the source code.

    NOTE: This is both a concrete class and used as a base class.
    rA   r   r   r   c                >    || _         d | _        d | _        d | _        d S r   )rA   	_self_regr"   _prev_env_regrC   s     r$   r%   zImplicitClass.__init__{   s(    '+
 ,0+/r&   r   c                "    | j         J | j         S r   r[   r/   s    r$   self_regzImplicitClass.self_reg   s    ~)))~r&   regc                    || _         d S r   r^   r#   r`   s     r$   r_   zImplicitClass.self_reg   s    r&   c                "    | j         J | j         S r   rJ   r/   s    r$   rK   zImplicitClass.curr_env_reg   rL   r&   c                    || _         d S r   rJ   rb   s     r$   rK   zImplicitClass.curr_env_reg        r&   c                "    | j         J | j         S r   r\   r/   s    r$   prev_env_regzImplicitClass.prev_env_reg   rL   r&   c                    || _         d S r   rg   rb   s     r$   rh   zImplicitClass.prev_env_reg   re   r&   NrQ   rR   r`   r   r   r   )
rS   rT   rU   rV   r%   rW   r_   rX   rK   rh   r*   r&   r$   r5   r5   r   s         
0 
0 
0 
0    X _   _ " " " X" ! ! ! ! " " " X" ! ! ! ! ! !r&   r5   c                       e Zd ZdZd fdZedd            Zej        dd
            Zedd            Zej        dd            Z xZ	S )rD   z?Contains information about implicit generator function classes.rA   r   r   r   c                    t                                          |           d | _        d | _        d | _        d | _        d | _        t                      | _        g | _	        d S r   )
superr%   _next_label_reg_next_label_targetexc_regssend_arg_regstop_iter_value_regr   switch_blockcontinuation_blocks)r#   rA   	__class__s     r$   r%   zGeneratorClass.__init__   sg     .2;? <@ +/
 26  'LL57   r&   r   c                "    | j         J | j         S r   rn   r/   s    r$   next_label_regzGeneratorClass.next_label_reg   r9   r&   r`   c                    || _         d S r   rw   rb   s     r$   rx   zGeneratorClass.next_label_reg   r=   r&   r	   c                "    | j         J | j         S r   ro   r/   s    r$   next_label_targetz GeneratorClass.next_label_target   s    &222&&r&   targetc                    || _         d S r   r{   )r#   r}   s     r$   r|   z GeneratorClass.next_label_target   s    "(r&   rQ   rR   rj   )r   r	   )r}   r	   r   r   )
rS   rT   rU   rV   r%   rW   rx   rX   r|   __classcell__)ru   s   @r$   rD   rD      s        II8 8 8 8 8 80 $ $ $ X$ # # # # ' ' ' X' ) ) ) ) ) ) ) )r&   rD   N)rV   
__future__r   
mypy.nodesr   mypyc.ir.class_irr   mypyc.ir.func_irr   mypyc.ir.opsr   r   mypyc.irbuild.targetsr	   r   r5   rD   r*   r&   r$   <module>r      s   M M " " " " " "       % % % % % % - - - - - - * * * * * * * * 2 2 2 2 2 2c c c c c c c cL.! .! .! .! .! .! .! .!b+) +) +) +) +)] +) +) +) +) +)r&   