o
    tBhw=                     @  s|  d Z ddlmZ ddlmZ ddlmZmZmZ ddl	m
Z
 ddlmZ ddlmZmZ ddl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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; dd
l<m=Z=m>Z>m?Z? eee/f Z@G dd de0eA ZBd*ddZCd+ddZDd,d-dd ZEd.d#d$ZFd/d'd(ZGd)S )0z:Utilities for pretty-printing IR in a human-readable form.    )annotations)defaultdict)AnySequenceUnion)Final)
short_name)FuncIRall_values_full)	ModuleIRs))	ERR_NEVERAssignAssignMulti
BasicBlockBoxBranchCallCallCCastComparisonOp	ControlOpDecRefExtendGetAttrGetElementPtrGotoIncRef
InitStaticIntegerIntOp	KeepAliveLoadAddressLoadErrorValue
LoadGlobalLoadLiteralLoadMem
LoadStatic
MethodCallOp	OpVisitorRaiseStandardErrorRegisterReturnSetAttrSetMemTruncateTupleGetTupleSetUnboxUnreachableValue)RTypeis_bool_rprimitiveis_int_rprimitivec                   @  s  e Zd ZU dZdzddZd{ddZejdejdiZ	de
d< d|ddZd}ddZd~ddZdddZdddZdd!d"Zdd$d%Zdd'd(Zdd*d+Zdd-d.Zdd0d1Zdd3d4Zdd6d7Zdd9d:Zdd<d=Zdd?d@ZddBdCZddEdFZddHdIZddKdLZddNdOZddQdRZ ddTdUZ!ddWdXZ"ddZd[Z#dd]d^Z$dd`daZ%ddcddZ&ddfdgZ'ddidjZ(ddldmZ)ddodpZ*ddrdsZ+ddwdxZ,dyS )IRPrettyPrintVisitorz(Internal visitor that pretty-prints ops.namesdict[Value, str]returnNonec                 C  s
   || _ d S N)r9   )selfr9    r?   f/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypyc/ir/pprint.py__init__?   s   
zIRPrettyPrintVisitor.__init__opr   strc                 C     |  d|jS )Nzgoto %l)formatlabelr>   rB   r?   r?   r@   
visit_gotoE      zIRPrettyPrintVisitor.visit_goto)%rbool)zis_error(%r) r   branch_op_namesr   c                 C  sx   | j |j \}}|jrd| }| ||j}d}|jr!d|j }d| d| d}|r3|d| 7 }| ||j|jS )Nznot rL   z (error at %s:%d)zif z goto %lz else goto %l :: )rM   rB   negatedrE   valuetraceback_entrytruefalse)r>   rB   fmttypcondtbr?   r?   r@   visit_branchJ   s   

z!IRPrettyPrintVisitor.visit_branchr,   c                 C  rD   )Nz	return %r)rE   rP   rG   r?   r?   r@   visit_returnX   rI   z!IRPrettyPrintVisitor.visit_returnr3   c                 C  s   dS )Nunreachabler?   rG   r?   r?   r@   visit_unreachable[   s   z&IRPrettyPrintVisitor.visit_unreachabler   c                 C  s   |  d|j|jS )Nz%r = %r)rE   destsrcrG   r?   r?   r@   visit_assign^   s   z!IRPrettyPrintVisitor.visit_assignr   c              	     s&     d|jd fdd|jD S )Nz	%r = [%s], c                 3      | ]	}  d |V  qdS rJ   NrE   .0vr>   r?   r@   	<genexpr>b       z:IRPrettyPrintVisitor.visit_assign_multi.<locals>.<genexpr>)rE   r\   joinr]   rG   r?   rf   r@   visit_assign_multia   s   &z'IRPrettyPrintVisitor.visit_assign_multir"   c                 C  s   |  d||jS )Nz%r = <error> :: %s)rE   typerG   r?   r?   r@   visit_load_error_valued   s   z+IRPrettyPrintVisitor.visit_load_error_valuer$   c                 C  s*   d}t |jtr
d}| d||t|jS )NrL   zobject z	%r = %s%s)
isinstancerP   intrE   repr)r>   rB   prefixr?   r?   r@   visit_load_literalg   s   z'IRPrettyPrintVisitor.visit_load_literalr   c                 C     |  d|| ||j|jS )Nz%r = %s%r.%s)rE   borrow_prefixobjattrrG   r?   r?   r@   visit_get_attro      z#IRPrettyPrintVisitor.visit_get_attrr(   c                 C  s   |j rdS dS )Nzborrow rL   )is_borrowedrG   r?   r?   r@   rs   r   s   z"IRPrettyPrintVisitor.borrow_prefixr-   c                 C  sB   |j r|jtks
J | d|j|j|jS | d|j|j|j|S )Nz
%r.%s = %rz%r.%s = %r; %r = is_error)is_init
error_kindr   rE   rt   ru   r]   rG   r?   r?   r@   visit_set_attrw   s   z#IRPrettyPrintVisitor.visit_set_attrr&   c                 C  sP   |j rdt|j  dnd}|j}|jd ur|j d| }| d|||j|S )N  ()rL   .z%r = %s :: %s%s)annro   
identifiermodule_namerE   	namespace)r>   rB   r   namer?   r?   r@   visit_load_static   s
   
z&IRPrettyPrintVisitor.visit_load_staticr   c                 C  s4   |j }|jd ur|j d| }| d||j|jS )Nr~   z%s = %r :: %s)r   r   rE   rP   r   )r>   rB   r   r?   r?   r@   visit_init_static   s   
z&IRPrettyPrintVisitor.visit_init_staticr0   c                 C     |  d||j|jS )Nz%r = %r[%d])rE   r]   indexrG   r?   r?   r@   visit_tuple_get      z$IRPrettyPrintVisitor.visit_tuple_getr1   c                   s(   d  fdd|jD } d||S )Nr_   c                 3  r`   ra   rb   )rd   itemrf   r?   r@   rg      rh   z7IRPrettyPrintVisitor.visit_tuple_set.<locals>.<genexpr>z	%r = (%s))ri   itemsrE   )r>   rB   item_strr?   rf   r@   visit_tuple_set   s   z$IRPrettyPrintVisitor.visit_tuple_setr   c                 C  sB   |  d|j}t|jjst|jjr|dt|jjj 7 }|S )Nz
inc_ref %rrN   )rE   r]   r6   rk   r7   r   r   r>   rB   sr?   r?   r@   visit_inc_ref   s   z"IRPrettyPrintVisitor.visit_inc_refr   c                 C  sN   |  d|jrdnd|j}t|jjst|jjr%|dt|jjj 7 }|S )Nz%sdec_ref %rxrL   rN   )rE   is_xdecr]   r6   rk   r7   r   r   r   r?   r?   r@   visit_dec_ref   s   z"IRPrettyPrintVisitor.visit_dec_refr   c                   sL   d  fdd|jD }|jj}| d| d}|js$ d|| }|S )Nr_   c                 3  r`   ra   rb   rd   argrf   r?   r@   rg      rh   z2IRPrettyPrintVisitor.visit_call.<locals>.<genexpr>(r}   %r = )ri   argsfn	shortnameis_voidrE   )r>   rB   r   r   r   r?   rf   r@   
visit_call   s   zIRPrettyPrintVisitor.visit_callr'   c                   sH   d  fdd|jD } d|j|j|}|js" d|| }|S )Nr_   c                 3  r`   ra   rb   r   rf   r?   r@   rg      rh   z9IRPrettyPrintVisitor.visit_method_call.<locals>.<genexpr>z	%r.%s(%s)r   )ri   r   rE   rt   methodr   )r>   rB   r   r   r?   rf   r@   visit_method_call   s
   z&IRPrettyPrintVisitor.visit_method_callr   c                 C  rr   )Nz%r = %scast(%s, %r))rE   rs   rk   r]   rG   r?   r?   r@   
visit_cast   rw   zIRPrettyPrintVisitor.visit_castr   c                 C  s   |  d||jj|jS )Nz%r = box(%s, %r)rE   r]   rk   rG   r?   r?   r@   	visit_box      zIRPrettyPrintVisitor.visit_boxr2   c                 C  r   )Nz%r = unbox(%s, %r))rE   rk   r]   rG   r?   r?   r@   visit_unbox   r   z IRPrettyPrintVisitor.visit_unboxr*   c                 C  sf   |j d ur+t|j tr| d||jt|j S t|j tr'| d||j|j S J d| d||jS )Nz%r = raise %s(%s)z%r = raise %s(%r)Fz&value type must be either str or Valuez%r = raise %s)rP   rm   rC   rE   
class_namero   r4   rG   r?   r?   r@   visit_raise_standard_error   s   
z/IRPrettyPrintVisitor.visit_raise_standard_errorr   c                   sB   d  fdd|jD }|jr d|j|S  d||j|S )Nr_   c                 3  r`   ra   rb   r   rf   r?   r@   rg      rh   z4IRPrettyPrintVisitor.visit_call_c.<locals>.<genexpr>z%s(%s)z%r = %s(%s))ri   r   r   rE   function_name)r>   rB   args_strr?   rf   r@   visit_call_c   s   z!IRPrettyPrintVisitor.visit_call_cr/   c                 C     |  d||j|j|jS )Nz%r = truncate %r: %t to %t)rE   r]   src_typerk   rG   r?   r?   r@   visit_truncate      z#IRPrettyPrintVisitor.visit_truncater   c                 C  s*   |j rd}nd}| d|||j|j|jS )Nz signedrL   z%r = extend%s %r: %t to %t)signedrE   r]   r   rk   )r>   rB   extrar?   r?   r@   visit_extend   s   z!IRPrettyPrintVisitor.visit_extendr#   c                 C  s.   |j rdt|j  dnd}| d||j|S )Nr|   r}   rL   z%r = load_global %s :: static%s)r   ro   rE   r   )r>   rB   r   r?   r?   r@   visit_load_global   s   z&IRPrettyPrintVisitor.visit_load_globalr   c                 C  s   |  d||jtj|j |jS )Nz%r = %r %s %r)rE   lhsr   op_strrB   rhsrG   r?   r?   r@   visit_int_op   s   z!IRPrettyPrintVisitor.visit_int_opr   c                 C  sd   |j tjtjtjtjfv rd}n|j tjtjtjtj	fv r d}nd}| 
d||jtj|j  |j|S )Nz
 :: signedz :: unsignedrL   z%r = %r %s %r%s)rB   r   SLTSGTSLESGEULTUGTULEUGErE   r   r   r   )r>   rB   sign_formatr?   r?   r@   visit_comparison_op   s   z(IRPrettyPrintVisitor.visit_comparison_opr%   c                 C  r   )Nz%r = load_mem %r :: %t*r   rG   r?   r?   r@   visit_load_mem   r   z#IRPrettyPrintVisitor.visit_load_memr.   c                 C  s   |  d|j|j|jS )Nzset_mem %r, %r :: %t*)rE   r\   r]   	dest_typerG   r?   r?   r@   visit_set_mem   r   z"IRPrettyPrintVisitor.visit_set_memr   c                 C  r   )Nz %r = get_element_ptr %r %s :: %t)rE   r]   fieldr   rG   r?   r?   r@   visit_get_element_ptr   r   z*IRPrettyPrintVisitor.visit_get_element_ptrr!   c                 C  s,   t |jtr| d||jS | d||jS )Nz%r = load_address %rz%r = load_address %s)rm   r]   r+   rE   rG   r?   r?   r@   visit_load_address   s   z'IRPrettyPrintVisitor.visit_load_addressr    c                   s$     dd fdd|jD  S )Nzkeep_alive %sr_   c                 3  r`   ra   rb   rc   rf   r?   r@   rg      rh   z8IRPrettyPrintVisitor.visit_keep_alive.<locals>.<genexpr>)rE   ri   r]   rG   r?   rf   r@   visit_keep_alive   s   $z%IRPrettyPrintVisitor.visit_keep_aliverT   r   r   c           	      G  sv  g }d}t |}|t|k r|d|}|dk rt|}||||  |t|k r||d  }|d}|dkrXt|tsAJ t|trO|t|j	 nZ|| j
|  nQ|dkrd|d|  nE|dkrp|d|  n9|d	krt|ts{J |d
|j  n%|dkrt|tsJ ||j n|dkr|t| ntd| |d }n|}|t|k sd|S )a2  Helper for formatting strings.

        These format sequences are supported in fmt:

          %s: arbitrary object converted to string using str()
          %r: name of IR value/register
          %d: int
          %f: float
          %l: BasicBlock (formatted as label 'Ln')
          %t: RType
        r   %   rdz%dfz%flzL%str   zInvalid format sequence %   rL   )listlenfindappendpoprm   r4   r   rC   rP   r9   r   rF   r5   r   
ValueErrorri   )	r>   rT   r   resultiarglistntypespecr   r?   r?   r@   rE      sB   



%zIRPrettyPrintVisitor.formatN)r9   r:   r;   r<   )rB   r   r;   rC   )rB   r   r;   rC   )rB   r,   r;   rC   )rB   r3   r;   rC   )rB   r   r;   rC   )rB   r   r;   rC   )rB   r"   r;   rC   )rB   r$   r;   rC   )rB   r   r;   rC   )rB   r(   r;   rC   )rB   r-   r;   rC   )rB   r&   r;   rC   )rB   r   r;   rC   )rB   r0   r;   rC   )rB   r1   r;   rC   )rB   r   r;   rC   )rB   r   r;   rC   )rB   r   r;   rC   )rB   r'   r;   rC   )rB   r   r;   rC   )rB   r   r;   rC   )rB   r2   r;   rC   )rB   r*   r;   rC   )rB   r   r;   rC   )rB   r/   r;   rC   )rB   r   r;   rC   )rB   r#   r;   rC   )rB   r   r;   rC   )rB   r   r;   rC   )rB   r%   r;   rC   )rB   r.   r;   rC   )rB   r   r;   rC   )rB   r!   r;   rC   )rB   r    r;   rC   )rT   rC   r   r   r;   rC   )-__name__
__module____qualname____doc__rA   rH   r   BOOLIS_ERRORrM   __annotations__rX   rY   r[   r^   rj   rl   rq   rv   rs   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rE   r?   r?   r?   r@   r8   <   sN   
 



















	














r8   func_irr	   r9   r:   r;   	list[str]c                 C  s   g }d}t | j| j}|t|k rh|}|||  g}|d t|k rO||d  j|| jkrO|d7 }||||   |d t|k rO||d  j|| jks.|d7 }|dd||| j |t|k s|S )Nr   r   z{} :: {}r_   )r
   arg_regsblocksr   rk   r   rE   ri   )r   r9   r   r   regsi0groupr?   r?   r@   format_registers3  s   ((r   r   list[BasicBlock]source_to_errordict[ErrorSource, list[str]]c                 C  s  t | D ]\}}||_qi }| D ]}|jr||jg | qt|}g }t | D ]\}}d}	||v rGtdd || D }
dd|
}	|d|j|	f  ||v rd|| D ]
}|d|  qY|j	}t
|d tr|d	 t| k r|d j| |d	  kr||d g s|d
d }|D ]!}d|| }|| ||v r|| D ]
}|d|  qqt
|j	d ttttfs|d q*|S )z<Format a list of IR basic blocks into a human-readable form.rL   c                 s  s    | ]}d |j  V  qdS )zL%dN)rF   )rd   br?   r?   r@   rg   W  s    z format_blocks.<locals>.<genexpr>z (handler for {})r_   zL%d:%sz  ERR: r   N    z    [MISSING BLOCK EXIT OPCODE])	enumeraterF   error_handler
setdefaultr   r8   sortedrE   ri   opsrm   r   r   getacceptr   r,   r3   )r   r9   r   r   blockhandler_mapr   visitorlineshandler_msglabelserrorr   rB   liner?   r?   r@   format_blocksB  sJ   

r   r?   r   errors!Sequence[tuple[ErrorSource, str]]c           
   
   C  s   g }| j r
| j d nd}|d|| jddd | jD  t| j| j}t	| |D ]	}|d|  q,t
t}|D ]\}}|| | q<t| j||}	||	 |S )Nr~   rL   zdef {}{}({}):r_   c                 s  s    | ]}|j V  qd S r=   )r   r   r?   r?   r@   rg   y  s    zformat_func.<locals>.<genexpr>r   )r   r   rE   r   ri   r   generate_names_for_irr   r   r   r   r   r   extend)
r   r   r   
cls_prefixr9   r   r   sourcer   coder?   r?   r@   format_funcu  s    
r  modulesr   c                 C  s:   g }|   D ]}|jD ]}|t| |d qq|S )NrL   )values	functionsr  r  r   )r  r   moduler   r?   r?   r@   format_modules  s   
r
  r   list[Register]c                 C  s8  i }t  }d}| D ]}|j||< ||j q	|D ]}|jD ]z}g }| D ]}	|	|vr1||	 q&t|ttfr@||j	 nt|t
sH|jrIq||vrR|| |D ]C}
|
|v r[qTt|
trg|
jrg|
j}nt|
trmqTd| }|d7 }||v rd}	 d||f }||vr|}n|d7 }q||||
< || qTqq|S )zGenerate unique names for IR values.

    Give names such as 'r5' to temp values in IR which are useful when
    pretty-printing or generating C. Ensure generated names are unique.
    r   zr%dr   r   Tz%s_%d)setr   addr   sourcesr   rm   r   r   r\   r   r   r+   r   )r   r   r9   
used_names
temp_indexr   r   rB   r  r  rP   r   r   	candidater?   r?   r@   r     sT   




&r   N)r   r	   r9   r:   r;   r   )r   r   r9   r:   r   r   r;   r   )r?   )r   r	   r   r   r;   r   )r  r   r;   r   )r   r  r   r   r;   r:   )Hr   
__future__r   collectionsr   typingr   r   r   typing_extensionsr   mypyc.commonr   mypyc.ir.func_irr	   r
   mypyc.ir.module_irr   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/   r0   r1   r2   r3   r4   mypyc.ir.rtypesr5   r6   r7   ErrorSourcerC   r8   r   r   r  r
  r   r?   r?   r?   r@   <module>   s$    + 
x
3
	