o
    tBhj                     @  s4  U d dl mZ d dlmZ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- d dl.m/Z/ eed ed f Z0e1 e1 fZ2de3d< dhdhfZ4de3d	< G d
d de"e0 Z5dddZ6dS )    )annotations)SetTuple)CFGMAYBE_ANALYSISAnalysisResultrun_analysis)#AssignAssignMulti
BasicBlockBoxBranchCallCallCCastComparisonOpExtendGetAttrGetElementPtrGoto
InitStaticIntOp	KeepAliveLoadAddressLoadErrorValue
LoadGlobalLoadLiteralLoadMem
LoadStatic
MethodCall	OpVisitorRaiseStandardErrorRegister
RegisterOpReturnSetAttrSetMemTruncateTupleGetTupleSetUnboxUnreachable)	RInstanceN
GenAndKillCLEANDIRTYc                   @  sZ  e Zd ZdZdkddZdlddZdmddZdnddZdoddZdpddZ	dqddZ
drddZdsd d!Zdtd#d$Zdud&d'Zdvd)d*Zdwd,d-Zdxd/d0Zdyd2d3Zdzd5d6Zd{d8d9Zd|d;d<Zd}d>d?Zd~dAdBZddDdEZddGdHZddJdKZddMdNZddPdQZddSdTZddVdWZddYdZZdd\d]Z dd_d`Z!ddbdcZ"ddedfZ#ddhdiZ$djS )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                 C  s
   || _ d S Nr1   )selfr1    r7   o/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypyc/analysis/selfleaks.py__init__<      
zSelfLeakedVisitor.__init__opr   r-   c                 C     t S r4   r.   r6   r;   r7   r7   r8   
visit_goto?      zSelfLeakedVisitor.visit_gotor   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_branchB   r@   zSelfLeakedVisitor.visit_branchr$   c                 C  r<   r4   )r/   r>   r7   r7   r8   visit_returnE   s   zSelfLeakedVisitor.visit_returnr+   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_unreachableJ   r@   z#SelfLeakedVisitor.visit_unreachabler	   c                 C  s    |j | ju s|j| ju rtS tS r4   )srcr1   destr/   r.   r>   r7   r7   r8   visit_assignM   s   zSelfLeakedVisitor.visit_assignr
   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_assign_multiR   r@   z$SelfLeakedVisitor.visit_assign_multir&   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_set_memU   r@   zSelfLeakedVisitor.visit_set_memr   c                 C  sN   |j }|jr"|jdkr"|j jjd j}t|tsJ |j}|j	s"t
S | |S )Nr9   r   )fn
class_namenamesigargstype
isinstancer,   class_irinit_self_leakr.   check_register_op)r6   r;   rI   	self_typeclr7   r7   r8   
visit_callX   s   
zSelfLeakedVisitor.visit_callr   c                 C  
   |  |S r4   rR   r>   r7   r7   r8   visit_method_callb   r:   z#SelfLeakedVisitor.visit_method_callr   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_load_error_valuee   r@   z(SelfLeakedVisitor.visit_load_error_valuer   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_load_literalh   r@   z$SelfLeakedVisitor.visit_load_literalr   c                 C  "   |j j}||jr| |S tS r4   
class_typerP   
get_methodattrrR   r.   r6   r;   rT   r7   r7   r8   visit_get_attrk      
z SelfLeakedVisitor.visit_get_attrr%   c                 C  r[   r4   r\   r`   r7   r7   r8   visit_set_attrr   rb   z SelfLeakedVisitor.visit_set_attrr   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_load_staticy   r@   z#SelfLeakedVisitor.visit_load_staticr   c                 C  rV   r4   rW   r>   r7   r7   r8   visit_init_static|   r:   z#SelfLeakedVisitor.visit_init_staticr(   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_tuple_get   r@   z!SelfLeakedVisitor.visit_tuple_getr)   c                 C  rV   r4   rW   r>   r7   r7   r8   visit_tuple_set   r:   z!SelfLeakedVisitor.visit_tuple_setr   c                 C  rV   r4   rW   r>   r7   r7   r8   	visit_box   r:   zSelfLeakedVisitor.visit_boxr*   c                 C  rV   r4   rW   r>   r7   r7   r8   visit_unbox   r:   zSelfLeakedVisitor.visit_unboxr   c                 C  rV   r4   rW   r>   r7   r7   r8   
visit_cast   r:   zSelfLeakedVisitor.visit_castr!   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_raise_standard_error   r@   z,SelfLeakedVisitor.visit_raise_standard_errorr   c                 C  rV   r4   rW   r>   r7   r7   r8   visit_call_c   r:   zSelfLeakedVisitor.visit_call_cr'   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_truncate   r@   z SelfLeakedVisitor.visit_truncater   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_extend   r@   zSelfLeakedVisitor.visit_extendr   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_load_global   r@   z#SelfLeakedVisitor.visit_load_globalr   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_int_op   r@   zSelfLeakedVisitor.visit_int_opr   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_comparison_op   r@   z%SelfLeakedVisitor.visit_comparison_opr   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_load_mem   r@   z SelfLeakedVisitor.visit_load_memr   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_get_element_ptr   r@   z'SelfLeakedVisitor.visit_get_element_ptrr   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_load_address   r@   z$SelfLeakedVisitor.visit_load_addressr   c                 C  r<   r4   r=   r>   r7   r7   r8   visit_keep_alive   r@   z"SelfLeakedVisitor.visit_keep_aliver#   c                   s"   t  fdd| D rtS tS )Nc                 3  s    | ]}| j u V  qd S r4   r5   ).0rD   r6   r7   r8   	<genexpr>   s    z6SelfLeakedVisitor.check_register_op.<locals>.<genexpr>)anysourcesr/   r.   r>   r7   rw   r8   rR      s   z#SelfLeakedVisitor.check_register_opN)r1   r"   r2   r3   )r;   r   r2   r-   )r;   r   r2   r-   )r;   r$   r2   r-   )r;   r+   r2   r-   )r;   r	   r2   r-   )r;   r
   r2   r-   )r;   r&   r2   r-   )r;   r   r2   r-   )r;   r   r2   r-   )r;   r   r2   r-   )r;   r   r2   r-   )r;   r   r2   r-   )r;   r%   r2   r-   )r;   r   r2   r-   )r;   r   r2   r-   )r;   r(   r2   r-   )r;   r)   r2   r-   )r;   r   r2   r-   )r;   r*   r2   r-   )r;   r   r2   r-   )r;   r!   r2   r-   )r;   r   r2   r-   )r;   r'   r2   r-   )r;   r   r2   r-   )r;   r   r2   r-   )r;   r   r2   r-   )r;   r   r2   r-   )r;   r   r2   r-   )r;   r   r2   r-   )r;   r   r2   r-   )r;   r   r2   r-   )r;   r#   r2   r-   )%__name__
__module____qualname____doc__r9   r?   rA   rB   rC   rF   rG   rH   rU   rX   rY   rZ   ra   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rR   r7   r7   r7   r8   r0   3   sF    
































r0   blockslist[BasicBlock]r1   r"   cfgr   r2   AnalysisResult[None]c                 C  s   t | |t|t dtdS )NF)r   r   gen_and_killinitialbackwardkind)r   r0   setr   )r   r1   r   r7   r7   r8   analyze_self_leaks   s   r   )r   r   r1   r"   r   r   r2   r   )7
__future__r   typingr   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+   mypyc.ir.rtypesr,   r-   r   r.   __annotations__r/   r0   r   r7   r7   r7   r8   <module>   s    % 