
    X-Ph                       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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# ddZ$ddZ% ed e           Z& G d dej'                  Z(dS )    )annotationsN)FnErrorcan_coerce_tocheck_func_ir)ClassIR)FuncDeclFuncIRFuncSignature)	Assign
BasicBlockGotoIntegerLoadAddressLoadLiteralOpRegisterReturn)format_func)
	RInstanceRTypeRUnionbytes_rprimitiveint32_rprimitiveint64_rprimitivenone_rprimitiveobject_rprimitivepointer_rprimitivestr_rprimitivefnr	   errorr   returnNonec                6    t          |           }||gk    sJ d S Nr   )r   r    errorss      W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypyc/test/test_ircheck.pyassert_has_errorr(   "   s(    2FeW    c                (    t          |           rJ d S r$   r%   )r   s    r'   assert_no_errorsr+   '   s    R       r)   )rtypec                      e Zd ZddZddZdddZddZddZddZddZ	ddZ
ddZddZddZddZddZddZddZdS )TestIrcheckr!   r"   c                    d| _         d S )Nr   labelselfs    r'   setUpzTestIrcheck.setUp/   s    


r)   opslist[Op]r   c                \    | xj         dz  c_         t          | j                   }||_        |S )N   )r1   r   r5   )r3   r5   blocks      r'   basic_blockzTestIrcheck.basic_block2   s,    

a

4:&&	r)   Nnamestrret_typeRType | Noner   c           	     X    |t           }t          |d dt          g |                    S )Nmodule)argsr=   )r;   
class_namemodule_namesig)r   r   r
   )r3   r;   r=   s      r'   	func_declzTestIrcheck.func_decl8   s=    &H 2999	
 
 
 	
r)   c                    t          t          |                     d          g |                     t	          t
                    g          g                     d S )Nfunc_1r;   valuer5   declarg_regsblocks)r+   r	   rE   r:   r   
NONE_VALUEr2   s    r'   test_valid_fnzTestIrcheck.test_valid_fnB   si    ^^^22((f:.F.F.F-G(HHI  	
 	
 	
 	
 	
r)   c                    |                      g           }t          |                     d          g |g          }t          |t	          |d                     d S )NrG   rH   rL   zBlock not terminatedsourcedesc)r:   r	   rE   r(   r   )r3   r9   r   s      r'   %test_block_not_terminated_empty_blockz1TestIrcheck.test_block_not_terminated_empty_blockK   s]      $$X66UGTTTWE8NOOOPPPPPr)   c                   |                      t          t                    g          }|                      t          |          g          }t	          |                     d          g ||g          }t          |           d S )NrI   r0   rG   rH   rL   )r:   r   rP   r   r	   rE   r+   )r3   block_1block_2r   s       r'   test_valid_gotozTestIrcheck.test_valid_gotoP   s    ""F$<$<$<#=>>""Dw$7$7$7#899X66WV]L^___r)   c                0   |                      t          t                    g          }t          |          }|                      |g          }t	          |                     d          g |g          }t          |t          |d                     d S )NrI   r0   rG   rH   rL   #Invalid control operation target: 1rS   )r:   r   rP   r   r	   rE   r(   r   )r3   rX   gotorY   r   s        r'   test_invalid_gotozTestIrcheck.test_invalid_gotoV   s    ""F$<$<$<#=>>'"""""D6**X..9	
 
 
 	WD7\]]]^^^^^r)   c                   t          t          t          d                    }|                     |g          }t	          |                     d          g |g          }t          |t          |d                     d S )	Nr1typer;   rI   rG   rH   rL   z%Invalid op reference to register 'r1'rS   )r   r   r   r:   r	   rE   r(   r   r3   retr9   r   s       r'   test_invalid_register_sourcez(TestIrcheck.test_invalid_register_sourceb   s|    8tDDDEEE  #''X66UGTTTWC6]^^^_____r)   c                   t          t          dt                              }|                     |g          }t	          |                     d          g |g          }t          |t          |d                     d S )	NfoorJ   r,   rI   rG   rH   rL   z.Invalid op reference to op of type LoadLiteralrS   )r   r   r   r:   r	   rE   r(   r   rc   s       r'   test_invalid_op_sourcez"TestIrcheck.test_invalid_op_sourceh   s    ;U.IIIJJJ  #''X66UGTTTs)YZZZ	
 	
 	
 	
 	
r)   c                   t          t          dt                              }t          |                     dt
                    g |                     |g          g          }t          |t          |d                     d S )	N   rh   rI   rG   )r;   r=   rL   .Cannot coerce source type i32 to dest type i64rS   )	r   r   r   r	   rE   r   r:   r(   r   )r3   rd   r   s      r'   test_invalid_return_typez$TestIrcheck.test_invalid_return_typep   s    72BCCCDDDX8HII$$cU++,
 
 

 	s)YZZZ	
 	
 	
 	
 	
r)   c                ^   t          t          d          }t          |t          dt                              }t          t                    }t          |                     d          |g| 	                    ||g          g	          }t          |t          |d
                     d S )Nr`   ra   rk   rh   destsrcrI   rG   rH   rL   rl   rS   )r   r   r   r   r   r   rP   r	   rE   r:   r(   r   )r3   arg_regassignrd   r   s        r'   test_invalid_assignzTestIrcheck.test_invalid_assign{   s     0t<<<W'AQ*R*R*RSSS:&&&X..Y$$fc]334
 
 

 	v,\]]]	
 	
 	
 	
 	
r)   c           
        t          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          ||          sJ |D ]\  }}t          ||          rJ d S )NClscls)r;   rC   )	r   r   r   r   r   r   r   r   r   )r3   rw   valid_casesinvalid_casesrq   rp   s         r'   test_can_coerce_tozTestIrcheck.test_can_coerce_to   s   5e444/0^,.//%~677HV%5~$FGGHs^^./
 /0s^^^,-.
 % 	, 	,IC d++++++& 	0 	0IC$S$//////	0 	0r)   c                ^   t          t          d          }t          |t          dt                              }|                     ||t          t                    g          }t          |                     d          g |g	          }t          |t          |d
                     d S )Nr`   ra   rk   rh   ro   rI   rG   rH   rL   zFunc has a duplicate oprS   )r   r   r   r   r:   r   rP   r	   rE   r(   r   )r3   rr   rs   r9   r   s        r'   test_duplicate_opzTestIrcheck.test_duplicate_op   s     0t<<<W'AQ*R*R*RSSS  &&&z2J2J2J!KLLX66UGTTTWF9RSSSTTTTTr)   c                0   |                      t          t                    g          }t          |          }|                      |g          }t	          |                     d          g |g          }|dfg}t          ||          }|g dk    sJ d S )NrI   r0   rG   rH   rL   r\   )zdef func_1():zL0:z    goto L1z*  ERR: Invalid control operation target: 1)r:   r   rP   r   r	   rE   r   )r3   rX   r]   rY   r   r&   	formatteds          r'   test_pprintzTestIrcheck.test_pprint   s    ""F$<$<$<#=>>'"""""D6**X..9	
 
 
 >?@F++	 
 
 
 
 
 
 
 
 
r)   c                \   t          t          d          }t          t          d          }t          t          |          }t	          t          |                     d          g |                     |t          ||          t          t                    g          g                     d S )NxyrG   rH   rI   rK   rL   )r   r   r   r   r+   r	   rE   r:   r   r   rP   )r3   rxry	load_addrs       r'   #test_load_address_declares_registerz/TestIrcheck.test_load_address_declares_register   s    nc**(#.. 2B77	^^^22$$&r9(=(=vJ?W?W?WX %    
	
 
	
 
	
 
	
 
	
r)   )r!   r"   )r5   r6   r!   r   r$   )r;   r<   r=   r>   r!   r   )__name__
__module____qualname__r4   r:   rE   rQ   rV   rZ   r^   re   ri   rm   rt   rz   r|   r   r    r)   r'   r.   r.   .   sU             
 
 
 
 

 
 
 
Q Q Q Q
   
_ 
_ 
_ 
_` ` ` `
 
 
 
	
 	
 	
 	

 
 
 
0 0 0 0.U U U U
 
 
 
&
 
 
 
 
 
r)   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   r   mypyc.ir.pprintr   mypyc.ir.rtypesr   r   r   r   r   r   r   r   r   r   r(   r+   rP   TestCaser.   r   r)   r'   <module>r      s   " " " " " "  H H H H H H H H H H % % % % % % < < < < < < < < < <
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ( ' ' ' ' '                          
! ! ! ! WQo...
Y
 Y
 Y
 Y
 Y
(# Y
 Y
 Y
 Y
 Y
r)   