
    hi                       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/m0Z0 d dl1m2Z2 e3e4d         e4d         f         Z5 e4             e4            fZ6de7d<   dhdhfZ8de7d<    G d	 d
e"e5                   Z9ddZ:d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
SetElementSetMemTruncateTupleGetTupleSetUnborrowUnboxUnreachable)	RInstanceN
GenAndKillCLEANDIRTYc                  J   e Zd Zd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dhd,Zdid.Zdjd0Zdkd2Zdld4Zdmd6Zdnd8Zdod:Zdpd<Zdqd>Zdrd@Z dsdBZ!dtdDZ"dudFZ#dvdHZ$dwdJZ%dxdLZ&dydNZ'dzdPZ(d{dRZ)d|dTZ*dUS )}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r7   )selfr7   s     h/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/mypyc/analysis/selfleaks.py__init__zSelfLeakedVisitor.__init__@   s         opr   r2   c                    t           S r;   r3   r=   rA   s     r>   
visit_gotozSelfLeakedVisitor.visit_gotoC       r@   r   c                    t           S r;   rC   rD   s     r>   visit_branchzSelfLeakedVisitor.visit_branchF   rF   r@   r'   c                    t           S r;   )r4   rD   s     r>   visit_returnzSelfLeakedVisitor.visit_returnI   s	     r@   r0   c                    t           S r;   rC   rD   s     r>   visit_unreachablez#SelfLeakedVisitor.visit_unreachableN   rF   r@   r   c                V    |j         | j        u s|j        | j        u rt          S t          S r;   )srcr7   destr4   r3   rD   s     r>   visit_assignzSelfLeakedVisitor.visit_assignQ   s)    6T]""bg&>&>Lr@   r	   c                    t           S r;   rC   rD   s     r>   visit_assign_multiz$SelfLeakedVisitor.visit_assign_multiV   rF   r@   r*   c                    t           S r;   rC   rD   s     r>   visit_set_memzSelfLeakedVisitor.visit_set_memY   rF   r@   r   c                    |j         }|j        r[|j        dk    rP|j         j        j        d         j        }t          |t                    s
J |            |j        }|j	        st          S |                     |          S )Nr?   r   )fn
class_namenamesigargstype
isinstancer1   class_irinit_self_leakr3   check_register_op)r=   rA   rV   	self_typecls        r>   
visit_callzSelfLeakedVisitor.visit_call\   s|    U= 	RW
22	q).Ii33>>Y>>>#B$ %%b)))r@   r!   c                ,    |                      |          S r;   r_   rD   s     r>   visit_method_callz#SelfLeakedVisitor.visit_method_callf       %%b)))r@   r   c                    t           S r;   rC   rD   s     r>   visit_load_error_valuez(SelfLeakedVisitor.visit_load_error_valuei   rF   r@   r   c                    t           S r;   rC   rD   s     r>   visit_load_literalz$SelfLeakedVisitor.visit_load_literall   rF   r@   r   c                    |j         j        }|                    |j                  r|                     |          S t
          S r;   
class_typer]   
get_methodattrr_   r3   r=   rA   ra   s      r>   visit_get_attrz SelfLeakedVisitor.visit_get_attro   ;    ]#==!! 	.))"---r@   r(   c                    |j         j        }|                    |j                  r|                     |          S t
          S r;   rl   rp   s      r>   visit_set_attrz SelfLeakedVisitor.visit_set_attrv   rr   r@   r    c                    t           S r;   rC   rD   s     r>   visit_load_staticz#SelfLeakedVisitor.visit_load_static}   rF   r@   r   c                ,    |                      |          S r;   rd   rD   s     r>   visit_init_staticz#SelfLeakedVisitor.visit_init_static   rf   r@   r,   c                    t           S r;   rC   rD   s     r>   visit_tuple_getz!SelfLeakedVisitor.visit_tuple_get   rF   r@   r-   c                ,    |                      |          S r;   rd   rD   s     r>   visit_tuple_setz!SelfLeakedVisitor.visit_tuple_set   rf   r@   r   c                ,    |                      |          S r;   rd   rD   s     r>   	visit_boxzSelfLeakedVisitor.visit_box   rf   r@   r/   c                ,    |                      |          S r;   rd   rD   s     r>   visit_unboxzSelfLeakedVisitor.visit_unbox   rf   r@   r   c                ,    |                      |          S r;   rd   rD   s     r>   
visit_castzSelfLeakedVisitor.visit_cast   rf   r@   r$   c                    t           S r;   rC   rD   s     r>   visit_raise_standard_errorz,SelfLeakedVisitor.visit_raise_standard_error   rF   r@   r   c                ,    |                      |          S r;   rd   rD   s     r>   visit_call_czSelfLeakedVisitor.visit_call_c   rf   r@   r#   c                ,    |                      |          S r;   rd   rD   s     r>   visit_primitive_opz$SelfLeakedVisitor.visit_primitive_op   rf   r@   r+   c                    t           S r;   rC   rD   s     r>   visit_truncatez SelfLeakedVisitor.visit_truncate   rF   r@   r   c                    t           S r;   rC   rD   s     r>   visit_extendzSelfLeakedVisitor.visit_extend   rF   r@   r   c                    t           S r;   rC   rD   s     r>   visit_load_globalz#SelfLeakedVisitor.visit_load_global   rF   r@   r   c                    t           S r;   rC   rD   s     r>   visit_int_opzSelfLeakedVisitor.visit_int_op   rF   r@   r   c                    t           S r;   rC   rD   s     r>   visit_comparison_opz%SelfLeakedVisitor.visit_comparison_op   rF   r@   r   c                    t           S r;   rC   rD   s     r>   visit_float_opz SelfLeakedVisitor.visit_float_op   rF   r@   r   c                    t           S r;   rC   rD   s     r>   visit_float_negz!SelfLeakedVisitor.visit_float_neg   rF   r@   r   c                    t           S r;   rC   rD   s     r>   visit_float_comparison_opz+SelfLeakedVisitor.visit_float_comparison_op   rF   r@   r   c                    t           S r;   rC   rD   s     r>   visit_load_memz SelfLeakedVisitor.visit_load_mem   rF   r@   r   c                    t           S r;   rC   rD   s     r>   visit_get_element_ptrz'SelfLeakedVisitor.visit_get_element_ptr   rF   r@   r)   c                    t           S r;   rC   rD   s     r>   visit_set_elementz#SelfLeakedVisitor.visit_set_element   rF   r@   r   c                    t           S r;   rC   rD   s     r>   visit_load_addressz$SelfLeakedVisitor.visit_load_address   rF   r@   r   c                    t           S r;   rC   rD   s     r>   visit_keep_alivez"SelfLeakedVisitor.visit_keep_alive   rF   r@   r.   c                    t           S r;   rC   rD   s     r>   visit_unborrowz SelfLeakedVisitor.visit_unborrow   rF   r@   r&   c                z     t           fd|                                D                       rt          S t          S )Nc              3  *   K   | ]}|j         u V  d S r;   r<   ).0rN   r=   s     r>   	<genexpr>z6SelfLeakedVisitor.check_register_op.<locals>.<genexpr>   s*      <<sdm#<<<<<<r@   )anysourcesr4   r3   rD   s   ` r>   r_   z#SelfLeakedVisitor.check_register_op   s:    <<<<rzz||<<<<< 	Lr@   N)r7   r%   r8   r9   )rA   r   r8   r2   )rA   r   r8   r2   )rA   r'   r8   r2   )rA   r0   r8   r2   )rA   r   r8   r2   )rA   r	   r8   r2   )rA   r*   r8   r2   )rA   r   r8   r2   )rA   r!   r8   r2   )rA   r   r8   r2   )rA   r   r8   r2   )rA   r   r8   r2   )rA   r(   r8   r2   )rA   r    r8   r2   )rA   r   r8   r2   )rA   r,   r8   r2   )rA   r-   r8   r2   )rA   r   r8   r2   )rA   r/   r8   r2   )rA   r   r8   r2   )rA   r$   r8   r2   )rA   r   r8   r2   )rA   r#   r8   r2   )rA   r+   r8   r2   )rA   r   r8   r2   )rA   r   r8   r2   )rA   r   r8   r2   )rA   r   r8   r2   )rA   r   r8   r2   )rA   r   r8   r2   )rA   r   r8   r2   )rA   r   r8   r2   )rA   r   r8   r2   )rA   r)   r8   r2   )rA   r   r8   r2   )rA   r   r8   r2   )rA   r.   r8   r2   )rA   r&   r8   r2   )+__name__
__module____qualname____doc__r?   rE   rH   rJ   rL   rP   rR   rT   rb   re   rh   rj   rq   rt   rv   rx   rz   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r_    r@   r>   r6   r6   7   s*        ! ! ! !         
      
      * * * ** * * *               * * * *   * * * ** * * ** * * ** * * *   * * * ** * * *                                               r@   r6   blockslist[BasicBlock]r7   r%   cfgr   r8   AnalysisResult[None]c                h    t          | |t          |          t                      dt                    S )NF)r   r   gen_and_killinitialbackwardkind)r   r6   setr   )r   r7   r   s      r>   analyze_self_leaksr      s9     &x00   r@   )r   r   r7   r%   r   r   r8   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/   r0   mypyc.ir.rtypesr1   tupler   r2   r3   __annotations__r4   r6   r   r   r@   r>   <module>r      s   " " " " " " " U U U U U U U U U U U U* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *V & % % % % %3t9c$i'(
SUUCCEEN " " " "VdV$ $ $ $ $Q Q Q Q Q	*- Q Q Qh
 
 
 
 
 
r@   