
    i=                    *   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@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZM d dlNmOZO d dlPmQZQ d dlRmSZSmTZTmUZUmVZV d dlWmXZX d dlYmZZZm[Z[m\Z\ d dl]m^Z^ d dl_m`Z` d dlambZb  G d dejc                  Zd G d dejc                  Zed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RUnionRVec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str_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                  h   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ZGd_dHZHd_dIZId_dJZJ	 d`dLdKdLdMdadYZKdbd^ZLdKS )cTestFunctionEmitterVisitorz9Test generation of fragments of C from individual IR ops.returnNonec           	     V    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                     _         |dt;          t*                               _         |dt;          t$                               _         |dt;          t@                               _!         |dt;          tE          t@          tF          g                               _$         |dt;          t;          t@                                         _%        tM          dd          }t          t          t*          t$          t5          t          t          g          d |_'        d!d"g|_(        tS          |           |g|_*         |d#tW          |                     _,         |d$tF                     _-        t]          d%g d&t          t$          t*          g           _/         |d' j/                   _0        tc          te          dgg          d(           _3        d S )*Nnamestrrtyper6   rU   r'   c                \    t          ||           }j                            |           |S N)r'   	registersappend)rX   rZ   regselfs      W/root/projects/qq-shell/venv/lib64/python3.11/site-packages/mypyc/test/test_emitfunc.py	add_localz3TestFunctionEmitterVisitor.setUp.<locals>.add_localZ   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vi64vi32vsvvsAmod)xyi1i2rt   r~   r   rnoneFoo)rl   r|   r}   stT)rX   rY   rZ   r6   rU   r'   )4r]   r?   rd   re   rf   r@   rg   rh   rB   ri   rj   r<   rk   r9   rl   rD   rm   rn   r=   ro   rp   r>   rq   rr   rC   rs   r5   rt   ru   r8   rv   rw   rE   rx   r7   rA   vs_optry   r   
attributesbitmap_attrsrF   mror3   r   r   r4   struct_typer   r   rG   context)r`   rb   irs   `  ra   setUpz TestFunctionEmitterVisitor.setUpW   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
 
 Ifd+;&<&<==	Ifd+;&<&<==	)D$~"6"677id6>?2S+T+T&U&UVV9UDn)=)=$>$>??S%   ""*,=>??
 
  ,r3	"..Ifo66	"???_6FHX$Y
 
 )D$"233%meWI&>&>EErc   c                f    |                      t          t          d                    d           d S )N   zgoto CPyL2;)assert_emitr   r   r`   s    ra   	test_gotoz$TestFunctionEmitterVisitor.test_goto   s,    jmm,,m<<<<<rc   c                n    t          d          }|                     t          |          d|           d S )Nr    
next_block)r   r   r   )r`   r   s     ra   test_goto_next_blockz/TestFunctionEmitterVisitor.test_goto_next_block   s6    ]]
j))2*EEEEErc   c                V    |                      t          | j                  d           d S )Nzreturn cpy_r_m;)r   r(   re   r   s    ra   test_returnz&TestFunctionEmitterVisitor.test_return   s'    ):;;;;;rc   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   rd   r!   ro   r:   r   s    ra   test_integerz'TestFunctionEmitterVisitor.test_integer   s^    

33_EEE'!5E*F*FGGIYZZZZZrc   c                Z    |                      t          | j        dd          d           d S )N   r   zcpy_r_r0 = cpy_r_t.f1;)r   r,   rt   r   s    ra   test_tuple_getz)TestFunctionEmitterVisitor.test_tuple_get   s-    $&!Q//1IJJJJJrc   c                x    |                      t          t          j        t          j        d          d           d S )Nr   z'cpy_r_r0 = (PyObject *)&_Py_NoneStruct;)r   r#   rP   typesrcr   s    ra   test_load_Nonez)TestFunctionEmitterVisitor.test_load_None   s<    +^-?CC5	
 	
 	
 	
 	
rc   c                b    |                      t          | j        | j                  d           d S )Nzcpy_r_m = cpy_r_n;)r   r   re   rd   r   s    ra   test_assign_intz*TestFunctionEmitterVisitor.test_assign_int   s-    //1EFFFFFrc   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_oprd   re   rf   r   s    ra   test_int_addz'TestFunctionEmitterVisitor.test_int_add   s6    "")V	
 	
 	
 	
 	
rc   c                V    |                      d| j        | j        | j        d           d S )N-z0cpy_r_r0 = CPyTagged_Subtract(cpy_r_m, cpy_r_k);r   r   s    ra   test_int_subz'TestFunctionEmitterVisitor.test_int_sub   s6    "")[	
 	
 	
 	
 	
rc   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);)	rL   c_function_namer   r   re   return_typestealsis_borrowed
error_kindr   s    ra   test_int_negz'TestFunctionEmitterVisitor.test_int_neg   ss    )555*&!&&%	 	 4	
 	
 	
 	
 	
rc   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   rl   r   BOOLnegatedr`   rl   s     ra   test_branchz&TestFunctionEmitterVisitor.test_branch   s    46:a==*Q--EE	
 	
 	
 46:a==*Q--EE		
 	
 	
 	
 	
rc   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   rl   r   r   r   r`   r   rl   s      ra   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Src   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      ra   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Rrc   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   rl   r   IS_ERRORr   r   r   s     ra   test_branch_is_errorz/TestFunctionEmitterVisitor.test_branch_is_error   s    46:a==*Q--II	
 	
 	
 46:a==*Q--II		
 	
 	
 	
 	
rc   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   rl   r   r   r   r   s      ra   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Wrc   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      ra   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Zrc   c                    t          dd dt          t          dt                    gt                              }|                     t          || j        gd          d           d S )Nmyfnr{   re   r   z cpy_r_r0 = CPyDef_myfn(cpy_r_m);)r   r   r   r?   r   r   re   r`   decls     ra   	test_callz$TestFunctionEmitterVisitor.test_call  sa    D%
30O0O/PR`!a!a
 
 	dTVHb113UVVVVVrc   c                   t          dd dt          t          dt                    t          dt                    gt                              }|                     t          || j        | j        gd          d           d S )Nr   r{   re   rd   r   z)cpy_r_r0 = CPyDef_myfn(cpy_r_m, cpy_r_k);)r   r   r   r?   r   r   re   rf   r   s     ra   test_call_two_argsz-TestFunctionEmitterVisitor.test_call_two_args!  s    C00*S.2Q2QRTb 	
 
 	',,.Y	
 	
 	
 	
 	
rc   c                    |                      t          | j                  d           |                      t          | j                  dd           d S )NzCPy_INCREF(cpy_r_o);Tr   )r   r    ri   r   s    ra   test_inc_refz'TestFunctionEmitterVisitor.test_inc_ref.  K    )?@@@)?dKKKKKrc   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   ri   r   s    ra   test_dec_refz'TestFunctionEmitterVisitor.test_dec_ref2  r   rc   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    re   r   s    ra   test_inc_ref_intz+TestFunctionEmitterVisitor.test_inc_ref_int6  K    )EFFF)EDQQQQQrc   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   re   r   s    ra   test_dec_ref_intz+TestFunctionEmitterVisitor.test_dec_ref_int:  r   rc   c                V    |                      t          | j                  d           d S )NzCPyTagged_DECREF(cpy_r_t.f0);)r   r   rt   r   s    ra   test_dec_ref_tuplez-TestFunctionEmitterVisitor.test_dec_ref_tuple>  s'    )HIIIIIrc   c                V    |                      t          | j                  d           d S )Nz!CPyTagged_DECREF(cpy_r_tt.f0.f0);)r   r   ru   r   s    ra   test_dec_ref_tuple_nestedz4TestFunctionEmitterVisitor.test_dec_ref_tuple_nestedA  s'    *MNNNNNrc   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   rY   rN   r   re   rf   r   r   r   r   r   s    ra   test_list_get_itemz-TestFunctionEmitterVisitor.test_list_get_itemD  sm    $455  , ' , +  @	
 	
 	
 	
 	
rc   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   rY   rO   r   rg   rd   ri   r   r   r   r   r   s    ra   test_list_set_itemz-TestFunctionEmitterVisitor.test_list_set_itemR  sq    $455( , ' , +  I	
 	
 	
 	
 	
rc   c                V    |                      t          | j                  d           d S )Nz,cpy_r_r0 = CPyTagged_StealAsObject(cpy_r_n);)r   r   rd   r   s    ra   test_box_intz'TestFunctionEmitterVisitor.test_box_int`  s'    TV&XYYYYYrc   c                d    |                      t          | j        t          d          d           d S )Nr   zif (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-   re   r?   r   s    ra   test_unbox_intz)TestFunctionEmitterVisitor.test_unbox_intc  s:    $&."--	
 	
 	
 	
 	
rc   c                V    |                      t          | j                  d           d S )Nz*cpy_r_r0 = PyLong_FromLongLong(cpy_r_i64);)r   r   rq   r   s    ra   test_box_i64z'TestFunctionEmitterVisitor.test_box_i64n  s'    TX(XYYYYYrc   c                d    |                      t          | j        t          d          d           d S )Nr   z$cpy_r_r0 = CPyLong_AsInt64(cpy_r_o);)r   r-   ri   r>   r   s    ra   test_unbox_i64z)TestFunctionEmitterVisitor.test_unbox_i64q  s9    $&*B//1[	
 	
 	
 	
 	
rc   c                   |                      t          | j                  d           |                      t          | j                  d           |                      t          | j                  d           |                      t          | j                  d           |                      t          | j                  d           d S )Nz%cpy_r_r0 = VecI64Api.box(cpy_r_vi64);z%cpy_r_r0 = VecI32Api.box(cpy_r_vi32);z:cpy_r_r0 = VecTApi.box(cpy_r_vs, (size_t)&PyUnicode_Type);z@cpy_r_r0 = VecTApi.box(cpy_r_vs, ((size_t)&PyUnicode_Type | 1));z'cpy_r_r0 = VecNestedApi.box(cpy_r_vvs);)r   r   rv   rw   rx   r   ry   r   s    ra   test_box_vecz'TestFunctionEmitterVisitor.test_box_vecv  s    TY)TUUUTY)TUUULLZ	
 	
 	
 	R	
 	
 	
 	TX(UVVVVVrc   c                   |                      t          | j        t          t                    d          d           |                      t          | j        t          t
                    d          d           |                      t          | j        t          t                    d          d           |                      t          | j        t          t          t          t          g                    d          d           |                      t          | j        t          | j	        j
                  d          d           d S )Nr   zcpy_r_r0 = VecI64Api.unbox(cpy_r_o);
               if (VEC_IS_ERROR(cpy_r_r0)) {
                   CPy_TypeError("vec[i64]", cpy_r_o); cpy_r_r0 = (VecI64) { -1, NULL };
               }
               zcpy_r_r0 = VecI32Api.unbox(cpy_r_o);
               if (VEC_IS_ERROR(cpy_r_r0)) {
                   CPy_TypeError("vec[i32]", cpy_r_o); cpy_r_r0 = (VecI32) { -1, NULL };
               }
               zcpy_r_r0 = VecTApi.unbox(cpy_r_o, (size_t)&PyUnicode_Type);
               if (VEC_IS_ERROR(cpy_r_r0)) {
                   CPy_TypeError("vec[str]", cpy_r_o); cpy_r_r0 = (VecT) { -1, NULL };
               }
               zcpy_r_r0 = VecTApi.unbox(cpy_r_o, ((size_t)&PyUnicode_Type | 1));
               if (VEC_IS_ERROR(cpy_r_r0)) {
                   CPy_TypeError("vec[str | None]", cpy_r_o); cpy_r_r0 = (VecT) { -1, NULL };
               }
               zcpy_r_r0 = VecTApi.unbox(cpy_r_o, (size_t)CPyType_A);
               if (VEC_IS_ERROR(cpy_r_r0)) {
                   CPy_TypeError("vec[mod.A]", cpy_r_o); cpy_r_r0 = (VecT) { -1, NULL };
               }
               )r   r-   ri   r8   r>   r=   rE   r7   rA   r   r   r   s    ra   test_unbox_vecz)TestFunctionEmitterVisitor.test_unbox_vec  s5   $&$/00"55	
 	
 	
 	$&$/00"55	
 	
 	
 	$&$~..33	
 	
 	
 	$&$v~&GHHII2NN	
 	
 	
 	$&$tv{++R00	
 	
 	
 	
 	
rc   c                   |                      t          | j        t          t          t                              d          d           |                      t          | j        t          t          t          t          t          g                              d          d           |                      t          | j        t          t          t                              d          d           d S )Nr   zcpy_r_r0 = VecNestedApi.unbox(cpy_r_o, (size_t)&PyUnicode_Type, 1);
               if (VEC_IS_ERROR(cpy_r_r0)) {
                   CPy_TypeError("vec[vec[str]]", cpy_r_o); cpy_r_r0 = (VecNested) { -1, NULL };
               }
               zcpy_r_r0 = VecNestedApi.unbox(cpy_r_o, ((size_t)&PyUnicode_Type | 1), 1);
               if (VEC_IS_ERROR(cpy_r_r0)) {
                   CPy_TypeError("vec[vec[str | None]]", cpy_r_o); cpy_r_r0 = (VecNested) { -1, NULL };
               }
               zcpy_r_r0 = VecNestedApi.unbox(cpy_r_o, 2, 1);
               if (VEC_IS_ERROR(cpy_r_r0)) {
                   CPy_TypeError("vec[vec[i64]]", cpy_r_o); cpy_r_r0 = (VecNested) { -1, NULL };
               }
               )r   r-   ri   r8   rE   r7   rA   r>   r   s    ra   test_unbox_vec_nestedz0TestFunctionEmitterVisitor.test_unbox_vec_nested  s    $&$tN3344b99	
 	
 	
 	$&$tFNO+L$M$MNNOOQSTT	
 	
 	
 	$&$t$45566;;	
 	
 	
 	
 	
rc   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   rY   rM   r   rg   ri   r   r   r   r   r   s    ra   test_list_appendz+TestFunctionEmitterVisitor.test_list_append  sk    N233 *%*)  >	
 	
 	
 	
 	
rc   c                Z    |                      t          | j        dd          d           d S )Nr}   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   r   r   s    ra   test_get_attrz(TestFunctionEmitterVisitor.test_get_attr  s:    DFC##		
 		
 		
 		
 		
rc   c                Z    |                      t          | j        dd          d           d S )Nr|   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    ra   test_get_attr_non_refcountedz7TestFunctionEmitterVisitor.test_get_attr_non_refcounted  s:    DFC##	
 	
 	
 	
 	
rc   c                    t          | j        dd          }t          |t          d          t          d          t          j                  }d|_        |                     |d|d           d S )	Nr}   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   r   r   r   r   traceback_entryr   r`   opbranchs      ra   test_get_attr_mergedz/TestFunctionEmitterVisitor.test_get_attr_merged  su    TVS!$$JqMM:a==&/JJ!0  	 	
 	
 	
 	
 	
rc   c                Z    |                      t          | j        dd          d           d S )Nr~   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    ra   test_get_attr_with_bitmapz4TestFunctionEmitterVisitor.test_get_attr_with_bitmap  s:    DFD!$$	
 	
 	
 	
 	
rc   c                ^    |                      t          | j        ddd          d           d S )Nrt   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    ra   !test_get_attr_nullable_with_tuplez<TestFunctionEmitterVisitor.test_get_attr_nullable_with_tuple  s?    DFCd;;;	
 	
 	
 	
 	
rc   c                f    |                      t          | j        d| j        d          d           d S )Nr}   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)   r   re   r   s    ra   test_set_attrz(TestFunctionEmitterVisitor.test_set_attr  s>    DFC++	
 	
 	
 	
 	
rc   c                f    |                      t          | j        d| j        d          d           d S )Nr|   r   zS((mod___AObject *)cpy_r_r)->_x = cpy_r_b;
               cpy_r_r0 = 1;
            )r   r)   r   rl   r   s    ra   test_set_attr_non_refcountedz7TestFunctionEmitterVisitor.test_set_attr_non_refcounted  s>    DFC++	
 	
 	
 	
 	
rc   c                    t          | j        d| j        d          }t          |_        |                     |d           d S )Nr}   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)   r   re   r   r   r   r`   r  s     ra   test_set_attr_no_errorz1TestFunctionEmitterVisitor.test_set_attr_no_error%  sJ    TVS$&!,,!	
 	
 	
 	
 	
rc   c                    t          | j        d| j        d          }t          |_        |                     |d           d S )Nr|   r   z6((mod___AObject *)cpy_r_r)->_x = cpy_r_b;
            )r)   r   rl   r   r   r   r  s     ra   %test_set_attr_non_refcounted_no_errorz@TestFunctionEmitterVisitor.test_set_attr_non_refcounted_no_error1  sJ    TVS$&!,,!	
 	
 	
 	
 	
rc   c                    |                      t          | j        d| j        d          d           |                      t          | j        d| j        d          d           d S )Nr~   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;
            r   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)   r   rq   ro   r   s    ra   test_set_attr_with_bitmapz4TestFunctionEmitterVisitor.test_set_attr_with_bitmap:  st     	DFD$(A..	
 	
 	
 	DFD$(A..	
 	
 	
 	
 	
rc   c                x    t          | j        d| j        d          }d|_        |                     |d           d S )Nr~   r   Tr  )r)   r   rq   is_initr   r  s     ra   test_set_attr_init_with_bitmapz9TestFunctionEmitterVisitor.test_set_attr_init_with_bitmapP  sJ    TVT48Q//
	
 	
 	
 	
 	
rc   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   rY   rH   r   rk   rj   r   r   r   r   r   s    ra   test_dict_get_itemz-TestFunctionEmitterVisitor.test_dict_get_item]  sm    $455! , ' , +  A	
 	
 	
 	
 	
rc   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   rY   rJ   r   rk   ri   rj   r   r   r   r   r   s    ra   test_dict_set_itemz-TestFunctionEmitterVisitor.test_dict_set_itemk  sq    $455) , ' , +  J	
 	
 	
 	
 	
rc   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   rY   rK   r   rk   ri   r   r   r   r   r   s    ra   test_dict_updatez+TestFunctionEmitterVisitor.test_dict_updatey  sk    N233 *%*)  ?	
 	
 	
 	
 	
rc   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   rI   r   r   r   r   r   r   s    ra   test_new_dictz(TestFunctionEmitterVisitor.test_new_dict  sZ    +'"'&  +	
 	
 	
 	
 	
rc   c                V    |                      d| j        | j        | j        d           d S )Ninz-cpy_r_r0 = PyDict_Contains(cpy_r_d, cpy_r_o);)r   rl   ri   rk   r   s    ra   test_dict_containsz-TestFunctionEmitterVisitor.test_dict_contains  s6    ""$&$&$&*]	
 	
 	
 	
 	
rc   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"   rD   rm   rn   ADDSUBMULDIVMODANDORXOR
LEFT_SHIFTRIGHT_SHIFTrq   rr   r   s    ra   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	
 	
 	
 	
 	
rc   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   rm   rn   SLTro   rp   rq   rr   ULTri   rj   EQNEQr   s    ra   test_comparison_opz-TestFunctionEmitterVisitor.test_comparison_op  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	
 	
 	
 	
 	
rc   c                b    |                      t          t          | j                  d           d S )Nzcpy_r_r0 = *(char *)cpy_r_ptr;)r   r%   r9   rs   r   s    ra   test_load_memz(TestFunctionEmitterVisitor.test_load_mem  s+    $(;;=abbbbbrc   c                n    |                      t          t          | j        | j                  d           d S )Nz*(char *)cpy_r_ptr = cpy_r_b;)r   r+   r9   rs   rl   r   s    ra   test_set_memz'TestFunctionEmitterVisitor.test_set_mem  s:    ?DHdf557Z	
 	
 	
 	
 	
rc   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   )rl   ro   rq   rl   z8cpy_r_r0 = (CPyPtr)((CPyPtr)cpy_r_o + offsetof(Foo, b));ro   z:cpy_r_r0 = (CPyPtr)((CPyPtr)cpy_r_o + offsetof(Foo, i32));rq   z:cpy_r_r0 = (CPyPtr)((CPyPtr)cpy_r_o + offsetof(Foo, i64));)r4   r9   r=   r>   r   r   ri   )r`   r   s     ra   test_get_element_ptrz/TestFunctionEmitterVisitor.test_get_element_ptr  s    &&&:JL\(]
 
 	$&!S))J	
 	
 	
 	$&!U++L	
 	
 	
 	$&!U++L	
 	
 	
 	
 	
rc   c                    |                      t          t          | j                  d| j                  d           |                      t          | j        d| j                  d           d S )Nrl   zcpy_r_r0.b = cpy_r_b;r|   z7cpy_r_r0 = (Foo) { cpy_r_st.b, cpy_r_i32, cpy_r_st.y };)r   r*   r.   r   rl   r   ro   r   s    ra   test_set_elementz+TestFunctionEmitterVisitor.test_set_element  ss    uT-..TV<<>Y	
 	
 	
 	twTX..I	
 	
 	
 	
 	
rc   c                X    |                      t          t          d          d           d S )NPyDict_Typez$cpy_r_r0 = (PyObject *)&PyDict_Type;)r   r#   rB   r   s    ra   test_load_addressz,TestFunctionEmitterVisitor.test_load_address  s5    )=996	
 	
 	
 	
 	
rc   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   rB   r'   r]   r^   r   r   ri   rj   )r`   rt   rA  s      ra   test_assign_multiz,TestFunctionEmitterVisitor.test_assign_multi  sr    $a((Qa   DFDG,--/`	
 	
 	
 	
 	
rc   c           	        t          t          d          }|                     t          |t	          dt                              d           |                     t          |t	          dt                              d           d S )NrA  l        zcpy_r_a = 2147483648LL;izcpy_r_a = 2147483647;r'   r>   r   r   r!   r`   rA  s     ra   test_long_unsignedz-TestFunctionEmitterVisitor.test_long_unsigned   s    %s++1gg'78899;X	
 	
 	
 	1gm-=>>??A\	
 	
 	
 	
 	
rc   c           	        t          t          d          }|                     t          |t	          dt                              d           |                     t          |t	          dt                              d           d S )NrA  i  zcpy_r_a = -2147483647;i   zcpy_r_a = -2147483648LL;rD  rE  s     ra   test_long_signedz+TestFunctionEmitterVisitor.test_long_signed)  s    %s++1gn.>??@@B^	
 	
 	
 	1gj*:;;<<>\	
 	
 	
 	
 	
rc   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   r   r<   r   r   r   r   r   r`   r  r   r  s       ra   test_cast_and_branch_mergez5TestFunctionEmitterVisitor.test_cast_and_branch_merge2  s}    $&/1--]]
JqMM:vGG!0 " 	 	
 	
 	
 	
 	
rc   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;
            }
            
   FrJ  )r   r   r<   r   r   r   r   r   r   s      ra   test_cast_and_branch_no_merge_1z:TestFunctionEmitterVisitor.test_cast_and_branch_no_merge_1F  s~    $&/1--JqMM:a==&/JJ!0 ""~~ 	 	
 	
 	
 	
 	
rc   c                    t          | j        t          d          }t          d          }t	          |t          d          |t          j                  }d|_        d|_        |                     |d||           d S )Nr   r   r   Tr   rN  r   r   )	r   r   r<   r   r   r   r   r   r   rK  s       ra   test_cast_and_branch_no_merge_2z:TestFunctionEmitterVisitor.test_cast_and_branch_no_merge_2Y  s    $&/1--]]
JqMM:vGG!0 " 	 	
 	
 	
 	
 	
rc   c                    t          | j        t          d          }t          d          }t	          |t          d          |t          j                  }d|_        |                     |d||           d S )Nr   r   r   r   rN  rR  )r   r   r<   r   r   r   r   r   rK  s       ra   test_cast_and_branch_no_merge_3z:TestFunctionEmitterVisitor.test_cast_and_branch_no_merge_3m  sz    $&/1--]]
JqMM:v{CC!0 " 	 	
 	
 	
 	
 	
rc   c                    t          | j        t          d          }t          d          }t	          |t          d          |t          j                  }|                     |d||           d S )Nr   r   r   rN  rR  )r   r   r<   r   r   r   r   rK  s       ra   test_cast_and_branch_no_merge_4z:TestFunctionEmitterVisitor.test_cast_and_branch_no_merge_4  sr    $&/1--]]
JqMM:vGG " 	 	
 	
 	
 	
 	
rc   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 )NrA  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
   rd   r?   rE  s     ra   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\     rc   c                    t          | j                  }|                     |t          |          gt          rdnd           d S Nr   CPy_INCREF(cpy_r_r0);)r   r   r   r    r	   r   s     ra   test_inc_ref_nonez,TestFunctionEmitterVisitor.test_inc_ref_none  s?    	NN!VAYY})YBYZZZZZrc   c                    t          | j                  }|                     |t          |          gt          rdnd           d S r]  )r   rl   r   r    r	   r   s     ra   test_inc_ref_boolz,TestFunctionEmitterVisitor.test_inc_ref_bool  s?    KK!VAYY})YBYZZZZZrc   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   r^  )iii  ilX)r$   rB   r   r    r	   )r`   r|   rl   s      ra   test_inc_ref_int_literalz3TestFunctionEmitterVisitor.test_inc_ref_int_literal  s    & 	_ 	_AA011Aa^=-]RRF]^^^^- 	F 	FAA011Aa^-DEEEE	F 	Frc   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 = "\\";re     
z\n   z\r   	z\t   "z\"z\\       z\x%.2xasciizcpy_r_s = "z";)r'   r;   r   r   r   rangebytesdecode)r`   rh  irl   targets        ra   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rc   NF)r   r   r   r  Op | list[Op]expectedrY   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     ra   
<listcomp>z:TestFunctionEmitterVisitor.assert_emit.<locals>.<listcomp>  s"    :::D

3:::rc   c              3  @   K   | ]}|                     d           V  dS )
N)endswithr  s     ra   	<genexpr>z9TestFunctionEmitterVisitor.assert_emit.<locals>.<genexpr>  s.      @@44==&&@@@@@@rc   c                8    g | ]}|                     d           S )r  )rstripr  s     ra   r  z:TestFunctionEmitterVisitor.assert_emit.<locals>.<listcomp>  s$    CCCdD))CCCrc   r  c                8    g | ]}|                     d           S r  r  r  s     ra   r  z:TestFunctionEmitterVisitor.assert_emit.<locals>.<listcomp>  s"    EEEd$**S//EEErc   zGenerated code unexpectedT)msg	tracebackr   )r   
isinstancer&   opsr^   extendr1   r]   r   r   	fragmentsr   r   r   op_indexacceptallr  r  splitr   )r`   r  ry  r   r   r   r   blockvalue_namesemitterdeclarationsvisitorfragsactual_linesexpected_liness                  ra   r   z&TestFunctionEmitterVisitor.assert_emit  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((((((rc   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  )r  ru  argss     ra   r  zDTestFunctionEmitterVisitor.assert_emit_binary_op.<locals>.<listcomp>
  s    ???AQ???rc   r   FzCould not find matching op)rQ   rR   r   	arg_typesorderingr   r   r   r   r   r   r   )	r`   r  r  r  r  ry  r  descr  s	           @ra   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6rc   rU   rV   r\   )r  rx  ry  rY   r   rz  r   r{  r   r|  r   r{  rU   rV   )r  rY   r  r0   r  r0   r  r0   ry  rY   rU   rV   )M__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.  r4  r6  r8  r:  r<  r?  rB  rF  rH  rL  rP  rS  rU  rW  r[  r_  ra  rf  rw  r   r   r  rc   ra   rT   rT   T   sR       CC4F 4F 4F 4Fl= = = =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
 
 
 


W 
W 
W 
W(
 (
 (
 (
T
 
 
 
4
 
 
 


 

 

 


 
 
 

 
 
 
&
 
 
 
	
 	
 	
 	
	
 	
 	
 	

 
 
 


 

 

 


 
 
 

 
 
 
,
 
 
 

 
 
 

 
 
 

 
 
 

 
 
 

 
 
 

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


 
 
 
"	
 	
 	
 	

 
 
 

 
 
 

 
 
 

 
 
 

 
 
 
(
 
 
 
&
 
 
 
(
 
 
 
&
 
 
 
$   ([ [ [ [[ [ [ [F F F FN N N N8 )-	/) %)/) /) /) /) /) /)b7 7 7 7 7 7rc   rT   c                  &    e Zd ZddZddZddZdS )TestGenerateFunctionrU   rV   c                    t          dt                    | _        t          t          d          | _        t          d          | _        d S )Nargr   )r   r?   r  r'   r_   r   r  r   s    ra   r   zTestGenerateFunction.setUp  s5    e^44NE22]]


rc   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          d          |          }t!          ||dd           |j        }t%          g d|d           d S )	Nmyfuncr{   Tr  r  )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   rG   r   r  r   )r`   fnr  r  results        ra   test_simplez TestGenerateFunction.test_simple$  s    
fTX..///XtUM48*n,U,UVVXJZL
 

 ,BKCC.y)A)A4HH+VV Wi@@@""bbb(	
 	
 	
 	
 	
 	
rc   c                p   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          d          |          }t)          ||dd           |j        }t-          g d|d	           d S )
Nr   r  r{   Tr  r  )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   rG   r   r  r   )r`   r_   r  r  r  r  r  s          ra   test_registerz"TestGenerateFunction.test_register5  s"   ~&&C$$
b!!!
kmm,,,XtUM48*o,V,VWWXJZL
 

 ,BKCC.y)A)A4HH+VV Wi@@@""   (
	
 
	
 
	
 
	
 
	
 
	
rc   Nr  )r  r  r  r   r  r  r  rc   ra   r  r    sP        # # # #

 
 
 
"
 
 
 
 
 
rc   r  )f
__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   rC   rD   rE   mypyc.irbuild.vtablerF   mypyc.namegenrG   mypyc.primitives.dict_opsrH   rI   rJ   rK   mypyc.primitives.int_opsrL   mypyc.primitives.list_opsrM   rN   rO   mypyc.primitives.misc_opsrP   mypyc.primitives.registryrQ   mypyc.subtyperR   TestCaserT   r  r  rc   ra   <module>r     s6   " " " " " "  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 $ $ $ $ $ $G7 G7 G7 G7 G7!2 G7 G7 G7T/
 /
 /
 /
 /
8, /
 /
 /
 /
 /
rc   