
    X-Ph\                       U d dl mZ d dlmZmZmZ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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!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.m/Z/ d dl0m1Z1 e2e3d         e3d         f         Z4 e3             e3            fZ5de6d<   dhdhfZ7de6d<    G d	 d
e"e4                   Z8ddZ9dS )    )annotations)CFGMAYBE_ANALYSISAnalysisResultrun_analysis)(AssignAssignMulti
BasicBlockBoxBranchCallCallCCastComparisonOpExtendFloatComparisonOpFloatNegFloatOpGetAttrGetElementPtrGoto
InitStaticIntOp	KeepAliveLoadAddressLoadErrorValue
LoadGlobalLoadLiteralLoadMem
LoadStatic
MethodCall	OpVisitorPrimitiveOpRaiseStandardErrorRegister
RegisterOpReturnSetAttrSetMemTruncateTupleGetTupleSetUnborrowUnboxUnreachable)	RInstanceN
GenAndKillCLEANDIRTYc                  B   e Zd ZdZdTdZdUd
ZdVdZdWdZdXdZdYdZ	dZdZ
d[dZd\dZd]dZd^dZd_dZd`d Zdad"Zdbd$Zdcd&Zddd(Zded*Zdfd,Zdgd.Zdhd0Zdid2Zdjd4Zdkd6Zdld8Zdmd:Zdnd<Zdod>Zdpd@Z dqdBZ!drdDZ"dsdFZ#dtdHZ$dudJZ%dvdLZ&dwdNZ'dxdPZ(dydRZ)dSS )zSelfLeakedVisitora  Analyze whether 'self' may be seen by arbitrary code in '__init__'.

    More formally, the set is not empty if along some path from IR entry point
    arbitrary code could have been executed that has access to 'self'.

    (We don't consider access via 'gc.get_objects()'.)
    self_regr%   returnNonec                    || _         d S Nr6   )selfr6   s     X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypyc/analysis/selfleaks.py__init__zSelfLeakedVisitor.__init__?   s         opr   r1   c                    t           S r:   r2   r<   r@   s     r=   
visit_gotozSelfLeakedVisitor.visit_gotoB       r?   r   c                    t           S r:   rB   rC   s     r=   visit_branchzSelfLeakedVisitor.visit_branchE   rE   r?   r'   c                    t           S r:   )r3   rC   s     r=   visit_returnzSelfLeakedVisitor.visit_returnH   s	     r?   r/   c                    t           S r:   rB   rC   s     r=   visit_unreachablez#SelfLeakedVisitor.visit_unreachableM   rE   r?   r   c                V    |j         | j        u s|j        | j        u rt          S t          S r:   )srcr6   destr3   r2   rC   s     r=   visit_assignzSelfLeakedVisitor.visit_assignP   s)    6T]""bg&>&>Lr?   r	   c                    t           S r:   rB   rC   s     r=   visit_assign_multiz$SelfLeakedVisitor.visit_assign_multiU   rE   r?   r)   c                    t           S r:   rB   rC   s     r=   visit_set_memzSelfLeakedVisitor.visit_set_memX   rE   r?   r   c                    |j         }|j        rS|j        dk    rH|j         j        j        d         j        }t          |t                    sJ |j        }|j	        st          S |                     |          S )Nr>   r   )fn
class_namenamesigargstype
isinstancer0   class_irinit_self_leakr2   check_register_op)r<   r@   rU   	self_typecls        r=   
visit_callzSelfLeakedVisitor.visit_call[   st    U= 	RW
22	q).Ii33333#B$ %%b)))r?   r!   c                ,    |                      |          S r:   r^   rC   s     r=   visit_method_callz#SelfLeakedVisitor.visit_method_calle       %%b)))r?   r   c                    t           S r:   rB   rC   s     r=   visit_load_error_valuez(SelfLeakedVisitor.visit_load_error_valueh   rE   r?   r   c                    t           S r:   rB   rC   s     r=   visit_load_literalz$SelfLeakedVisitor.visit_load_literalk   rE   r?   r   c                    |j         j        }|                    |j                  r|                     |          S t
          S r:   
class_typer\   
get_methodattrr^   r2   r<   r@   r`   s      r=   visit_get_attrz SelfLeakedVisitor.visit_get_attrn   ;    ]#==!! 	.))"---r?   r(   c                    |j         j        }|                    |j                  r|                     |          S t
          S r:   rk   ro   s      r=   visit_set_attrz SelfLeakedVisitor.visit_set_attru   rq   r?   r    c                    t           S r:   rB   rC   s     r=   visit_load_staticz#SelfLeakedVisitor.visit_load_static|   rE   r?   r   c                ,    |                      |          S r:   rc   rC   s     r=   visit_init_staticz#SelfLeakedVisitor.visit_init_static   re   r?   r+   c                    t           S r:   rB   rC   s     r=   visit_tuple_getz!SelfLeakedVisitor.visit_tuple_get   rE   r?   r,   c                ,    |                      |          S r:   rc   rC   s     r=   visit_tuple_setz!SelfLeakedVisitor.visit_tuple_set   re   r?   r   c                ,    |                      |          S r:   rc   rC   s     r=   	visit_boxzSelfLeakedVisitor.visit_box   re   r?   r.   c                ,    |                      |          S r:   rc   rC   s     r=   visit_unboxzSelfLeakedVisitor.visit_unbox   re   r?   r   c                ,    |                      |          S r:   rc   rC   s     r=   
visit_castzSelfLeakedVisitor.visit_cast   re   r?   r$   c                    t           S r:   rB   rC   s     r=   visit_raise_standard_errorz,SelfLeakedVisitor.visit_raise_standard_error   rE   r?   r   c                ,    |                      |          S r:   rc   rC   s     r=   visit_call_czSelfLeakedVisitor.visit_call_c   re   r?   r#   c                ,    |                      |          S r:   rc   rC   s     r=   visit_primitive_opz$SelfLeakedVisitor.visit_primitive_op   re   r?   r*   c                    t           S r:   rB   rC   s     r=   visit_truncatez SelfLeakedVisitor.visit_truncate   rE   r?   r   c                    t           S r:   rB   rC   s     r=   visit_extendzSelfLeakedVisitor.visit_extend   rE   r?   r   c                    t           S r:   rB   rC   s     r=   visit_load_globalz#SelfLeakedVisitor.visit_load_global   rE   r?   r   c                    t           S r:   rB   rC   s     r=   visit_int_opzSelfLeakedVisitor.visit_int_op   rE   r?   r   c                    t           S r:   rB   rC   s     r=   visit_comparison_opz%SelfLeakedVisitor.visit_comparison_op   rE   r?   r   c                    t           S r:   rB   rC   s     r=   visit_float_opz SelfLeakedVisitor.visit_float_op   rE   r?   r   c                    t           S r:   rB   rC   s     r=   visit_float_negz!SelfLeakedVisitor.visit_float_neg   rE   r?   r   c                    t           S r:   rB   rC   s     r=   visit_float_comparison_opz+SelfLeakedVisitor.visit_float_comparison_op   rE   r?   r   c                    t           S r:   rB   rC   s     r=   visit_load_memz SelfLeakedVisitor.visit_load_mem   rE   r?   r   c                    t           S r:   rB   rC   s     r=   visit_get_element_ptrz'SelfLeakedVisitor.visit_get_element_ptr   rE   r?   r   c                    t           S r:   rB   rC   s     r=   visit_load_addressz$SelfLeakedVisitor.visit_load_address   rE   r?   r   c                    t           S r:   rB   rC   s     r=   visit_keep_alivez"SelfLeakedVisitor.visit_keep_alive   rE   r?   r-   c                    t           S r:   rB   rC   s     r=   visit_unborrowz SelfLeakedVisitor.visit_unborrow   rE   r?   r&   c                z     t           fd|                                D                       rt          S t          S )Nc              3  *   K   | ]}|j         u V  d S r:   r;   ).0rM   r<   s     r=   	<genexpr>z6SelfLeakedVisitor.check_register_op.<locals>.<genexpr>   s*      <<sdm#<<<<<<r?   )anysourcesr3   r2   rC   s   ` r=   r^   z#SelfLeakedVisitor.check_register_op   s:    <<<<rzz||<<<<< 	Lr?   N)r6   r%   r7   r8   )r@   r   r7   r1   )r@   r   r7   r1   )r@   r'   r7   r1   )r@   r/   r7   r1   )r@   r   r7   r1   )r@   r	   r7   r1   )r@   r)   r7   r1   )r@   r   r7   r1   )r@   r!   r7   r1   )r@   r   r7   r1   )r@   r   r7   r1   )r@   r   r7   r1   )r@   r(   r7   r1   )r@   r    r7   r1   )r@   r   r7   r1   )r@   r+   r7   r1   )r@   r,   r7   r1   )r@   r   r7   r1   )r@   r.   r7   r1   )r@   r   r7   r1   )r@   r$   r7   r1   )r@   r   r7   r1   )r@   r#   r7   r1   )r@   r*   r7   r1   )r@   r   r7   r1   )r@   r   r7   r1   )r@   r   r7   r1   )r@   r   r7   r1   )r@   r   r7   r1   )r@   r   r7   r1   )r@   r   r7   r1   )r@   r   r7   r1   )r@   r   r7   r1   )r@   r   r7   r1   )r@   r   r7   r1   )r@   r-   r7   r1   )r@   r&   r7   r1   )*__name__
__module____qualname____doc__r>   rD   rG   rI   rK   rO   rQ   rS   ra   rd   rg   ri   rp   rs   ru   rw   ry   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r^    r?   r=   r5   r5   6   s        ! ! ! !         
      
      * * * ** * * *               * * * *   * * * ** * * ** * * ** * * *   * * * ** * * *                                            r?   r5   blockslist[BasicBlock]r6   r%   cfgr   r7   AnalysisResult[None]c                h    t          | |t          |          t                      dt                    S )NF)r   r   gen_and_killinitialbackwardkind)r   r5   setr   )r   r6   r   s      r=   analyze_self_leaksr      s9     &x00   r?   )r   r   r6   r%   r   r   r7   r   ):
__future__r   mypyc.analysis.dataflowr   r   r   r   mypyc.ir.opsr   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$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   mypyc.ir.rtypesr0   tupler   r1   r2   __annotations__r3   r5   r   r   r?   r=   <module>r      s   " " " " " " " U U U U U U U U U U U U) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )T & % % % % %3t9c$i'(
SUUCCEEN " " " "VdV$ $ $ $ $N N N N N	*- N N Nb
 
 
 
 
 
r?   