o
    tBh'                     @  s&  U d Z ddlmZ ddlmZ 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 ddlmZmZmZmZmZmZmZmZ ddlmZmZ dd	lmZ G d
d dZG dd dZdZ de!d< dZ"de!d< dZ#de!d< G dd dZ$G dd dZ%edg e
g Z&de!d< d%d d!Z'd%d"d#Z(d$S )&z)Intermediate representation of functions.    )annotations)Sequence)Final)ARG_POSArgKindBlockFuncDef)JsonDictget_id_from_nameshort_id_from_name)AssignAssignMulti
BasicBlock	ControlOp	DeserMapsLoadAddressRegisterValue)RTypedeserialize_type)NameGeneratorc                   @  sP   e Zd ZdZedfdddZedddZdddZdddZ	e
d ddZdS )!
RuntimeArgzrDescription of a function argument in IR.

    Argument kind is one of ARG_* constants defined in mypy.nodes.
    Fnamestrtypr   kindr   pos_onlyboolreturnNonec                 C  s   || _ || _|| _|| _d S Nr   typer   r   )selfr   r   r   r    r$   g/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypyc/ir/func_ir.py__init__   s   
zRuntimeArg.__init__c                 C  s
   | j  S r    )r   is_optionalr#   r$   r$   r%   optional&      
zRuntimeArg.optionalc                 C  s   d | j| j| j| jS )Nz:RuntimeArg(name={}, type={}, optional={!r}, pos_only={!r}))formatr   r"   r)   r   r(   r$   r$   r%   __repr__*   s   zRuntimeArg.__repr__r	   c                 C  s    | j | j t| jj| jdS )Nr!   )r   r"   	serializeintr   valuer   r(   r$   r$   r%   r-   /   s
   
zRuntimeArg.serializedatactxr   c                 C  s(   t |d t|d |t|d |d S )Nr   r"   r   r   )r   r   r   clsr0   r1   r$   r$   r%   deserialize7   s   
zRuntimeArg.deserializeN)
r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r	   )r0   r	   r1   r   r   r   )__name__
__module____qualname____doc__r   r&   propertyr)   r,   r-   classmethodr4   r$   r$   r$   r%   r      s    

r   c                   @  s<   e Zd ZdZddd	ZdddZdddZedddZdS )FuncSignaturezSignature of a function in IR.argsSequence[RuntimeArg]ret_typer   r   r   c                 C  s   t || _|| _d S r    )tupler>   r@   )r#   r>   r@   r$   r$   r%   r&   F   s   

zFuncSignature.__init__r   c                 C  s   d| j d| jdS )NzFuncSignature(args=z, ret=)r>   r@   r(   r$   r$   r%   r,   J   s   zFuncSignature.__repr__r	   c                 C  s   dd | j D | j dS )Nc                 S  s   g | ]}|  qS r$   )r-   ).0tr$   r$   r%   
<listcomp>N   s    z+FuncSignature.serialize.<locals>.<listcomp>rC   )r>   r@   r-   r(   r$   r$   r%   r-   M   s   zFuncSignature.serializer0   r1   r   c                   s&   t  fdd|d D t|d  S )Nc                   s   g | ]}t | qS r$   )r   r4   )rD   argr1   r$   r%   rF   S   s    z-FuncSignature.deserialize.<locals>.<listcomp>r>   r@   )r=   r   r2   r$   rH   r%   r4   P   s   zFuncSignature.deserializeN)r>   r?   r@   r   r   r   r5   r6   )r0   r	   r1   r   r   r=   )	r7   r8   r9   r:   r&   r,   r-   r<   r4   r$   r$   r$   r%   r=   A   s    


r=   r   FUNC_NORMAL   FUNC_STATICMETHOD   FUNC_CLASSMETHODc                   @  s   e Zd ZdZeddfd/ddZed0ddZejd1ddZed2ddZ	e
d3ddZed2ddZed2ddZd4d!d"Zd5d$d%Ze
d6d'd(Zed7d,d-Zd.S )8FuncDeclzDeclaration of a function in IR (without body or implementation).

    A function can be a regular module-level function, a method, a
    static method, a class method, or a property getter/setter.
    Fr   r   
class_name
str | Nonemodule_namesigr=   r   r.   is_prop_setterr   is_prop_getterr   r   c                 C  sl   || _ || _|| _|| _|| _|| _|| _|d u rd | _n|tkr%|| _nt	|j
dd  |j| _d | _d S )NrJ   )r   rO   rQ   rR   r   rS   rT   	bound_sigrK   r=   r>   r@   _line)r#   r   rO   rQ   rR   r   rS   rT   r$   r$   r%   r&   d   s   

zFuncDecl.__init__c                 C  s   | j d usJ | j S r    rV   r(   r$   r$   r%   line   s   zFuncDecl.linerX   c                 C  s
   || _ d S r    rW   )r#   rX   r$   r$   r%   rX      r*   c                 C  s    | j d usJ t| j| j| j S r    )rX   r
   r   fullnamer(   r$   r$   r%   id   s   zFuncDecl.idc                 C  s   | r| d | S |S N.r$   rO   r   r$   r$   r%   compute_shortname   s   zFuncDecl.compute_shortnamec                 C  s   t | j| jS r    )rN   r^   rO   r   r(   r$   r$   r%   	shortname      zFuncDecl.shortnamec                 C  s   | j d | j S r[   )rQ   r_   r(   r$   r$   r%   rY      r`   zFuncDecl.fullnamenamesr   c                 C  s    t | j| j| j}|| j|S r    )r   r   r_   rV   private_namerQ   )r#   ra   partial_namer$   r$   r%   cname   s   zFuncDecl.cnamer	   c                 C  s&   | j | j| j| j | j| j| jdS )N)r   rO   rQ   rR   r   rS   rT   )r   rO   rQ   rR   r-   r   rS   rT   r(   r$   r$   r%   r-      s   zFuncDecl.serializefunc_irc                 C  s@   | d }t |d |d }|d d | }t|d || d S )zCGet the id from the serialized FuncIR associated with this FuncDecldeclrO   r   rQ   r\   rX   )rN   r^   r
   )re   rf   r_   rY   r$   r$   r%   get_id_from_json   s   zFuncDecl.get_id_from_jsonr0   r1   r   c              	   C  s8   t |d |d |d t|d ||d |d |d S )Nr   rO   rQ   rR   r   rS   rT   )rN   r=   r4   r2   r$   r$   r%   r4      s   zFuncDecl.deserializeN)r   r   rO   rP   rQ   r   rR   r=   r   r.   rS   r   rT   r   r   r   r   r.   )rX   r.   r   r   r5   )rO   rP   r   r   r   r   ra   r   r   r   r6   )re   r	   r   r   )r0   r	   r1   r   r   rN   )r7   r8   r9   r:   rI   r&   r;   rX   setterrZ   staticmethodr^   r_   rY   rd   r-   rg   r<   r4   r$   r$   r$   r%   rN   ]   s0    

rN   c                   @  s   e Zd ZdZ		d4d5ddZed6ddZed7ddZed8ddZed9ddZ	ed:ddZ
ed;d d!Zed;d"d#Zed;d$d%Zd<d(d)Zd;d*d+Zd=d-d.Zed>d2d3ZdS )?FuncIRzIntermediate representation of a function with contextual information.

    Unlike FuncDecl, this includes the IR of the body (basic blocks).
    Nrf   rN   arg_regslist[Register]blockslist[BasicBlock]rX   r.   traceback_namerP   r   r   c                 C  s$   || _ || _|| _|| j _|| _d S r    )rf   rn   rp   rX   rr   )r#   rf   rn   rp   rX   rr   r$   r$   r%   r&      s
   	
zFuncIR.__init__c                 C     | j jS r    )rf   rX   r(   r$   r$   r%   rX         zFuncIR.liner?   c                 C  
   | j jjS r    )rf   rR   r>   r(   r$   r$   r%   r>      r*   zFuncIR.argsr   c                 C  ru   r    )rf   rR   r@   r(   r$   r$   r%   r@      r*   zFuncIR.ret_typec                 C  rs   r    )rf   rO   r(   r$   r$   r%   rO      rt   zFuncIR.class_namer=   c                 C  rs   r    )rf   rR   r(   r$   r$   r%   rR      rt   z
FuncIR.sigr   c                 C  rs   r    )rf   r   r(   r$   r$   r%   r      rt   zFuncIR.namec                 C  rs   r    )rf   rY   r(   r$   r$   r%   rY      rt   zFuncIR.fullnamec                 C  rs   r    )rf   rZ   r(   r$   r$   r%   rZ      rt   z	FuncIR.idra   r   c                 C  s   | j |S r    )rf   rd   )r#   ra   r$   r$   r%   rd      s   zFuncIR.cnamec                 C  s*   | j rd| j  d| j dS d| j dS )Nz<FuncIR r\   >r]   r(   r$   r$   r%   r,      s   zFuncIR.__repr__r	   c                 C  s   | j  | j| jdS )N)rf   rX   rr   )rf   r-   rX   rr   r(   r$   r$   r%   r-     s   zFuncIR.serializer0   r1   r   c                 C  s$   t t|d |g g |d |d S )Nrf   rX   rr   )rl   rN   r4   r2   r$   r$   r%   r4     s   zFuncIR.deserialize)rm   N)rf   rN   rn   ro   rp   rq   rX   r.   rr   rP   r   r   rh   )r   r?   )r   r   )r   rP   )r   r=   r5   ri   r6   )r0   r	   r1   r   r   rl   )r7   r8   r9   r:   r&   r;   rX   r>   r@   rO   rR   r   rY   rZ   rd   r,   r-   r<   r4   r$   r$   r$   r%   rl      s4    



rl   z<INVALID_FUNC_DEF>INVALID_FUNC_DEFr>   ro   rp   rq   r   list[Value]c                 C  s   t | }t| }|D ]K}|jD ]E}t|tsTt|ttfr/|j|vr.||j |	|j q|j
r3qt|trOt|jtrO|j|vrO||j |	|j || qq
|S )zvReturn the set of all values that may be initialized in the blocks.

    This omits registers that are only read.
    )listsetops
isinstancer   r   r   destappendaddis_voidr   srcr   )r>   rp   valuesseen_registersblockopr$   r$   r%   
all_values  s.   





r   c                 C  s   t | }t| }|D ]I}|jD ]C}| D ]}t|tr*||vr*|| || qt|tsRt|t	t
frI|j|vrH||j ||j q|jrMq|| qq
|S )z:Return set of all values that are initialized or accessed.)ry   rz   r{   sourcesr|   r   r~   r   r   r   r   r}   r   )r>   rp   r   r   r   r   sourcer$   r$   r%   all_values_full4  s*   





r   N)r>   ro   rp   rq   r   rx   ))r:   
__future__r   typingr   typing_extensionsr   
mypy.nodesr   r   r   r   mypyc.commonr	   r
   r   mypyc.ir.opsr   r   r   r   r   r   r   r   mypyc.ir.rtypesr   r   mypyc.namegenr   r   r=   rI   __annotations__rK   rM   rN   rl   rw   r   r   r$   r$   r$   r%   <module>   s&    (
)cR
