
    hiL                       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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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d d
l7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJ d dlKmLZL d dlMmNZN d dlOmPZPmQZQmRZRmSZS d dlTmUZU d dlVmWZWmXZXmYZY d dlZm[Z[ d dl\m]Z] d dl^m_Z_  G d dej`                  Za G d dej`                  ZbdS )    )annotationsN)assert_string_arrays_equal)EmitterEmitterContext)FunctionEmitterVisitorgenerate_native_function)HAVE_IMMORTALPLATFORM_SIZE)ClassIR)FuncDeclFuncIRFuncSignature
RuntimeArg)!	ERR_NEVERAssignAssignMulti
BasicBlockBoxBranchCallCallCCastComparisonOpCStringDecRefExtendGetAttrGetElementPtrGotoIncRefIntegerIntOpLoadAddressLoadLiteralLoadMemOpRegisterReturnSetAttr
SetElementSetMemTupleGetUnboxUndefUnreachableValue)generate_names_for_ir)RArray	RInstanceRStructRTupleRTypebool_rprimitivec_int_rprimitivecstring_rprimitivedict_rprimitiveint32_rprimitiveint64_rprimitiveint_rprimitivelist_rprimitivenone_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                  P   e Zd Z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\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\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\d*Z*d\d+Z+d\d,Z,d\d-Z-d\d.Z.d\d/Z/d\d0Z0d\d1Z1d\d2Z2d\d3Z3d\d4Z4d\d5Z5d\d6Z6d\d7Z7d\d8Z8d\d9Z9d\d:Z:d\d;Z;d\d<Z<d\d=Z=d\d>Z>d\d?Z?d\d@Z@d\dAZAd\dBZBd\dCZCd\dDZDd\dEZEd\dFZFd\dGZG	 d]dIdHdIdJd^dVZHd_d[ZIdHS )`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$          t5          t          t          g          d|_        ddg|_        tA          |           |g|_!         |dtE          |                     _#         |d tH                     _%        tM          d!g d"t          t$          t*          g           _'         |d# j'                   _(        tS          tU          dgg                     _+        d S )%Nnamestrrtyper6   rR   r'   c                \    t          ||           }j                            |           |S N)r'   	registersappend)rU   rW   regselfs      h/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/mypyc/test/test_emitfunc.py	add_localz3TestFunctionEmitterVisitor.setUp.<locals>.add_localW   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i2rq   rw   rx   rnoneFoo)ri   ru   rv   st)rU   rV   rW   r6   rR   r'   ),rZ   r=   ra   rb   rc   r>   rd   re   r@   rf   rg   r:   rh   r7   ri   rB   rj   rk   r;   rl   rm   r<   rn   ro   rA   rp   r5   rq   rr   r   
attributesbitmap_attrsrC   mror3   ry   r?   rz   r4   struct_typer|   r   rD   context)r]   r_   irs   `  r^   setUpz TestFunctionEmitterVisitor.setUpT   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	"..Ifo66	"???_6FHX$Y
 
 )D$"233%meWI&>&>??r`   c                f    |                      t          t          d                    d           d S )N   zgoto CPyL2;)assert_emitr   r   r]   s    r^   	test_gotoz$TestFunctionEmitterVisitor.test_goto   s,    jmm,,m<<<<<r`   c                n    t          d          }|                     t          |          d|           d S )Nr    
next_block)r   r   r   )r]   r   s     r^   test_goto_next_blockz/TestFunctionEmitterVisitor.test_goto_next_block   s6    ]]
j))2*EEEEEr`   c                V    |                      t          | j                  d           d S )Nzreturn cpy_r_m;)r   r(   rb   r   s    r^   test_returnz&TestFunctionEmitterVisitor.test_return   s'    ):;;;;;r`   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   ra   r!   rl   r8   r   s    r^   test_integerz'TestFunctionEmitterVisitor.test_integer   s^    

33_EEE'!5E*F*FGGIYZZZZZr`   c                Z    |                      t          | j        dd          d           d S )N   r   zcpy_r_r0 = cpy_r_t.f1;)r   r,   rq   r   s    r^   test_tuple_getz)TestFunctionEmitterVisitor.test_tuple_get   s-    $&!Q//1IJJJJJr`   c                x    |                      t          t          j        t          j        d          d           d S )Nr   z'cpy_r_r0 = (PyObject *)&_Py_NoneStruct;)r   r#   rM   typesrcr   s    r^   test_load_Nonez)TestFunctionEmitterVisitor.test_load_None   s<    +^-?CC5	
 	
 	
 	
 	
r`   c                b    |                      t          | j        | j                  d           d S )Nzcpy_r_m = cpy_r_n;)r   r   rb   ra   r   s    r^   test_assign_intz*TestFunctionEmitterVisitor.test_assign_int   s-    //1EFFFFFr`   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_opra   rb   rc   r   s    r^   test_int_addz'TestFunctionEmitterVisitor.test_int_add   s6    "")V	
 	
 	
 	
 	
r`   c                V    |                      d| j        | j        | j        d           d S )N-z0cpy_r_r0 = CPyTagged_Subtract(cpy_r_m, cpy_r_k);r   r   s    r^   test_int_subz'TestFunctionEmitterVisitor.test_int_sub   s6    "")[	
 	
 	
 	
 	
r`   c                    t           j        J |                     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);)	rI   c_function_namer   r   rb   return_typestealsis_borrowed
error_kindr   s    r^   test_int_negz'TestFunctionEmitterVisitor.test_int_neg   ss    )555*&!&&%	 	 4	
 	
 	
 	
 	
r`   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   ri   r   BOOLnegatedr]   ri   s     r^   test_branchz&TestFunctionEmitterVisitor.test_branch   s    46:a==*Q--EE	
 	
 	
 46:a==*Q--EE		
 	
 	
 	
 	
r`   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   ri   r   r   r   r]   r   ri   s      r^   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Sr`   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 CPyL2;r   Tzif (cpy_r_b) goto CPyL2;r   r   s      r^   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Rr`   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   ri   r   IS_ERRORr   r   r   s     r^   test_branch_is_errorz/TestFunctionEmitterVisitor.test_branch_is_error   s    46:a==*Q--II	
 	
 	
 46:a==*Q--II		
 	
 	
 	
 	
r`   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   ri   r   r   r   r   s      r^   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Wr`   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      r^   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Zr`   c                    t          dd dt          t          dt                    gt                              }|                     t          || j        gd          d           d S )Nmyfnrt   rb   r   z cpy_r_r0 = CPyDef_myfn(cpy_r_m);)r   r   r   r=   r   r   rb   r]   decls     r^   	test_callz$TestFunctionEmitterVisitor.test_call  sa    D%
30O0O/PR`!a!a
 
 	dTVHb113UVVVVVr`   c                   t          dd dt          t          dt                    t          dt                    gt                              }|                     t          || j        | j        gd          d           d S )Nr   rt   rb   ra   r   z)cpy_r_r0 = CPyDef_myfn(cpy_r_m, cpy_r_k);)r   r   r   r=   r   r   rb   rc   r   s     r^   test_call_two_argsz-TestFunctionEmitterVisitor.test_call_two_args  s    C00*S.2Q2QRTb 	
 
 	',,.Y	
 	
 	
 	
 	
r`   c                    |                      t          | j                  d           |                      t          | j                  dd           d S )NzCPy_INCREF(cpy_r_o);Tr   )r   r    rf   r   s    r^   test_inc_refz'TestFunctionEmitterVisitor.test_inc_ref&  K    )?@@@)?dKKKKKr`   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   rf   r   s    r^   test_dec_refz'TestFunctionEmitterVisitor.test_dec_ref*  r   r`   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    rb   r   s    r^   test_inc_ref_intz+TestFunctionEmitterVisitor.test_inc_ref_int.  K    )EFFF)EDQQQQQr`   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   rb   r   s    r^   test_dec_ref_intz+TestFunctionEmitterVisitor.test_dec_ref_int2  r   r`   c                V    |                      t          | j                  d           d S )NzCPyTagged_DECREF(cpy_r_t.f0);)r   r   rq   r   s    r^   test_dec_ref_tuplez-TestFunctionEmitterVisitor.test_dec_ref_tuple6  s'    )HIIIIIr`   c                V    |                      t          | j                  d           d S )Nz!CPyTagged_DECREF(cpy_r_tt.f0.f0);)r   r   rr   r   s    r^   test_dec_ref_tuple_nestedz4TestFunctionEmitterVisitor.test_dec_ref_tuple_nested9  s'    *MNNNNNr`   c                    |                      t          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   rV   rK   r   rb   rc   r   r   r   r   r   s    r^   test_list_get_itemz-TestFunctionEmitterVisitor.test_list_get_item<  sm    $455  , ' , +  @	
 	
 	
 	
 	
r`   c                    |                      t          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   rV   rL   r   rd   ra   rf   r   r   r   r   r   s    r^   test_list_set_itemz-TestFunctionEmitterVisitor.test_list_set_itemJ  sq    $455( , ' , +  I	
 	
 	
 	
 	
r`   c                V    |                      t          | j                  d           d S )Nz,cpy_r_r0 = CPyTagged_StealAsObject(cpy_r_n);)r   r   ra   r   s    r^   test_box_intz'TestFunctionEmitterVisitor.test_box_intX  s'    TV&XYYYYYr`   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-   rb   r=   r   s    r^   test_unbox_intz)TestFunctionEmitterVisitor.test_unbox_int[  s:    $&."--	
 	
 	
 	
 	
r`   c                V    |                      t          | j                  d           d S )Nz*cpy_r_r0 = PyLong_FromLongLong(cpy_r_i64);)r   r   rn   r   s    r^   test_box_i64z'TestFunctionEmitterVisitor.test_box_i64f  s'    TX(XYYYYYr`   c                d    |                      t          | j        t          d          d           d S )Nr   z$cpy_r_r0 = CPyLong_AsInt64(cpy_r_o);)r   r-   rf   r<   r   s    r^   test_unbox_i64z)TestFunctionEmitterVisitor.test_unbox_i64i  s9    $&*B//1[	
 	
 	
 	
 	
r`   c                    |                      t          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   rV   rJ   r   rd   rf   r   r   r   r   r   s    r^   test_list_appendz+TestFunctionEmitterVisitor.test_list_appendn  sk    N233 *%*)  >	
 	
 	
 	
 	
r`   c                Z    |                      t          | j        dd          d           d S )Nrv   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   ry   r   s    r^   test_get_attrz(TestFunctionEmitterVisitor.test_get_attr|  s:    DFC##		
 		
 		
 		
 		
r`   c                Z    |                      t          | j        dd          d           d S )Nru   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    r^   test_get_attr_non_refcountedz7TestFunctionEmitterVisitor.test_get_attr_non_refcounted  s:    DFC##	
 	
 	
 	
 	
r`   c                    t          | j        dd          }t          |t          d          t          d          t          j                  }d|_        |                     |d|d           d S )	Nrv   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   ry   r   r   r   traceback_entryr   r]   opbranchs      r^   test_get_attr_mergedz/TestFunctionEmitterVisitor.test_get_attr_merged  su    TVS!$$JqMM:a==&/JJ!0  	 	
 	
 	
 	
 	
r`   c                Z    |                      t          | j        dd          d           d S )Nrw   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    r^   test_get_attr_with_bitmapz4TestFunctionEmitterVisitor.test_get_attr_with_bitmap  s:    DFD!$$	
 	
 	
 	
 	
r`   c                ^    |                      t          | j        ddd          d           d S )Nrq   r   T)allow_error_valuezcpy_r_r0 = ((mod___AObject *)cpy_r_r)->_t;
               if (cpy_r_r0.f0 != NULL) {
                   CPy_INCREF(cpy_r_r0.f0);
                   CPy_INCREF(cpy_r_r0.f1);
               }
            r   r   s    r^   !test_get_attr_nullable_with_tuplez<TestFunctionEmitterVisitor.test_get_attr_nullable_with_tuple  s?    DFCd;;;	
 	
 	
 	
 	
r`   c                f    |                      t          | j        d| j        d          d           d S )Nrv   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)   ry   rb   r   s    r^   test_set_attrz(TestFunctionEmitterVisitor.test_set_attr  s>    DFC++	
 	
 	
 	
 	
r`   c                f    |                      t          | j        d| j        d          d           d S )Nru   r   zS((mod___AObject *)cpy_r_r)->_x = cpy_r_b;
               cpy_r_r0 = 1;
            )r   r)   ry   ri   r   s    r^   test_set_attr_non_refcountedz7TestFunctionEmitterVisitor.test_set_attr_non_refcounted  s>    DFC++	
 	
 	
 	
 	
r`   c                    t          | j        d| j        d          }t          |_        |                     |d           d S )Nrv   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)   ry   rb   r   r   r   r]   r   s     r^   test_set_attr_no_errorz1TestFunctionEmitterVisitor.test_set_attr_no_error  sJ    TVS$&!,,!	
 	
 	
 	
 	
r`   c                    t          | j        d| j        d          }t          |_        |                     |d           d S )Nru   r   z6((mod___AObject *)cpy_r_r)->_x = cpy_r_b;
            )r)   ry   ri   r   r   r   r   s     r^   %test_set_attr_non_refcounted_no_errorz@TestFunctionEmitterVisitor.test_set_attr_non_refcounted_no_error  sJ    TVS$&!,,!	
 	
 	
 	
 	
r`   c                    |                      t          | j        d| j        d          d           |                      t          | j        d| j        d          d           d S )Nrw   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;
            rx   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)   ry   rn   rl   r   s    r^   test_set_attr_with_bitmapz4TestFunctionEmitterVisitor.test_set_attr_with_bitmap  st     	DFD$(A..	
 	
 	
 	DFD$(A..	
 	
 	
 	
 	
r`   c                x    t          | j        d| j        d          }d|_        |                     |d           d S )Nrw   r   Tr  )r)   ry   rn   is_initr   r   s     r^   test_set_attr_init_with_bitmapz9TestFunctionEmitterVisitor.test_set_attr_init_with_bitmap  sJ    TVT48Q//
	
 	
 	
 	
 	
r`   c                    |                      t          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   rV   rE   r   rh   rg   r   r   r   r   r   s    r^   test_dict_get_itemz-TestFunctionEmitterVisitor.test_dict_get_item  sm    $455! , ' , +  A	
 	
 	
 	
 	
r`   c                    |                      t          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   rV   rG   r   rh   rf   rg   r   r   r   r   r   s    r^   test_dict_set_itemz-TestFunctionEmitterVisitor.test_dict_set_item  sq    $455) , ' , +  J	
 	
 	
 	
 	
r`   c                    |                      t          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   rV   rH   r   rh   rf   r   r   r   r   r   s    r^   test_dict_updatez+TestFunctionEmitterVisitor.test_dict_update!  sk    N233 *%*)  ?	
 	
 	
 	
 	
r`   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   rF   r   r   r   r   r   r   s    r^   test_new_dictz(TestFunctionEmitterVisitor.test_new_dict/  sZ    +'"'&  +	
 	
 	
 	
 	
r`   c                V    |                      d| j        | j        | j        d           d S )Ninz-cpy_r_r0 = PyDict_Contains(cpy_r_d, cpy_r_o);)r   ri   rf   rh   r   s    r^   test_dict_containsz-TestFunctionEmitterVisitor.test_dict_contains=  s6    ""$&$&$&*]	
 	
 	
 	
 	
r`   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"   rB   rj   rk   ADDSUBMULDIVMODANDORXOR
LEFT_SHIFTRIGHT_SHIFTrn   ro   r   s    r^   test_int_opz&TestFunctionEmitterVisitor.test_int_opB  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	
 	
 	
 	
 	
r`   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   rj   rk   SLTrl   rm   rn   ro   ULTrf   rg   EQNEQr   s    r^   test_comparison_opz-TestFunctionEmitterVisitor.test_comparison_opp  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	
 	
 	
 	
 	
r`   c                b    |                      t          t          | j                  d           d S )Nzcpy_r_r0 = *(char *)cpy_r_ptr;)r   r%   r7   rp   r   s    r^   test_load_memz(TestFunctionEmitterVisitor.test_load_mem  s+    $(;;=abbbbbr`   c                n    |                      t          t          | j        | j                  d           d S )Nz*(char *)cpy_r_ptr = cpy_r_b;)r   r+   r7   rp   ri   r   s    r^   test_set_memz'TestFunctionEmitterVisitor.test_set_mem  s:    ?DHdf557Z	
 	
 	
 	
 	
r`   c                L   t          dg dt          t          t          g          }|                     t          | j        |d          d           |                     t          | j        |d          d           |                     t          | j        |d          d           d S )	Nr{   )ri   rl   rn   ri   z(cpy_r_r0 = (CPyPtr)&((Foo *)cpy_r_o)->b;rl   z*cpy_r_r0 = (CPyPtr)&((Foo *)cpy_r_o)->i32;rn   z*cpy_r_r0 = (CPyPtr)&((Foo *)cpy_r_o)->i64;)r4   r7   r;   r<   r   r   rf   )r]   ry   s     r^   test_get_element_ptrz/TestFunctionEmitterVisitor.test_get_element_ptr  s    &&&:JL\(]
 
 	$&!S))+Y	
 	
 	
 	$&!U++-]	
 	
 	
 	$&!U++-]	
 	
 	
 	
 	
r`   c                    |                      t          t          | j                  d| j                  d           |                      t          | j        d| j                  d           d S )Nri   zcpy_r_r0.b = cpy_r_b;ru   z7cpy_r_r0 = (Foo) { cpy_r_st.b, cpy_r_i32, cpy_r_st.y };)r   r*   r.   r   ri   r|   rl   r   s    r^   test_set_elementz+TestFunctionEmitterVisitor.test_set_element  ss    uT-..TV<<>Y	
 	
 	
 	twTX..I	
 	
 	
 	
 	
r`   c                X    |                      t          t          d          d           d S )NPyDict_Typez$cpy_r_r0 = (PyObject *)&PyDict_Type;)r   r#   r@   r   s    r^   test_load_addressz,TestFunctionEmitterVisitor.test_load_address  s5    )=996	
 	
 	
 	
 	
r`   c                    t          t          d          }t          |d          }| j                            |           |                     t          || j        | j        g          d           d S )Nr   az+PyObject *cpy_r_a[2] = {cpy_r_o, cpy_r_o2};)	r2   r@   r'   rZ   r[   r   r   rf   rg   )r]   rq   r3  s      r^   test_assign_multiz,TestFunctionEmitterVisitor.test_assign_multi  sr    $a((Qa   DFDG,--/`	
 	
 	
 	
 	
r`   c           	        t          t          d          }|                     t          |t	          dt                              d           |                     t          |t	          dt                              d           d S )Nr3  l        zcpy_r_a = 2147483648LL;izcpy_r_a = 2147483647;r'   r<   r   r   r!   r]   r3  s     r^   test_long_unsignedz-TestFunctionEmitterVisitor.test_long_unsigned  s    %s++1gg'78899;X	
 	
 	
 	1gm-=>>??A\	
 	
 	
 	
 	
r`   c           	        t          t          d          }|                     t          |t	          dt                              d           |                     t          |t	          dt                              d           d S )Nr3  i  zcpy_r_a = -2147483647;i   zcpy_r_a = -2147483648LL;r6  r7  s     r^   test_long_signedz+TestFunctionEmitterVisitor.test_long_signed  s    %s++1gn.>??@@B^	
 	
 	
 	1gj*:;;<<>\	
 	
 	
 	
 	
r`   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   ry   r:   r   r   r   r   r   r]   r   r   r   s       r^   test_cast_and_branch_mergez5TestFunctionEmitterVisitor.test_cast_and_branch_merge  s}    $&/1--]]
JqMM:vGG!0 " 	 	
 	
 	
 	
 	
r`   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   ry   r:   r   r   r   r   r   r   s      r^   test_cast_and_branch_no_merge_1z:TestFunctionEmitterVisitor.test_cast_and_branch_no_merge_1  s~    $&/1--JqMM:a==&/JJ!0 ""~~ 	 	
 	
 	
 	
 	
r`   c                    t          | j        t          d          }t          d          }t	          |t          d          |t          j                  }d|_        d|_        |                     |d||           d S )Nr   r   r   Tr   r@  r   r   )	r   ry   r:   r   r   r   r   r   r   r=  s       r^   test_cast_and_branch_no_merge_2z:TestFunctionEmitterVisitor.test_cast_and_branch_no_merge_2  s    $&/1--]]
JqMM:vGG!0 " 	 	
 	
 	
 	
 	
r`   c                    t          | j        t          d          }t          d          }t	          |t          d          |t          j                  }d|_        |                     |d||           d S )Nr   r   r   r   r@  rD  )r   ry   r:   r   r   r   r   r   r=  s       r^   test_cast_and_branch_no_merge_3z:TestFunctionEmitterVisitor.test_cast_and_branch_no_merge_3  sz    $&/1--]]
JqMM:v{CC!0 " 	 	
 	
 	
 	
 	
r`   c                    t          | j        t          d          }t          d          }t	          |t          d          |t          j                  }|                     |d||           d S )Nr   r   r   r@  rD  )r   ry   r:   r   r   r   r   r=  s       r^   test_cast_and_branch_no_merge_4z:TestFunctionEmitterVisitor.test_cast_and_branch_no_merge_4%  sr    $&/1--]]
JqMM:vGG " 	 	
 	
 	
 	
 	
r`   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 )Nr3  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'   r;   r   r   r<   r
   ra   r=   r7  s     r^   test_extendz&TestFunctionEmitterVisitor.test_extend7  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\     r`   c                    t          | j                  }|                     |t          |          gt          rdnd           d S Nr   CPy_INCREF(cpy_r_r0);)r   rz   r   r    r	   r   s     r^   test_inc_ref_nonez,TestFunctionEmitterVisitor.test_inc_ref_noneK  s?    	NN!VAYY})YBYZZZZZr`   c                    t          | j                  }|                     |t          |          gt          rdnd           d S rO  )r   ri   r   r    r	   r   s     r^   test_inc_ref_boolz,TestFunctionEmitterVisitor.test_inc_ref_boolO  s?    KK!VAYY})YBYZZZZZr`   c                   dD ]E}t          |t                    }|                     |t          |          gt          rdnd           FdD ]<}t          |t                    }|                     |t          |          gd           =d S )N)r   r   r         r   rP  )iii  ilX)r$   r@   r   r    r	   )r]   ru   ri   s      r^   test_inc_ref_int_literalz3TestFunctionEmitterVisitor.test_inc_ref_int_literalS  s    & 	_ 	_AA011Aa^=-]RRF]^^^^- 	F 	FAA011Aa^-DEEEE	F 	Fr`   c           	        t          t          d          }|                     t          |t	          d                    d           |                     t          |t	          d                    d           |                     t          |t	          d                    d           |                     t          |t	          d                    d	           t          d
          D ]}t          |g          }|dk    rd}nK|dk    rd}nB|dk    rd}n9|dk    rd}n0|dk    rd}n'|dk     s|dk    rd|z  }n|                    d          }|                     t          |t	          |                    d| d           d S )Nss   foozcpy_r_s = "foo";s   foo "ozcpy_r_s = "foo \"o";    zcpy_r_s = "\x00";   \zcpy_r_s = "\\";rW     
z\n   z\r   	z\t   "z\"z\\       z\x%.2xasciizcpy_r_s = "z";)r'   r9   r   r   r   rangebytesdecode)r]   rZ  iri   targets        r^   test_c_stringz(TestFunctionEmitterVisitor.test_c_string[  s   '--76??335KLLL79#5#5668STTT77#3#3446NOOO75>>224JKKKs 	N 	NAqc

AEzzeedeR188"Q'**VAwqzz224L&4L4L4LMMMM!	N 	Nr`   NF)r   r   r   r   Op | list[Op]expectedrV   r   BasicBlock | Noner   boolr   Branch | Noner   c               ~   t          d          }t          |t                    r|j                            |           n"|j                            |           |d         }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
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     r^   
<listcomp>z:TestFunctionEmitterVisitor.assert_emit.<locals>.<listcomp>  s"    :::D

3:::r`   c              3  @   K   | ]}|                     d           V  dS )
N)endswithrx  s     r^   	<genexpr>z9TestFunctionEmitterVisitor.assert_emit.<locals>.<genexpr>  s.      @@44==&&@@@@@@r`   c                8    g | ]}|                     d           S )r}  )rstriprx  s     r^   r{  z:TestFunctionEmitterVisitor.assert_emit.<locals>.<listcomp>  s$    CCCdD))CCCr`   r}  c                8    g | ]}|                     d           S rt  rv  rx  s     r^   r{  z:TestFunctionEmitterVisitor.assert_emit.<locals>.<listcomp>  s"    EEEd$**S//EEEr`   zGenerated code unexpectedT)msg	tracebackr   )r   
isinstancer&   opsr[   extendr1   rZ   r   r   	fragmentsr   r   r   op_indexacceptallrw  r  splitr   )r]   r   rk  r   r   r   r   blockvalue_namesemitterdeclarationsvisitorfragsactual_linesexpected_liness                  r^   r   z&TestFunctionEmitterVisitor.assert_emits  s    1b" 	IR    IR   BB+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"L.IUY	
 	
 	
 	
  	)#q((((((#q((((((r`   destr0   leftrightc                   |t           v rt           |         }|D ]}t          |j        |j        d                   rt          |j        |j        d                   rl||g|j        fd|j        D             |j        J |                     t          |j        |j        |j	        |j
        |j        d          |            d S d S J d            )Nr   r   c                     g | ]
}|         S  r  )ry  rg  argss     r^   r{  zDTestFunctionEmitterVisitor.assert_emit_binary_op.<locals>.<listcomp>  s    ???AQ???r`   r   FzCould not find matching op)rN   rO   r   	arg_typesorderingr   r   r   r   r   r   r   )	r]   r   r  r  r  rk  r  descr  s	           @r^   r   z0TestFunctionEmitterVisitor.assert_emit_binary_op  s    R.C  di):;; 
Jq 1A A  !%=D}0???????/;;;$$ 0  , K , O  !   FF+ . 76666r`   rR   rS   rY   )r   rj  rk  rV   r   rl  r   rm  r   rn  r   rm  rR   rS   )r   rV   r  r0   r  r0   r  r0   rk  rV   rR   rS   )J__name__
__module____qualname____doc__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.  r1  r4  r8  r:  r>  rB  rE  rG  rI  rM  rQ  rS  rX  ri  r   r   r  r`   r^   rQ   rQ   Q   s       CC/@ /@ /@ /@b= = = =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
 
 
 


 
 
 
	
 	
 	
 	

 
 
 

 
 
 

 
 
 

 
 
 

 
 
 
(
 
 
 
&
 
 
 
(
 
 
 
&
 
 
 
$   ([ [ [ [[ [ [ [F F F FN N N N8 )-	/) %)/) /) /) /) /) /)b7 7 7 7 7 7r`   rQ   c                  &    e Zd ZddZddZddZdS )TestGenerateFunctionrR   rS   c                    t          dt                    | _        t          t          d          | _        t          d          | _        d S )Nargr   )r   r=   r  r'   r\   r   r  r   s    r^   r   zTestGenerateFunction.setUp  s5    e^44NE22]]


r`   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myfuncrt   rq  rr  )z/CPyTagged CPyDef_myfunc(CPyTagged cpy_r_arg) {
z    return cpy_r_arg;
}
Generated code invalidr  )r  r  r[   r(   r\   r   r   r   r  r=   r1   arg_regsblocksr   r   rD   r   r  r   )r]   fnr  r  results        r^   test_simplez TestGenerateFunction.test_simple  s    
fTX..///XtUM48*n,U,UVVXJZL
 

 ,BKCC.y)A)ABBKPP Wi@@@""bbb(	
 	
 	
 	
 	
 	
r`   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  rt   rq  rr  )z/PyObject *CPyDef_myfunc(CPyTagged cpy_r_arg) {
z    CPyTagged cpy_r_r0;
z    cpy_r_r0 = 10;
z    CPy_Unreachable();
r  r  r  )r'   r=   r   r!   r  r  r[   r/   r   r   r   r  r>   r\   r1   r  r  r   r   rD   r   r  r   )r]   r\   r   r  r  r  r  s          r^   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@@@""   (
	
 
	
 
	
 
	
 
	
 
	
r`   Nr  )r  r  r  r   r  r  r  r`   r^   r  r    sP        # # # #

 
 
 
"
 
 
 
 
 
r`   r  )c
__future__r   unittestmypy.test.helpersr   mypyc.codegen.emitr   r   mypyc.codegen.emitfuncr   r   mypyc.commonr	   r
   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,   r-   r.   r/   r0   mypyc.ir.pprintr1   mypyc.ir.rtypesr2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   mypyc.irbuild.vtablerC   mypyc.namegenrD   mypyc.primitives.dict_opsrE   rF   rG   rH   mypyc.primitives.int_opsrI   mypyc.primitives.list_opsrJ   rK   rL   mypyc.primitives.misc_opsrM   mypyc.primitives.registryrN   mypyc.subtyperO   TestCaserQ   r  r  r`   r^   <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 5 5 5 5 5 5 5 5 % % % % % % H H H H H H H H H H H H" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "F 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 $ $ $ $ $ $o7 o7 o7 o7 o7!2 o7 o7 o7d/
 /
 /
 /
 /
8, /
 /
 /
 /
 /
r`   