o
    tBhf                     @  s   d dl mZ d dlZd dlmZmZmZ d dl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 d dlmZmZmZmZmZmZmZm Z m!Z! dddZ"dddZ#ed edZ$G dd dej%Z&dS )    )annotationsN)FnErrorcan_coerce_tocheck_func_ir)ClassIR)FuncDeclFuncIRFuncSignature)Assign
BasicBlockGotoIntegerLoadLiteralOpRegisterReturn)format_func)		RInstanceRTypeRUnionbytes_rprimitiveint32_rprimitiveint64_rprimitivenone_rprimitiveobject_rprimitivestr_rprimitivefnr   errorr   returnNonec                 C  s   t | }||gksJ d S Nr   )r   r   errors r#   n/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypyc/test/test_ircheck.pyassert_has_error   s   r%   c                 C  s   t | rJ d S r    r!   )r   r#   r#   r$   assert_no_errors   s   r&   )rtypec                   @  s   e Zd Zd(ddZd)dd	Zd*d+ddZd(ddZd(ddZd(ddZd(ddZ	d(ddZ
d(ddZd(ddZd(d d!Zd(d"d#Zd(d$d%Zd(d&d'Zd
S ),TestIrcheckr   r   c                 C  s
   d| _ d S )Nr   labelselfr#   r#   r$   setUp$   s   
zTestIrcheck.setUpopslist[Op]r   c                 C  s"   |  j d7  _ t| j }||_|S )N   )r*   r   r.   )r,   r.   blockr#   r#   r$   basic_block'   s   
zTestIrcheck.basic_blockNnamestrret_typeRType | Noner   c                 C  s$   |d u rt }t|d dtg |ddS )Nmodule)argsr5   )r3   
class_namemodule_namesig)r   r   r	   )r,   r3   r5   r#   r#   r$   	func_decl-   s   
zTestIrcheck.func_declc                 C  s0   t t| jddg | jttdgdgd d S )Nfunc_1r3   value)r.   declarg_regsblocks)r&   r   r<   r2   r   
NONE_VALUEr+   r#   r#   r$   test_valid_fn7   s   
zTestIrcheck.test_valid_fnc                 C  s8   |  g }t| jddg |gd}t|t|dd d S )Nr=   r>   rA   zBlock not terminatedsourcedesc)r2   r   r<   r%   r   )r,   r1   r   r#   r#   r$   %test_block_not_terminated_empty_block@   s   
z1TestIrcheck.test_block_not_terminated_empty_blockc                 C  sJ   |  ttdg}|  t|dg}t| jddg ||gd}t| d S )Nr?   r)   r=   r>   rA   )r2   r   rE   r   r   r<   r&   )r,   block_1block_2r   r#   r#   r$   test_valid_gotoE   s   zTestIrcheck.test_valid_gotoc                 C  sV   |  ttdg}t|d}|  |g}t| jddg |gd}t|t|dd d S )Nr?   r)   r=   r>   rA   #Invalid control operation target: 1rG   )r2   r   rE   r   r   r<   r%   r   )r,   rK   gotorL   r   r#   r#   r$   test_invalid_gotoK   s   

zTestIrcheck.test_invalid_gotoc                 C  sL   t ttddd}| |g}t| jddg |gd}t|t|dd d S )	Nr1typer3   r?   r=   r>   rA   z#Invalid op reference to register r1rG   )r   r   r   r2   r   r<   r%   r   r,   retr1   r   r#   r#   r$   test_invalid_register_sourceW   s   z(TestIrcheck.test_invalid_register_sourcec                 C  sL   t tdtdd}| |g}t| jddg |gd}t|t|dd d S )	Nfoor@   r'   r?   r=   r>   rA   z.Invalid op reference to op of type LoadLiteralrG   )r   r   r   r2   r   r<   r%   r   rT   r#   r#   r$   test_invalid_op_source]   s   z"TestIrcheck.test_invalid_op_sourcec                 C  sJ   t tdtdd}t| jdtdg | |ggd}t|t|dd d S )	N   rX   r?   r=   )r3   r5   rA   2Cannot coerce source type int32 to dest type int64rG   )	r   r   r   r   r<   r   r2   r%   r   )r,   rU   r   r#   r#   r$   test_invalid_return_typee   s   z$TestIrcheck.test_invalid_return_typec                 C  sd   t tdd}t|tdtdd}ttd}t| jdd|g| 	||ggd	}t
|t|d
d d S )NrQ   rR   rZ   rX   destsrcr?   r=   r>   rA   r[   rG   )r   r   r
   r   r   r   rE   r   r<   r2   r%   r   )r,   arg_regassignrU   r   r#   r#   r$   test_invalid_assignp   s   

zTestIrcheck.test_invalid_assignc              	   C  s   t ddd}ttfttfttfttftttgtfttttgft|tfg}ttft|tfttfg}|D ]\}}t||sAJ q6|D ]\}}t||rOJ qDd S )NClscls)r3   r:   )	r   r   r   r   r   r   r   r   r   )r,   rd   valid_casesinvalid_casesr_   r^   r#   r#   r$   test_can_coerce_to}   s$   

zTestIrcheck.test_can_coerce_toc                 C  sd   t tdd}t|tdtdd}| ||ttdg}t| jddg |gd	}t	|t
|d
d d S )NrQ   rR   rZ   rX   r]   r?   r=   r>   rA   zFunc has a duplicate oprG   )r   r   r
   r   r2   r   rE   r   r<   r%   r   )r,   r`   ra   r1   r   r#   r#   r$   test_duplicate_op   s
   zTestIrcheck.test_duplicate_opc                 C  sh   |  ttdg}t|d}|  |g}t| jddg |gd}|dfg}t||}|g dks2J d S )Nr?   r)   r=   r>   rA   rN   )zdef func_1():zL0:z    goto L1z*  ERR: Invalid control operation target: 1)r2   r   rE   r   r   r<   r   )r,   rK   rO   rL   r   r"   	formattedr#   r#   r$   test_pprint   s   



zTestIrcheck.test_pprint)r   r   )r.   r/   r   r   r    )r3   r4   r5   r6   r   r   )__name__
__module____qualname__r-   r2   r<   rF   rJ   rM   rP   rV   rY   r\   rb   rg   rh   rj   r#   r#   r#   r$   r(   #   s    




	







r(   )r   r   r   r   r   r   )r   r   r   r   )'
__future__r   unittestmypyc.analysis.ircheckr   r   r   mypyc.ir.class_irr   mypyc.ir.func_irr   r   r	   mypyc.ir.opsr
   r   r   r   r   r   r   r   mypyc.ir.pprintr   mypyc.ir.rtypesr   r   r   r   r   r   r   r   r   r%   r&   rE   TestCaser(   r#   r#   r#   r$   <module>   s    (,

