Ë
    pPêj  ã                  ól  — 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=y)é    )Ú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                  ó`  — e Zd ZdZd-d„Zd.d„Zd/d„Zd0d„Zd1d„Zd2d„Z	d3d„Z
d4d	„Zd5d
„Zd6d„Zd7d„Zd8d„Zd9d„Zd:d„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 dJd„Z!dKd „Z"dLd!„Z#dMd"„Z$dNd#„Z%dOd$„Z&dPd%„Z'dQd&„Z(dRd'„Z)dSd(„Z*dTd)„Z+dUd*„Z,dVd+„Z-y,)WÚ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()'.)
    c                ó   — || _         y ©N©Úself_reg)Úselfr=   s     ú]/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypyc/analysis/selfleaks.pyÚ__init__zSelfLeakedVisitor.__init__I   s	   € Ø ˆ�ó    c                ó   — t         S r;   ©r6   ©r>   Úops     r?   Ú
visit_gotozSelfLeakedVisitor.visit_gotoL   ó   € ÜˆrA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_branchzSelfLeakedVisitor.visit_branchO   rG   rA   c                ó   — t         S r;   )r7   rD   s     r?   Úvisit_returnzSelfLeakedVisitor.visit_returnR   s	   € ô ˆrA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_unreachablez#SelfLeakedVisitor.visit_unreachableW   rG   rA   c                óz   — |j                   | j                  u s|j                  | j                  u rt        S t        S r;   )Úsrcr=   Údestr7   r6   rD   s     r?   Úvisit_assignzSelfLeakedVisitor.visit_assignZ   s+   € Ø�6‰6�T—]‘]Ñ" b§g¡g°·±Ñ&>ÜˆLÜˆrA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_assign_multiz$SelfLeakedVisitor.visit_assign_multi_   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_set_memzSelfLeakedVisitor.visit_set_memb   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_inc_refzSelfLeakedVisitor.visit_inc_refe   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_dec_refzSelfLeakedVisitor.visit_dec_refh   rG   rA   c                ó6  — |j                   }|j                  rq|j                  dk(  rb|j                   j                  j                  d   j
                  }t        |t        «      sJ |«       ‚|j                  }|j                  st        S | j                  |«      S )Nr@   r   )ÚfnÚ
class_nameÚnameÚsigÚargsÚtypeÚ
isinstancer5   Úclass_irÚinit_self_leakr6   Úcheck_register_op)r>   rE   r[   Ú	self_typeÚcls        r?   Ú
visit_callzSelfLeakedVisitor.visit_callk   sx   € Ø�U‰UˆØ�=Š=˜RŸW™W¨
Ò2ØŸ™Ÿ	™	Ÿ™ qÑ)×.Ñ.ˆIÜ˜i¬Ô3Ð>°YÓ>Ð3Ø×#Ñ#ˆBØ×$Ò$Ü�Ø×%Ñ% bÓ)Ð)rA   c                ó$   — | j                  |«      S r;   ©rd   rD   s     r?   Úvisit_method_callz#SelfLeakedVisitor.visit_method_callu   ó   € Ø×%Ñ% bÓ)Ð)rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_load_error_valuez(SelfLeakedVisitor.visit_load_error_valuex   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_load_literalz$SelfLeakedVisitor.visit_load_literal{   rG   rA   c                ó’   — |j                   j                  }|j                  |j                  «      r| j	                  |«      S t
        S r;   ©Ú
class_typerb   Ú
get_methodÚattrrd   r6   ©r>   rE   rf   s      r?   Úvisit_get_attrz SelfLeakedVisitor.visit_get_attr~   ó7   € Ø�]‰]×#Ñ#ˆØ�=‰=˜Ÿ™Ô!à×)Ñ)¨"Ó-Ð-ÜˆrA   c                ó’   — |j                   j                  }|j                  |j                  «      r| j	                  |«      S t
        S r;   rq   ru   s      r?   Úvisit_set_attrz SelfLeakedVisitor.visit_set_attr…   rw   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_load_staticz#SelfLeakedVisitor.visit_load_staticŒ   rG   rA   c                ó$   — | j                  |«      S r;   ri   rD   s     r?   Úvisit_init_staticz#SelfLeakedVisitor.visit_init_static�   rk   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_tuple_getz!SelfLeakedVisitor.visit_tuple_get’   rG   rA   c                ó$   — | j                  |«      S r;   ri   rD   s     r?   Úvisit_tuple_setz!SelfLeakedVisitor.visit_tuple_set•   rk   rA   c                ó$   — | j                  |«      S r;   ri   rD   s     r?   Ú	visit_boxzSelfLeakedVisitor.visit_box˜   rk   rA   c                ó$   — | j                  |«      S r;   ri   rD   s     r?   Úvisit_unboxzSelfLeakedVisitor.visit_unbox›   rk   rA   c                ó$   — | j                  |«      S r;   ri   rD   s     r?   Ú
visit_castzSelfLeakedVisitor.visit_castž   rk   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_raise_standard_errorz,SelfLeakedVisitor.visit_raise_standard_error¡   rG   rA   c                ó$   — | j                  |«      S r;   ri   rD   s     r?   Úvisit_call_czSelfLeakedVisitor.visit_call_c¤   rk   rA   c                ó$   — | j                  |«      S r;   ri   rD   s     r?   Úvisit_primitive_opz$SelfLeakedVisitor.visit_primitive_op§   rk   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_truncatez SelfLeakedVisitor.visit_truncateª   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_extendzSelfLeakedVisitor.visit_extend­   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_load_globalz#SelfLeakedVisitor.visit_load_global°   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_int_opzSelfLeakedVisitor.visit_int_op³   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_comparison_opz%SelfLeakedVisitor.visit_comparison_op¶   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_float_opz SelfLeakedVisitor.visit_float_op¹   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_float_negz!SelfLeakedVisitor.visit_float_neg¼   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_float_comparison_opz+SelfLeakedVisitor.visit_float_comparison_op¿   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_load_memz SelfLeakedVisitor.visit_load_memÂ   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_get_elementz#SelfLeakedVisitor.visit_get_elementÅ   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_get_element_ptrz'SelfLeakedVisitor.visit_get_element_ptrÈ   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_set_elementz#SelfLeakedVisitor.visit_set_elementË   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_load_addressz$SelfLeakedVisitor.visit_load_addressÎ   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_keep_alivez"SelfLeakedVisitor.visit_keep_aliveÑ   rG   rA   c                ó   — t         S r;   rC   rD   s     r?   Úvisit_unborrowz SelfLeakedVisitor.visit_unborrowÔ   rG   rA   c                ó`   ‡ — t        ˆ fd„|j                  «       D «       «      rt        S t        S )Nc              3  ó:   •K  — | ]  }|‰j                   u –— Œ y ­wr;   r<   )Ú.0rO   r>   s     €r?   ú	<genexpr>z6SelfLeakedVisitor.check_register_op.<locals>.<genexpr>Ø   s   øè ø€ Ò<¨ˆs�d—m‘mÔ#Ñ<ùs   ƒ)ÚanyÚsourcesr7   r6   rD   s   ` r?   rd   z#SelfLeakedVisitor.check_register_op×   s!   ø€ ÜÓ<¨r¯z©z«|Ô<Ô<ÜˆLÜˆrA   N)r=   r)   ÚreturnÚNone)rE   r   r²   r   )rE   r   r²   r   )rE   r+   r²   r   )rE   r4   r²   r   )rE   r	   r²   r   )rE   r
   r²   r   )rE   r.   r²   r   )rE   r   r²   r   )rE   r   r²   r   )rE   r   r²   r   )rE   r%   r²   r   )rE   r    r²   r   )rE   r"   r²   r   )rE   r   r²   r   )rE   r,   r²   r   )rE   r$   r²   r   )rE   r   r²   r   )rE   r0   r²   r   )rE   r1   r²   r   )rE   r   r²   r   )rE   r3   r²   r   )rE   r   r²   r   )rE   r(   r²   r   )rE   r   r²   r   )rE   r'   r²   r   )rE   r/   r²   r   )rE   r   r²   r   )rE   r!   r²   r   )rE   r   r²   r   )rE   r   r²   r   )rE   r   r²   r   )rE   r   r²   r   )rE   r   r²   r   )rE   r#   r²   r   )rE   r   r²   r   )rE   r   r²   r   )rE   r-   r²   r   )rE   r   r²   r   )rE   r   r²   r   )rE   r2   r²   r   )rE   r*   r²   r   ).Ú__name__Ú
__module__Ú__qualname__Ú__doc__r@   rF   rI   rK   rM   rQ   rS   rU   rW   rY   rg   rj   rm   ro   rv   ry   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«   rd   © rA   r?   r9   r9   @   sÙ   „ ñó!óóóó
óó
óóóó*ó*óóóóóó*óó*ó*ó*ó*óó*ó*óóóóóóóóóóóóóóóôrA   r9   c                óN   — t        | |t        |«      t        «       dt        ¬«      S )NF)ÚblocksÚcfgÚgen_and_killÚinitialÚbackwardÚkind)r   r9   Úsetr   )rº   r=   r»   s      r?   Úanalyze_self_leaksrÁ   Ý   s*   € ô ØØÜ& xÓ0Ü“ØÜôð rA   )rº   zlist[BasicBlock]r=   r)   r»   r   r²   zAnalysisResult[None])>Ú
__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¸   rA   r?   ú<module>rÈ      s¼   ðÞ "÷õ ÷-÷ -÷ -÷ -÷ -÷ -÷ -÷ -÷ -÷ -÷ -ó -õ\ &à  Ñ&€
á“U™C›E�N€€zÓ "Ø�V˜d˜VÐ$€€zÓ $ôZ˜	 *Ñ-ô Zðz
Øð
Ø(0ð
Ø7:ð
àô
rA   