
    6 f/                       d dl mZ d dlZd dlmZ d dlmZmZ d dlm	Z	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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/m0Z0m1Z1 d d
l2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC d dlDmEZE d dlFmGZG d dlHmIZImJZJmKZKmLZL d dlMmNZN d dlOmPZPmQZQmRZR d dlSmTZT d dlUmVZV d dlWmXZX  G d dejY                  ZZ G d dejY                  Z[dS )    )annotationsN)assert_string_arrays_equal)EmitterEmitterContext)FunctionEmitterVisitorgenerate_native_function)PLATFORM_SIZE)ClassIR)FuncDeclFuncIRFuncSignature
RuntimeArg)	ERR_NEVERAssignAssignMulti
BasicBlockBoxBranchCallCallCCastComparisonOpDecRefExtendGetAttrGetElementPtrGotoIncRefIntegerIntOpLoadAddressLoadMemOpRegisterReturnSetAttrSetMemTupleGetUnboxUnreachableValue)generate_names_for_ir)RArray	RInstanceRStructRTupleRTypebool_rprimitivec_int_rprimitivedict_rprimitiveint32_rprimitiveint64_rprimitiveint_rprimitivelist_rprimitiveobject_rprimitivepointer_rprimitiveshort_int_rprimitive)compute_vtable)NameGenerator)dict_get_item_opdict_new_opdict_set_item_opdict_update_op)
int_neg_op)list_append_oplist_get_item_oplist_set_item_op)none_object_op)
binary_ops)
is_subtypec                      e Zd ZdZdVdZdVdZdVdZdVdZdVdZdVd	Z	dVd
Z
dVdZdVdZdVdZdVdZdVdZdVdZdVdZdVdZdVdZdVdZdVdZdVdZdVdZdVdZdVdZdVdZdVdZdVdZdVdZdVdZdVdZdVd Z dVd!Z!dVd"Z"dVd#Z#dVd$Z$dVd%Z%dVd&Z&dVd'Z'dVd(Z(dVd)Z)dVd*Z*dVd+Z+dVd,Z,dVd-Z-dVd.Z.dVd/Z/dVd0Z0dVd1Z1dVd2Z2dVd3Z3dVd4Z4dVd5Z5dVd6Z6dVd7Z7dVd8Z8dVd9Z9dVd:Z:dVd;Z;dVd<Z<dVd=Z=dVd>Z>dVd?Z?dVd@Z@dVdAZA	 dWdCdBdCdDdXdPZBdYdUZCdBS )ZTestFunctionEmitterVisitorz9Test generation of fragments of C from individual IR ops.returnNonec           	         g  _         d  fd} |dt                     _         |d	t                     _         |d
t                     _         |dt
                     _         |dt
                     _         |dt                     _	         |dt                     _
         |dt                     _         |dt                     _         |dt                     _         |dt                     _         |dt$                     _         |dt$                     _         |dt*                     _         |dt*                     _         |dt0                     _         |dt5          t          t          g                     _         |dt5          t5          t          t          g          t          g                     _        t;          dd          }t          t          t*          t$          d|_        ddg|_        tA          |           |g|_!         |dtE          |                     _#        tI          tK          dgg                     _&        d S )!Nnamestrrtyper1   rK   r$   c                \    t          ||           }j                            |           |S N)r$   	registersappend)rN   rP   regselfs      N/var/www/equiseq/venv/lib/python3.11/site-packages/mypyc/test/test_emitfunc.py	add_localz3TestFunctionEmitterVisitor.setUp.<locals>.add_localQ   s-    5$''CN!!#&&&J    nmkllloo2dbs1s2i32i32_1i64i64_1ptrtttAmod)xyi1i2rp   rq   r)rN   rO   rP   r1   rK   r$   )'rS   r7   rZ   r[   r\   r8   r]   r^   r9   r_   r`   r4   ra   r2   rb   r;   rc   rd   r5   re   rf   r6   rg   rh   r:   ri   r0   rj   rk   r
   
attributesbitmap_attrsr<   mror.   rr   r   r=   context)rV   rX   irs   `  rW   setUpz TestFunctionEmitterVisitor.setUpN   s<   )+	 	 	 	 	 	
 3//3//3//300)D/223 122)D"344300300)D"677)D"6779U$455Yw(899
9U$455Yw(899
9U$6773'H I IJJ)&&./!BCC_UVV
 
 S%   ""	
 
  ,r3	"..%meWI&>&>??rY   c                f    |                      t          t          d                    d           d S )N   zgoto CPyL2;)assert_emitr   r   rV   s    rW   	test_gotoz$TestFunctionEmitterVisitor.test_gotox   s,    jmm,,m<<<<<rY   c                n    t          d          }|                     t          |          d|           d S )Nrz    
next_block)r   r{   r   )rV   r   s     rW   test_goto_next_blockz/TestFunctionEmitterVisitor.test_goto_next_block{   s6    ]]
j))2*EEEEErY   c                V    |                      t          | j                  d           d S )Nzreturn cpy_r_m;)r{   r%   r[   r|   s    rW   test_returnz&TestFunctionEmitterVisitor.test_return   s'    ):;;;;;rY   c           	         |                      t          | j        t          d                    d           |                      t          | j        t          dt
                              d           d S )N   zcpy_r_n = 10;zcpy_r_i32 = 5;)r{   r   rZ   r   re   r3   r|   s    rW   test_integerz'TestFunctionEmitterVisitor.test_integer   s^    

33_EEE'!5E*F*FGGIYZZZZZrY   c                Z    |                      t          | j        dd          d           d S )N   r   zcpy_r_r0 = cpy_r_t.f1;)r{   r(   rj   r|   s    rW   test_tuple_getz)TestFunctionEmitterVisitor.test_tuple_get   s-    $&!Q//1IJJJJJrY   c                x    |                      t          t          j        t          j        d          d           d S )Nr   z'cpy_r_r0 = (PyObject *)&_Py_NoneStruct;)r{   r!   rF   typesrcr|   s    rW   test_load_Nonez)TestFunctionEmitterVisitor.test_load_None   s<    +^-?CC5	
 	
 	
 	
 	
rY   c                b    |                      t          | j        | j                  d           d S )Nzcpy_r_m = cpy_r_n;)r{   r   r[   rZ   r|   s    rW   test_assign_intz*TestFunctionEmitterVisitor.test_assign_int   s-    //1EFFFFFrY   c                V    |                      d| j        | j        | j        d           d S )N+z+cpy_r_r0 = CPyTagged_Add(cpy_r_m, cpy_r_k);assert_emit_binary_oprZ   r[   r\   r|   s    rW   test_int_addz'TestFunctionEmitterVisitor.test_int_add   s6    "")V	
 	
 	
 	
 	
rY   c                V    |                      d| j        | j        | j        d           d S )N-z0cpy_r_r0 = CPyTagged_Subtract(cpy_r_m, cpy_r_k);r   r|   s    rW   test_int_subz'TestFunctionEmitterVisitor.test_int_sub   s6    "")[	
 	
 	
 	
 	
rY   c                    |                      t          t          j        | j        gt          j        t          j        t          j        t          j        t          j        d          d           d S )N7   z%cpy_r_r0 = CPyTagged_Negate(cpy_r_m);)	r{   r   rB   c_function_namer[   return_typestealsis_borrowed
error_kindr|   s    rW   test_int_negz'TestFunctionEmitterVisitor.test_int_neg   sd    *&!&&%	 	 4	
 	
 	
 	
 	
rY   c           	     T   |                      t          | j        t          d          t          d          t          j                  d           t          | j        t          d          t          d          t          j                  }d|_        |                      |d           d S )N   	   zif (cpy_r_b) {
                                goto CPyL8;
                            } else
                                goto CPyL9;
                         Tzif (!cpy_r_b) {
                                goto CPyL8;
                            } else
                                goto CPyL9;
                         r{   r   rb   r   BOOLnegatedrV   rb   s     rW   test_branchz&TestFunctionEmitterVisitor.test_branch   s    46:a==*Q--EE	
 	
 	
 46:a==*Q--EE		
 	
 	
 	
 	
rY   c                h   t          d          }t          | j        t          d          |t          j                  }|                     |d|           t          d          }t          | j        t          d          |t          j                  }d|_        |                     |d|           d S )Nr   r   zif (cpy_r_b) goto CPyL8;r   Tzif (!cpy_r_b) goto CPyL8;r   r   rb   r   r{   r   rV   r   rb   s      rW   test_branch_no_elsez.TestFunctionEmitterVisitor.test_branch_no_else   s    ]]
46:a==*fkBB:zRRR]]
46:a==*fkBB	;
SSSSSrY   c                h   t          d          }t          | j        |t          d          t          j                  }|                     |d|           t          d          }t          | j        |t          d          t          j                  }d|_        |                     |d|           d S )Nr   rz   zif (!cpy_r_b) goto CPyL2;r   Tzif (cpy_r_b) goto CPyL2;r   r   s      rW   test_branch_no_else_negatedz6TestFunctionEmitterVisitor.test_branch_no_else_negated   s    ]]
46:z!}}fkBB;
SSS]]
46:z!}}fkBB	:zRRRRRrY   c                X   t          | j        t          d          t          d          t           j                  }|                     |d           t          | j        t          d          t          d          t           j                  }d|_        |                     |d           d S )Nr   r   zif (cpy_r_b == 2) {
                                goto CPyL8;
                            } else
                                goto CPyL9;
                         Tzif (cpy_r_b != 2) {
                                goto CPyL8;
                            } else
                                goto CPyL9;
                         )r   rb   r   IS_ERRORr{   r   r   s     rW   test_branch_is_errorz/TestFunctionEmitterVisitor.test_branch_is_error   s    46:a==*Q--II	
 	
 	
 46:a==*Q--II		
 	
 	
 	
 	
rY   c                J   t          d          }t          | j        |t          d          t          j                  }|                     |d|           t          | j        |t          d          t          j                  }d|_        |                     |d|           d S )Nr   r   zif (cpy_r_b != 2) goto CPyL9;r   Tzif (cpy_r_b == 2) goto CPyL9;)r   r   rb   r   r{   r   r   s      rW   test_branch_is_error_next_blockz:TestFunctionEmitterVisitor.test_branch_is_error_next_block   s    ]]
46:z!}}foFF?JWWW46:z!}}foFF	?JWWWWWrY   c           	        |                      t          | j        t          d          t          d          t          j        d          d           t          d          }|                      t          | j        t          d          |t          j        d          d|           t          d          }t          | j        |t          d          t          j        d          }|                      |d|           t          d          }t          | j        |t          d          t          j        d          }d|_        |                      |d	|           d S )
Nr   r   Trarezif (unlikely(cpy_r_b)) {
                                goto CPyL8;
                            } else
                                goto CPyL9;
                         z"if (unlikely(cpy_r_b)) goto CPyL8;r   z!if (likely(!cpy_r_b)) goto CPyL9;z if (likely(cpy_r_b)) goto CPyL9;r   r   s      rW   test_branch_rarez+TestFunctionEmitterVisitor.test_branch_rare   s7   46:a==*Q--4PPP	
 	
 	
  ]]
46:a==*fkMMM4! 	 	
 	
 	

  ]]
46:z!}}fkMMMCPZ[[[]]
46:z!}}fkMMM	BzZZZZZrY   c                    t          dd dt          t          dt                    gt                              }|                     t          || j        gd          d           d S )Nmyfnrm   r[   r   z cpy_r_r0 = CPyDef_myfn(cpy_r_m);)r   r   r   r7   r{   r   r[   rV   decls     rW   	test_callz$TestFunctionEmitterVisitor.test_call  sa    D%
30O0O/PR`!a!a
 
 	dTVHb113UVVVVVrY   c                   t          dd dt          t          dt                    t          dt                    gt                              }|                     t          || j        | j        gd          d           d S )Nr   rm   r[   rZ   r   z)cpy_r_r0 = CPyDef_myfn(cpy_r_m, cpy_r_k);)r   r   r   r7   r{   r   r[   r\   r   s     rW   test_call_two_argsz-TestFunctionEmitterVisitor.test_call_two_args  s    C00*S.2Q2QRTb 	
 
 	',,.Y	
 	
 	
 	
 	
rY   c                    |                      t          | j                  d           |                      t          | j                  dd           d S )NzCPy_INCREF(cpy_r_o);Tr   )r{   r   r_   r|   s    rW   test_inc_refz'TestFunctionEmitterVisitor.test_inc_ref  K    )?@@@)?dKKKKKrY   c                    |                      t          | j                  d           |                      t          | j                  dd           d S )NzCPy_DECREF(cpy_r_o);zCPy_DecRef(cpy_r_o);Tr   )r{   r   r_   r|   s    rW   test_dec_refz'TestFunctionEmitterVisitor.test_dec_ref  r   rY   c                    |                      t          | j                  d           |                      t          | j                  dd           d S )NzCPyTagged_INCREF(cpy_r_m);zCPyTagged_IncRef(cpy_r_m);Tr   )r{   r   r[   r|   s    rW   test_inc_ref_intz+TestFunctionEmitterVisitor.test_inc_ref_int   K    )EFFF)EDQQQQQrY   c                    |                      t          | j                  d           |                      t          | j                  dd           d S )NzCPyTagged_DECREF(cpy_r_m);zCPyTagged_DecRef(cpy_r_m);Tr   )r{   r   r[   r|   s    rW   test_dec_ref_intz+TestFunctionEmitterVisitor.test_dec_ref_int$  r   rY   c                V    |                      t          | j                  d           d S )NzCPyTagged_DECREF(cpy_r_t.f0);)r{   r   rj   r|   s    rW   test_dec_ref_tuplez-TestFunctionEmitterVisitor.test_dec_ref_tuple(  s'    )HIIIIIrY   c                V    |                      t          | j                  d           d S )Nz!CPyTagged_DECREF(cpy_r_tt.f0.f0);)r{   r   rk   r|   s    rW   test_dec_ref_tuple_nestedz4TestFunctionEmitterVisitor.test_dec_ref_tuple_nested+  s'    *MNNNNNrY   c                    |                      t          t          j        | j        | j        gt          j        t          j        t          j        t          j	        d          d           d S )Nr   z-cpy_r_r0 = CPyList_GetItem(cpy_r_m, cpy_r_k);)
r{   r   rD   r   r[   r\   r   r   r   r   r|   s    rW   test_list_get_itemz-TestFunctionEmitterVisitor.test_list_get_item.  sd     0  , ' , +  @	
 	
 	
 	
 	
rY   c                    |                      t          t          j        | j        | j        | j        gt          j        t          j        t          j	        t          j
        d          d           d S )Nr   z6cpy_r_r0 = CPyList_SetItem(cpy_r_l, cpy_r_n, cpy_r_o);)r{   r   rE   r   r]   rZ   r_   r   r   r   r   r|   s    rW   test_list_set_itemz-TestFunctionEmitterVisitor.test_list_set_item<  sh     0( , ' , +  I	
 	
 	
 	
 	
rY   c                V    |                      t          | j                  d           d S )Nz,cpy_r_r0 = CPyTagged_StealAsObject(cpy_r_n);)r{   r   rZ   r|   s    rW   test_box_intz'TestFunctionEmitterVisitor.test_box_intJ  s'    TV&XYYYYYrY   c                d    |                      t          | j        t          d          d           d S )Nr   a  if (likely(PyLong_Check(cpy_r_m)))
                                cpy_r_r0 = CPyTagged_FromObject(cpy_r_m);
                            else {
                                CPy_TypeError("int", cpy_r_m); cpy_r_r0 = CPY_INT_TAG;
                            }
                         )r{   r)   r[   r7   r|   s    rW   test_unbox_intz)TestFunctionEmitterVisitor.test_unbox_intM  s:    $&."--	
 	
 	
 	
 	
rY   c                V    |                      t          | j                  d           d S )Nz*cpy_r_r0 = PyLong_FromLongLong(cpy_r_i64);)r{   r   rg   r|   s    rW   test_box_i64z'TestFunctionEmitterVisitor.test_box_i64X  s'    TX(XYYYYYrY   c                d    |                      t          | j        t          d          d           d S )Nr   z$cpy_r_r0 = CPyLong_AsInt64(cpy_r_o);)r{   r)   r_   r6   r|   s    rW   test_unbox_i64z)TestFunctionEmitterVisitor.test_unbox_i64[  s9    $&*B//1[	
 	
 	
 	
 	
rY   c                    |                      t          t          j        | j        | j        gt          j        t          j        t          j        t          j	        d          d           d S )Nr   z+cpy_r_r0 = PyList_Append(cpy_r_l, cpy_r_o);)
r{   r   rC   r   r]   r_   r   r   r   r   r|   s    rW   test_list_appendz+TestFunctionEmitterVisitor.test_list_append`  sc    . *%*)  >	
 	
 	
 	
 	
rY   c                Z    |                      t          | j        dd          d           d S )Nro   r   a#  cpy_r_r0 = ((mod___AObject *)cpy_r_r)->_y;
               if (unlikely(cpy_r_r0 == CPY_INT_TAG)) {
                   PyErr_SetString(PyExc_AttributeError, "attribute 'y' of 'A' undefined");
               } else {
                   CPyTagged_INCREF(cpy_r_r0);
               }
            r{   r   rr   r|   s    rW   test_get_attrz(TestFunctionEmitterVisitor.test_get_attrn  s:    DFC##		
 		
 		
 		
 		
rY   c                Z    |                      t          | j        dd          d           d S )Nrn   r   zcpy_r_r0 = ((mod___AObject *)cpy_r_r)->_x;
               if (unlikely(cpy_r_r0 == 2)) {
                   PyErr_SetString(PyExc_AttributeError, "attribute 'x' of 'A' undefined");
               }
            r   r|   s    rW   test_get_attr_non_refcountedz7TestFunctionEmitterVisitor.test_get_attr_non_refcountedz  s:    DFC##	
 	
 	
 	
 	
rY   c                    t          | j        dd          }t          |t          d          t          d          t          j                  }d|_        |                     |d|d           d S )	Nro   r   r   r   foobar{   aD              cpy_r_r0 = ((mod___AObject *)cpy_r_r)->_y;
            if (unlikely(cpy_r_r0 == CPY_INT_TAG)) {
                CPy_AttributeError("prog.py", "foobar", "A", "y", 123, CPyStatic_prog___globals);
                goto CPyL8;
            }
            CPyTagged_INCREF(cpy_r_r0);
            goto CPyL9;
            T)next_branch	skip_next)r   rr   r   r   r   traceback_entryr{   rV   opbranchs      rW   test_get_attr_mergedz/TestFunctionEmitterVisitor.test_get_attr_merged  su    TVS!$$JqMM:a==&/JJ!0  	 	
 	
 	
 	
 	
rY   c                Z    |                      t          | j        dd          d           d S )Nrp   r   a  cpy_r_r0 = ((mod___AObject *)cpy_r_r)->_i1;
               if (unlikely(cpy_r_r0 == -113) && !(((mod___AObject *)cpy_r_r)->bitmap & 1)) {
                   PyErr_SetString(PyExc_AttributeError, "attribute 'i1' of 'A' undefined");
               }
            r   r|   s    rW   test_get_attr_with_bitmapz4TestFunctionEmitterVisitor.test_get_attr_with_bitmap  s:    DFD!$$	
 	
 	
 	
 	
rY   c                f    |                      t          | j        d| j        d          d           d S )Nro   r   zif (((mod___AObject *)cpy_r_r)->_y != CPY_INT_TAG) {
                   CPyTagged_DECREF(((mod___AObject *)cpy_r_r)->_y);
               }
               ((mod___AObject *)cpy_r_r)->_y = cpy_r_m;
               cpy_r_r0 = 1;
            )r{   r&   rr   r[   r|   s    rW   test_set_attrz(TestFunctionEmitterVisitor.test_set_attr  s>    DFC++	
 	
 	
 	
 	
rY   c                f    |                      t          | j        d| j        d          d           d S )Nrn   r   zS((mod___AObject *)cpy_r_r)->_x = cpy_r_b;
               cpy_r_r0 = 1;
            )r{   r&   rr   rb   r|   s    rW   test_set_attr_non_refcountedz7TestFunctionEmitterVisitor.test_set_attr_non_refcounted  s>    DFC++	
 	
 	
 	
 	
rY   c                    t          | j        d| j        d          }t          |_        |                     |d           d S )Nro   r   zif (((mod___AObject *)cpy_r_r)->_y != CPY_INT_TAG) {
                   CPyTagged_DECREF(((mod___AObject *)cpy_r_r)->_y);
               }
               ((mod___AObject *)cpy_r_r)->_y = cpy_r_m;
            )r&   rr   r[   r   r   r{   rV   r   s     rW   test_set_attr_no_errorz1TestFunctionEmitterVisitor.test_set_attr_no_error  sJ    TVS$&!,,!	
 	
 	
 	
 	
rY   c                    t          | j        d| j        d          }t          |_        |                     |d           d S )Nrn   r   z6((mod___AObject *)cpy_r_r)->_x = cpy_r_b;
            )r&   rr   rb   r   r   r{   r   s     rW   %test_set_attr_non_refcounted_no_errorz@TestFunctionEmitterVisitor.test_set_attr_non_refcounted_no_error  sJ    TVS$&!,,!	
 	
 	
 	
 	
rY   c                    |                      t          | j        d| j        d          d           |                      t          | j        d| j        d          d           d S )Nrp   r   if (unlikely(cpy_r_i64 == -113)) {
                   ((mod___AObject *)cpy_r_r)->bitmap |= 1;
               }
               ((mod___AObject *)cpy_r_r)->_i1 = cpy_r_i64;
               cpy_r_r0 = 1;
            rq   zif (unlikely(cpy_r_i32 == -113)) {
                   ((mod___AObject *)cpy_r_r)->bitmap |= 2;
               }
               ((mod___AObject *)cpy_r_r)->_i2 = cpy_r_i32;
               cpy_r_r0 = 1;
            )r{   r&   rr   rg   re   r|   s    rW   test_set_attr_with_bitmapz4TestFunctionEmitterVisitor.test_set_attr_with_bitmap  st     	DFD$(A..	
 	
 	
 	DFD$(A..	
 	
 	
 	
 	
rY   c                x    t          | j        d| j        d          }d|_        |                     |d           d S )Nrp   r   Tr   )r&   rr   rg   is_initr{   r   s     rW   test_set_attr_init_with_bitmapz9TestFunctionEmitterVisitor.test_set_attr_init_with_bitmap  sJ    TVT48Q//
	
 	
 	
 	
 	
rY   c                    |                      t          t          j        | j        | j        gt          j        t          j        t          j        t          j	        d          d           d S )Nr   z.cpy_r_r0 = CPyDict_GetItem(cpy_r_d, cpy_r_o2);)
r{   r   r>   r   ra   r`   r   r   r   r   r|   s    rW   test_dict_get_itemz-TestFunctionEmitterVisitor.test_dict_get_item  sd     0! , ' , +  A	
 	
 	
 	
 	
rY   c                    |                      t          t          j        | j        | j        | j        gt          j        t          j        t          j	        t          j
        d          d           d S )Nr   z7cpy_r_r0 = CPyDict_SetItem(cpy_r_d, cpy_r_o, cpy_r_o2);)r{   r   r@   r   ra   r_   r`   r   r   r   r   r|   s    rW   test_dict_set_itemz-TestFunctionEmitterVisitor.test_dict_set_item  sh     0) , ' , +  J	
 	
 	
 	
 	
rY   c                    |                      t          t          j        | j        | j        gt          j        t          j        t          j        t          j	        d          d           d S )Nr   z,cpy_r_r0 = CPyDict_Update(cpy_r_d, cpy_r_o);)
r{   r   rA   r   ra   r_   r   r   r   r   r|   s    rW   test_dict_updatez+TestFunctionEmitterVisitor.test_dict_update  sc    . *%*)  ?	
 	
 	
 	
 	
rY   c                    |                      t          t          j        g t          j        t          j        t          j        t          j        d          d           d S )Nr   zcpy_r_r0 = PyDict_New();)r{   r   r?   r   r   r   r   r   r|   s    rW   test_new_dictz(TestFunctionEmitterVisitor.test_new_dict  sZ    +'"'&  +	
 	
 	
 	
 	
rY   c                V    |                      d| j        | j        | j        d           d S )Ninz-cpy_r_r0 = PyDict_Contains(cpy_r_d, cpy_r_o);)r   rb   r_   ra   r|   s    rW   test_dict_containsz-TestFunctionEmitterVisitor.test_dict_contains$  s6    ""$&$&$&*]	
 	
 	
 	
 	
rY   c           	        |                      t          t          | j        | j        t          j        d          d           |                      t          t          | j        | j        t          j        d          d           |                      t          t          | j        | j        t          j        d          d           |                      t          t          | j        | j        t          j        d          d           |                      t          t          | j        | j        t          j	        d          d           |                      t          t          | j        | j        t          j
        d          d           |                      t          t          | j        | j        t          j        d          d           |                      t          t          | j        | j        t          j        d          d	           |                      t          t          | j        | j        t          j        d          d
           |                      t          t          | j        | j        t          j        d          d           |                      t          t          | j        | j        t          j        d          d           d S )Nr   zcpy_r_r0 = cpy_r_s1 + cpy_r_s2;zcpy_r_r0 = cpy_r_s1 - cpy_r_s2;zcpy_r_r0 = cpy_r_s1 * cpy_r_s2;zcpy_r_r0 = cpy_r_s1 / cpy_r_s2;zcpy_r_r0 = cpy_r_s1 % cpy_r_s2;zcpy_r_r0 = cpy_r_s1 & cpy_r_s2;zcpy_r_r0 = cpy_r_s1 | cpy_r_s2;zcpy_r_r0 = cpy_r_s1 ^ cpy_r_s2;z cpy_r_r0 = cpy_r_s1 << cpy_r_s2;z8cpy_r_r0 = (Py_ssize_t)cpy_r_s1 >> (Py_ssize_t)cpy_r_s2;z$cpy_r_r0 = cpy_r_i64 >> cpy_r_i64_1;)r{   r    r;   rc   rd   ADDSUBMULDIVMODANDORXOR
LEFT_SHIFTRIGHT_SHIFTrg   rh   r|   s    rW   test_int_opz&TestFunctionEmitterVisitor.test_int_op)  sk   &%)QGG1	
 	
 	
 	&%)QGG1	
 	
 	
 	&%)QGG1	
 	
 	
 	&%)QGG1	
 	
 	
 	&%)QGG1	
 	
 	
 	&%)QGG1	
 	
 	
 	&%(AFF1	
 	
 	
 	&%)QGG1	
 	
 	
 	&%:JANN2	
 	
 	
 	&%:KQOOJ	
 	
 	
 	&$*e>OQRSS6	
 	
 	
 	
 	
rY   c                   |                      t          | j        | j        t          j        d          d           |                      t          | j        | j        t          j        d          d           |                      t          | j        | j        t          j        d          d           |                      t          | j        | j        t          j	        d          d           |                      t          | j        | j        t          j	        d          d           |                      t          | j        | j        t          j	        d          d           |                      t          | j
        | j        t          j        d          d           |                      t          | j
        | j        t          j        d          d	           d S )
Nr   z7cpy_r_r0 = (Py_ssize_t)cpy_r_s1 < (Py_ssize_t)cpy_r_s2;z#cpy_r_r0 = cpy_r_i32 < cpy_r_i32_1;z#cpy_r_r0 = cpy_r_i64 < cpy_r_i64_1;zcpy_r_r0 = cpy_r_s1 < cpy_r_s2;z7cpy_r_r0 = (uint32_t)cpy_r_i32 < (uint32_t)cpy_r_i32_1;z7cpy_r_r0 = (uint64_t)cpy_r_i64 < (uint64_t)cpy_r_i64_1;zcpy_r_r0 = cpy_r_o == cpy_r_o2;zcpy_r_r0 = cpy_r_o != cpy_r_o2;)r{   r   rc   rd   SLTre   rf   rg   rh   ULTr_   r`   EQNEQr|   s    rW   test_comparison_opz-TestFunctionEmitterVisitor.test_comparison_opW  s   $'<+;Q??I	
 	
 	
 	4:|/?CC5	
 	
 	
 	4:|/?CC5	
 	
 	

 	$'<+;Q??1	
 	
 	
 	4:|/?CCI	
 	
 	
 	4:|/?CCI	
 	
 	
 	,/1==1	
 	
 	
 	,*:A>>1	
 	
 	
 	
 	
rY   c                b    |                      t          t          | j                  d           d S )Nzcpy_r_r0 = *(char *)cpy_r_ptr;)r{   r"   r2   ri   r|   s    rW   test_load_memz(TestFunctionEmitterVisitor.test_load_mem}  s+    $(;;=abbbbbrY   c                n    |                      t          t          | j        | j                  d           d S )Nz*(char *)cpy_r_ptr = cpy_r_b;)r{   r'   r2   ri   rb   r|   s    rW   test_set_memz'TestFunctionEmitterVisitor.test_set_mem  s:    ?DHdf557Z	
 	
 	
 	
 	
rY   c                L   t          dg dt          t          t          g          }|                     t          | j        |d          d           |                     t          | j        |d          d           |                     t          | j        |d          d           d S )	NFoo)rb   re   rg   rb   z(cpy_r_r0 = (CPyPtr)&((Foo *)cpy_r_o)->b;re   z*cpy_r_r0 = (CPyPtr)&((Foo *)cpy_r_o)->i32;rg   z*cpy_r_r0 = (CPyPtr)&((Foo *)cpy_r_o)->i64;)r/   r2   r5   r6   r{   r   r_   )rV   rr   s     rW   test_get_element_ptrz/TestFunctionEmitterVisitor.test_get_element_ptr  s    &&&:JL\(]
 
 	$&!S))+Y	
 	
 	
 	$&!U++-]	
 	
 	
 	$&!U++-]	
 	
 	
 	
 	
rY   c                X    |                      t          t          d          d           d S )NPyDict_Typez$cpy_r_r0 = (PyObject *)&PyDict_Type;)r{   r!   r9   r|   s    rW   test_load_addressz,TestFunctionEmitterVisitor.test_load_address  s5    )=996	
 	
 	
 	
 	
rY   c                    t          t          d          }t          |d          }| j                            |           |                     t          || j        | j        g          d           d S )Nrz   az+PyObject *cpy_r_a[2] = {cpy_r_o, cpy_r_o2};)	r-   r9   r$   rS   rT   r{   r   r_   r`   )rV   rj   r$  s      rW   test_assign_multiz,TestFunctionEmitterVisitor.test_assign_multi  sr    $a((Qa   DFDG,--/`	
 	
 	
 	
 	
rY   c           	        t          t          d          }|                     t          |t	          dt                              d           |                     t          |t	          dt                              d           d S )Nr$  l        zcpy_r_a = 2147483648LL;izcpy_r_a = 2147483647;r$   r6   r{   r   r   rV   r$  s     rW   test_long_unsignedz-TestFunctionEmitterVisitor.test_long_unsigned  s    %s++1gg'78899;X	
 	
 	
 	1gm-=>>??A\	
 	
 	
 	
 	
rY   c           	        t          t          d          }|                     t          |t	          dt                              d           |                     t          |t	          dt                              d           d S )Nr$  i  zcpy_r_a = -2147483647;i   zcpy_r_a = -2147483648LL;r'  r(  s     rW   test_long_signedz+TestFunctionEmitterVisitor.test_long_signed  s    %s++1gn.>??@@B^	
 	
 	
 	1gj*:;;<<>\	
 	
 	
 	
 	
rY   c                    t          | j        t          d          }t          d          }t	          |t          d          |t          j                  }d|_        |                     |d||d           d S )Nr   r   r   r   zif (likely(PyDict_Check(cpy_r_r)))
    cpy_r_r0 = cpy_r_r;
else {
    CPy_TypeErrorTraceback("prog.py", "foobar", 123, CPyStatic_prog___globals, "dict", cpy_r_r);
    goto CPyL8;
}
Tr   r   r   )r   rr   r4   r   r   r   r   r{   rV   r   r   r   s       rW   test_cast_and_branch_mergez5TestFunctionEmitterVisitor.test_cast_and_branch_merge  s}    $&/1--]]
JqMM:vGG!0 " 	 	
 	
 	
 	
 	
rY   c                   t          | j        t          d          }t          |t	          d          t	          d          t          j                  }d|_        |                     |dt	          d          |d           d S )	Nr   r   r   r               if (likely(PyDict_Check(cpy_r_r)))
                cpy_r_r0 = cpy_r_r;
            else {
                CPy_TypeError("dict", cpy_r_r);
                cpy_r_r0 = NULL;
            }
            
   Fr-  )r   rr   r4   r   r   r   r   r{   r   s      rW   test_cast_and_branch_no_merge_1z:TestFunctionEmitterVisitor.test_cast_and_branch_no_merge_1  s~    $&/1--JqMM:a==&/JJ!0 ""~~ 	 	
 	
 	
 	
 	
rY   c                    t          | j        t          d          }t          d          }t	          |t          d          |t          j                  }d|_        d|_        |                     |d||           d S )Nr   r   r   Tr   r1  r   r   )	r   rr   r4   r   r   r   r   r   r{   r.  s       rW   test_cast_and_branch_no_merge_2z:TestFunctionEmitterVisitor.test_cast_and_branch_no_merge_2  s    $&/1--]]
JqMM:vGG!0 " 	 	
 	
 	
 	
 	
rY   c                    t          | j        t          d          }t          d          }t	          |t          d          |t          j                  }d|_        |                     |d||           d S )Nr   r   r   r   r1  r5  )r   rr   r4   r   r   r   r   r{   r.  s       rW   test_cast_and_branch_no_merge_3z:TestFunctionEmitterVisitor.test_cast_and_branch_no_merge_3  sz    $&/1--]]
JqMM:v{CC!0 " 	 	
 	
 	
 	
 	
rY   c                    t          | j        t          d          }t          d          }t	          |t          d          |t          j                  }|                     |d||           d S )Nr   r   r   r1  r5  )r   rr   r4   r   r   r   r{   r.  s       rW   test_cast_and_branch_no_merge_4z:TestFunctionEmitterVisitor.test_cast_and_branch_no_merge_4  sr    $&/1--]]
JqMM:vGG " 	 	
 	
 	
 	
 	
rY   c                x   t          t          d          }|                     t          |t          d          d           |                     t          |t          d          d           t
          dk    r`|                     t          | j        t          d          d           |                     t          | j        t          d          d	           t
          d
k    rX|                     t          |t          d          d           |                     t          |t          d          d           d S d S )Nr$  T)signedzcpy_r_r0 = cpy_r_a;Fzcpy_r_r0 = (uint32_t)cpy_r_a;   zcpy_r_r0 = (Py_ssize_t)cpy_r_n;zcpy_r_r0 = cpy_r_n;r   )r$   r5   r{   r   r6   r	   rZ   r7   r(  s     rW   test_extendz&TestFunctionEmitterVisitor.test_extend  sH   %s++#3DAAAC\]]]1&u5557Z	
 	
 	
 Atv/===5   tv/>>>@Y   AVA~dCCCE^___q.7779\     rY   NF)r   r   r   r   r#   expectedrO   r   BasicBlock | Noner   boolr   Branch | Noner   c                  t          d          }|j                            |           t          | j        |g          }t          | j        |          }	t          | j        |          }
g |	_        g |
_        t          |	|
dd          }||_	        ||_
        |r
||g|_        n|g|_        d|_        |                    |           |
j        |	j        z   }d |D             }t          d |D                       sJ d |D             }|                                sg }n'|                                                    d          }d |D             }t#          ||d	
           |r|j        dk    sJ d S |j        dk    sJ d S )Nr   prog.pyprogc                8    g | ]}|                     d           S  strip.0lines     rW   
<listcomp>z:TestFunctionEmitterVisitor.assert_emit.<locals>.<listcomp>D  s"    :::D

3:::rY   c              3  @   K   | ]}|                     d           V  dS )
N)endswithrK  s     rW   	<genexpr>z9TestFunctionEmitterVisitor.assert_emit.<locals>.<genexpr>E  s.      @@44==&&@@@@@@rY   c                8    g | ]}|                     d           S )rP  )rstriprK  s     rW   rN  z:TestFunctionEmitterVisitor.assert_emit.<locals>.<listcomp>F  s$    CCCdD))CCCrY   rP  c                8    g | ]}|                     d           S rG  rI  rK  s     rW   rN  z:TestFunctionEmitterVisitor.assert_emit.<locals>.<listcomp>K  s"    EEEd$**S//EEErY   zGenerated code unexpectedmsgr   )r   opsrT   r,   rS   r   rv   	fragmentsr   r   r   op_indexacceptallrJ  rT  splitr   )rV   r   r?  r   r   r   r   blockvalue_namesemitterdeclarationsvisitorfragsactual_linesexpected_liness                  rW   r{   z&TestFunctionEmitterVisitor.assert_emit'  s    1	+DNUGDD$,44t|[99!#(,	6RR' 	{+GKK$GK
		'&)::::E:::@@<@@@@@@@@CClCCC~~ 	;NN%__..44T::NEEnEEE"><E`aaaa 	)#q((((((#q((((((rY   destr+   leftrightc                   |t           v rt           |         }|D ]}t          |j        |j        d                   rt          |j        |j        d                   rc||g|j        fd|j        D             |                     t          |j        |j        |j	        |j
        |j        d          |            d S d S J d            )Nr   r   c                     g | ]
}|         S  rk  )rL  iargss     rW   rN  zDTestFunctionEmitterVisitor.assert_emit_binary_op.<locals>.<listcomp>]  s    ???AQ???rY   r   FzCould not find matching op)rG   rH   r   	arg_typesorderingr{   r   r   r   r   r   r   )	rV   r   rf  rg  rh  r?  rX  descrm  s	           @rW   r   z0TestFunctionEmitterVisitor.assert_emit_binary_opR  s    R.C  di):;; 
Jq 1A A  !%=D}0???????$$ 0  , K , O  !   FF' * 76665rY   rK   rL   rR   )r   r#   r?  rO   r   r@  r   rA  r   rB  r   rA  rK   rL   )r   rO   rf  r+   rg  r+   rh  r+   r?  rO   rK   rL   )D__name__
__module____qualname____doc__rx   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   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r"  r%  r)  r+  r/  r3  r6  r8  r:  r>  r{   r   rk  rY   rW   rJ   rJ   K   s       CC(@ (@ (@ (@T= = = =F F F F< < < <[ [ [ [K K K K
 
 
 
G G G G
 
 
 


 
 
 


 
 
 

 
 
 
(T T T TS S S S
 
 
 
*X X X X[ [ [ [.W W W W
 
 
 
L L L LL L L LR R R RR R R RJ J J JO O O O
 
 
 

 
 
 
Z Z Z Z	
 	
 	
 	
Z Z Z Z
 
 
 


 
 
 


 

 

 


 
 
 

 
 
 
&
 
 
 
	
 	
 	
 	

 
 
 


 

 

 


 
 
 

 
 
 
,
 
 
 

 
 
 

 
 
 

 
 
 

 
 
 

 
 
 

,
 ,
 ,
 ,
\$
 $
 $
 $
Lc c c c
 
 
 


 
 
 

 
 
 

 
 
 

 
 
 

 
 
 

 
 
 
(
 
 
 
&
 
 
 
(
 
 
 
&
 
 
 
$   0 )-	)) %))) )) )) )) )) ))V7 7 7 7 7 7rY   rJ   c                  &    e Zd ZddZddZddZdS )TestGenerateFunctionrK   rL   c                    t          dt                    | _        t          t          d          | _        t          d          | _        d S )Nargr   )r   r7   ry  r$   rU   r   r^  r|   s    rW   rx   zTestGenerateFunction.setUpp  s5    e^44NE22]]


rY   c                   | j         j                            t          | j                             t          t          dd dt          | j        gt                              | j        g| j         g          }t          |j        |j                  }t          t          t          dgg                    |          }t!          ||dd           |j        }t%          g d|d           d S )Nmyfuncrm   rD  rE  )z/CPyTagged CPyDef_myfunc(CPyTagged cpy_r_arg) {
z    return cpy_r_arg;
}
Generated code invalidrV  )r^  rX  rT   r%   rU   r   r   r   ry  r7   r,   arg_regsblocksr   r   r=   r   rY  r   )rV   fnr_  r`  results        rW   test_simplez TestGenerateFunction.test_simpleu  s    
fTX..///XtUM48*n,U,UVVXJZL
 

 ,BKCC.y)A)ABBKPP Wi@@@""bbb(	
 	
 	
 	
 	
 	
rY   c                n   t          t                    }t          |t          d                    }| j        j                            |           | j        j                            t                                 t          t          dd dt          | j        gt                              | j        g| j        g          }t          |j        |j                  }t#          t%          t'          dgg                    |          }t)          ||dd           |j        }t-          g d|d           d S )	Nr   r{  rm   rD  rE  )z/PyObject *CPyDef_myfunc(CPyTagged cpy_r_arg) {
z    CPyTagged cpy_r_r0;
z    cpy_r_r0 = 10;
z    CPy_Unreachable();
r|  r}  rV  )r$   r7   r   r   r^  rX  rT   r*   r   r   r   ry  r8   rU   r,   r~  r  r   r   r=   r   rY  r   )rV   rU   r   r  r_  r`  r  s          rW   test_registerz"TestGenerateFunction.test_register  s    ~&&C$$
b!!!
kmm,,,XtUM48*o,V,VWWXJZL
 

 ,BKCC.y)A)ABBKPP Wi@@@""   (
	
 
	
 
	
 
	
 
	
 
	
rY   Nrq  )rr  rs  rt  rx   r  r  rk  rY   rW   rw  rw  o  sP        # # # #

 
 
 
"
 
 
 
 
 
rY   rw  )\
__future__r   unittestmypy.test.helpersr   mypyc.codegen.emitr   r   mypyc.codegen.emitfuncr   r   mypyc.commonr	   mypyc.ir.class_irr
   mypyc.ir.func_irr   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+   mypyc.ir.pprintr,   mypyc.ir.rtypesr-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   mypyc.irbuild.vtabler<   mypyc.namegenr=   mypyc.primitives.dict_opsr>   r?   r@   rA   mypyc.primitives.int_opsrB   mypyc.primitives.list_opsrC   rD   rE   mypyc.primitives.misc_opsrF   mypyc.primitives.registryrG   mypyc.subtyperH   TestCaserJ   rw  rk  rY   rW   <module>r     s   " " " " " "  8 8 8 8 8 8 6 6 6 6 6 6 6 6 S S S S S S S S & & & & & & % % % % % % H H H H H H H H H H H H                                                             > 2 1 1 1 1 1                                 " 0 / / / / / ' ' ' ' ' '            0 / / / / / X X X X X X X X X X 4 4 4 4 4 4 0 0 0 0 0 0 $ $ $ $ $ $a7 a7 a7 a7 a7!2 a7 a7 a7H/
 /
 /
 /
 /
8, /
 /
 /
 /
 /
rY   