
    i                    |   U d dl mZ d dlmZ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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7 ed         Z e8             e8            fZ9de:d<   dhdhfZ;de:d<    G d	 d
e'e                   Z<ddZ=dS )    )annotations)CFGMAYBE_ANALYSISAnalysisResult
GenAndKillrun_analysis),AssignAssignMulti
BasicBlockBoxBranchCallCallCCastComparisonOpDecRefExtendFloatComparisonOpFloatNegFloatOpGetAttr
GetElementGetElementPtrGotoIncRef
InitStaticIntOp	KeepAliveLoadAddressLoadErrorValue
LoadGlobalLoadLiteralLoadMem
LoadStatic
MethodCall	OpVisitorPrimitiveOpRaiseStandardErrorRegister
RegisterOpReturnSetAttr
SetElementSetMemTruncateTupleGetTupleSetUnborrowUnboxUnreachable)	RInstanceNr   CLEANDIRTYc                  b   e Zd Z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dhd Zdid"Zdjd$Zdkd&Zdld(Zdmd*Zdnd,Zdod.Zdpd0Zdqd2Zdrd4Zdsd6Zdtd8Zdud:Zdvd<Zdwd>Zdxd@Z dydBZ!dzdDZ"d{dFZ#d|dHZ$d}dJZ%d~dLZ&ddNZ'ddPZ(ddRZ)ddTZ*ddVZ+ddXZ,ddZZ-d[S )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r:   )selfr:   s     W/root/projects/qq-shell/venv/lib64/python3.11/site-packages/mypyc/analysis/selfleaks.py__init__zSelfLeakedVisitor.__init__I   s         opr   r   c                    t           S r>   r6   r@   rD   s     rA   
visit_gotozSelfLeakedVisitor.visit_gotoL       rC   r   c                    t           S r>   rF   rG   s     rA   visit_branchzSelfLeakedVisitor.visit_branchO   rI   rC   r+   c                    t           S r>   )r7   rG   s     rA   visit_returnzSelfLeakedVisitor.visit_returnR   s	     rC   r4   c                    t           S r>   rF   rG   s     rA   visit_unreachablez#SelfLeakedVisitor.visit_unreachableW   rI   rC   r	   c                V    |j         | j        u s|j        | j        u rt          S t          S r>   )srcr:   destr7   r6   rG   s     rA   visit_assignzSelfLeakedVisitor.visit_assignZ   s)    6T]""bg&>&>LrC   r
   c                    t           S r>   rF   rG   s     rA   visit_assign_multiz$SelfLeakedVisitor.visit_assign_multi_   rI   rC   r.   c                    t           S r>   rF   rG   s     rA   visit_set_memzSelfLeakedVisitor.visit_set_memb   rI   rC   r   c                    t           S r>   rF   rG   s     rA   visit_inc_refzSelfLeakedVisitor.visit_inc_refe   rI   rC   r   c                    t           S r>   rF   rG   s     rA   visit_dec_refzSelfLeakedVisitor.visit_dec_refh   rI   rC   r   c                    |j         }|j        r[|j        dk    rP|j         j        j        d         j        }t          |t                    s
J |            |j        }|j	        st          S |                     |          S )NrB   r   )fn
class_namenamesigargstype
isinstancer5   class_irinit_self_leakr6   check_register_op)r@   rD   r]   	self_typecls        rA   
visit_callzSelfLeakedVisitor.visit_callk   s|    U= 	RW
22	q).Ii33>>Y>>>#B$ %%b)))rC   r%   c                ,    |                      |          S r>   rf   rG   s     rA   visit_method_callz#SelfLeakedVisitor.visit_method_callu       %%b)))rC   r    c                    t           S r>   rF   rG   s     rA   visit_load_error_valuez(SelfLeakedVisitor.visit_load_error_valuex   rI   rC   r"   c                    t           S r>   rF   rG   s     rA   visit_load_literalz$SelfLeakedVisitor.visit_load_literal{   rI   rC   r   c                    |j         j        }|                    |j                  r|                     |          S t
          S r>   
class_typerd   
get_methodattrrf   r6   r@   rD   rh   s      rA   visit_get_attrz SelfLeakedVisitor.visit_get_attr~   ;    ]#==!! 	.))"---rC   r,   c                    |j         j        }|                    |j                  r|                     |          S t
          S r>   rs   rw   s      rA   visit_set_attrz SelfLeakedVisitor.visit_set_attr   ry   rC   r$   c                    t           S r>   rF   rG   s     rA   visit_load_staticz#SelfLeakedVisitor.visit_load_static   rI   rC   r   c                ,    |                      |          S r>   rk   rG   s     rA   visit_init_staticz#SelfLeakedVisitor.visit_init_static   rm   rC   r0   c                    t           S r>   rF   rG   s     rA   visit_tuple_getz!SelfLeakedVisitor.visit_tuple_get   rI   rC   r1   c                ,    |                      |          S r>   rk   rG   s     rA   visit_tuple_setz!SelfLeakedVisitor.visit_tuple_set   rm   rC   r   c                ,    |                      |          S r>   rk   rG   s     rA   	visit_boxzSelfLeakedVisitor.visit_box   rm   rC   r3   c                ,    |                      |          S r>   rk   rG   s     rA   visit_unboxzSelfLeakedVisitor.visit_unbox   rm   rC   r   c                ,    |                      |          S r>   rk   rG   s     rA   
visit_castzSelfLeakedVisitor.visit_cast   rm   rC   r(   c                    t           S r>   rF   rG   s     rA   visit_raise_standard_errorz,SelfLeakedVisitor.visit_raise_standard_error   rI   rC   r   c                ,    |                      |          S r>   rk   rG   s     rA   visit_call_czSelfLeakedVisitor.visit_call_c   rm   rC   r'   c                ,    |                      |          S r>   rk   rG   s     rA   visit_primitive_opz$SelfLeakedVisitor.visit_primitive_op   rm   rC   r/   c                    t           S r>   rF   rG   s     rA   visit_truncatez SelfLeakedVisitor.visit_truncate   rI   rC   r   c                    t           S r>   rF   rG   s     rA   visit_extendzSelfLeakedVisitor.visit_extend   rI   rC   r!   c                    t           S r>   rF   rG   s     rA   visit_load_globalz#SelfLeakedVisitor.visit_load_global   rI   rC   r   c                    t           S r>   rF   rG   s     rA   visit_int_opzSelfLeakedVisitor.visit_int_op   rI   rC   r   c                    t           S r>   rF   rG   s     rA   visit_comparison_opz%SelfLeakedVisitor.visit_comparison_op   rI   rC   r   c                    t           S r>   rF   rG   s     rA   visit_float_opz SelfLeakedVisitor.visit_float_op   rI   rC   r   c                    t           S r>   rF   rG   s     rA   visit_float_negz!SelfLeakedVisitor.visit_float_neg   rI   rC   r   c                    t           S r>   rF   rG   s     rA   visit_float_comparison_opz+SelfLeakedVisitor.visit_float_comparison_op   rI   rC   r#   c                    t           S r>   rF   rG   s     rA   visit_load_memz SelfLeakedVisitor.visit_load_mem   rI   rC   r   c                    t           S r>   rF   rG   s     rA   visit_get_elementz#SelfLeakedVisitor.visit_get_element   rI   rC   r   c                    t           S r>   rF   rG   s     rA   visit_get_element_ptrz'SelfLeakedVisitor.visit_get_element_ptr   rI   rC   r-   c                    t           S r>   rF   rG   s     rA   visit_set_elementz#SelfLeakedVisitor.visit_set_element   rI   rC   r   c                    t           S r>   rF   rG   s     rA   visit_load_addressz$SelfLeakedVisitor.visit_load_address   rI   rC   r   c                    t           S r>   rF   rG   s     rA   visit_keep_alivez"SelfLeakedVisitor.visit_keep_alive   rI   rC   r2   c                    t           S r>   rF   rG   s     rA   visit_unborrowz SelfLeakedVisitor.visit_unborrow   rI   rC   r*   c                z     t           fd|                                D                       rt          S t          S )Nc              3  *   K   | ]}|j         u V  d S r>   r?   ).0rQ   r@   s     rA   	<genexpr>z6SelfLeakedVisitor.check_register_op.<locals>.<genexpr>   s*      <<sdm#<<<<<<rC   )anysourcesr7   r6   rG   s   ` rA   rf   z#SelfLeakedVisitor.check_register_op   s:    <<<<rzz||<<<<< 	LrC   N)r:   r)   r;   r<   )rD   r   r;   r   )rD   r   r;   r   )rD   r+   r;   r   )rD   r4   r;   r   )rD   r	   r;   r   )rD   r
   r;   r   )rD   r.   r;   r   )rD   r   r;   r   )rD   r   r;   r   )rD   r   r;   r   )rD   r%   r;   r   )rD   r    r;   r   )rD   r"   r;   r   )rD   r   r;   r   )rD   r,   r;   r   )rD   r$   r;   r   )rD   r   r;   r   )rD   r0   r;   r   )rD   r1   r;   r   )rD   r   r;   r   )rD   r3   r;   r   )rD   r   r;   r   )rD   r(   r;   r   )rD   r   r;   r   )rD   r'   r;   r   )rD   r/   r;   r   )rD   r   r;   r   )rD   r!   r;   r   )rD   r   r;   r   )rD   r   r;   r   )rD   r   r;   r   )rD   r   r;   r   )rD   r   r;   r   )rD   r#   r;   r   )rD   r   r;   r   )rD   r   r;   r   )rD   r-   r;   r   )rD   r   r;   r   )rD   r   r;   r   )rD   r2   r;   r   )rD   r*   r;   r   ).__name__
__module____qualname____doc__rB   rH   rK   rM   rO   rS   rU   rW   rY   r[   ri   rl   ro   rq   rx   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   rf    rC   rA   r9   r9   @   sf        ! ! ! !         
      
            * * * ** * * *               * * * *   * * * ** * * ** * * ** * * *   * * * ** * * *                                                  rC   r9   blockslist[BasicBlock]r:   r)   cfgr   r;   AnalysisResult[None]c                h    t          | |t          |          t                      dt                    S )NF)r   r   gen_and_killinitialbackwardkind)r   r9   setr   )r   r:   r   s      rA   analyze_self_leaksr      s9     &x00   rC   )r   r   r:   r)   r   r   r;   r   )>
__future__r   mypyc.analysis.dataflowr   r   r   r   _DataflowGenAndKillr   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/   r0   r1   r2   r3   r4   mypyc.ir.rtypesr5   r   r6   __annotations__r7   r9   r   r   rC   rA   <module>r      s   " " " " " " "             - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\ & % % % % % &
SUUCCEEN " " " "VdV$ $ $ $ $Z Z Z Z Z	*- Z Z Zz
 
 
 
 
 
rC   