o
    2gL                     @  s  d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZ ddlmZmZmZmZmZmZ ddlmZ ddlmZ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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN dd
lOmPZP ddlQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZ dddZ[d ddZ\d!ddZ]G dd deAd Z^dS )"z+Code generation for native function bodies.    )annotations)Final)frequently_executed_blocks)DEBUG_ERRORSEmitterTracebackAndGotoHandlerc_array_initializer)MODULE_PREFIXNATIVE_PREFIX
REG_PREFIXSTATIC_PREFIXTYPE_PREFIXTYPE_VAR_PREFIX)ClassIR)FUNC_CLASSMETHODFUNC_STATICMETHODFuncDeclFuncIR
all_values)3	ERR_FALSENAMESPACE_MODULENAMESPACE_STATICNAMESPACE_TYPENAMESPACE_TYPE_VARAssignAssignMulti
BasicBlockBoxBranchCallCallCCastComparisonOp	ControlOpDecRefExtendFloatFloatComparisonOpFloatNegFloatOpGetAttrGetElementPtrGotoIncRef
InitStaticIntegerIntOp	KeepAliveLoadAddressLoadErrorValue
LoadGlobalLoadLiteralLoadMem
LoadStatic
MethodCallOp	OpVisitorPrimitiveOpRaiseStandardErrorRegisterReturnSetAttrSetMemTruncateTupleGetTupleSetUnborrowUnboxUnreachableValue)generate_names_for_ir)	RArrayRStructRTupleRTypeis_int32_rprimitiveis_int64_rprimitiveis_int_rprimitiveis_pointer_rprimitive	is_taggedfnr   emitterr   returnstrc                   s:   d  fdd| jD pd} | j}| d| dS )N, c                 3  s    | ]	}  |jV  qd S N)ctypetype.0argrS    N/home/garg/my-data/venv/lib/python3.10/site-packages/mypyc/codegen/emitfunc.py	<genexpr>W   s    z'native_function_type.<locals>.<genexpr>voidz (*)())joinargsrX   ret_type)rR   rS   rd   retr^   r]   r_   native_function_typeV   s   rg   r   c                 C  s\   g }| j jD ]}|||j t |j  qdj|| j j|	| d
|p+ddS )Nz{ret_type}{name}({args})rV   ra   )re   namerd   )sigrd   appendctype_spacedrY   r   rh   formatre   native_function_namerc   )rR   rS   rd   r\   r^   r^   r_   native_function_header\   s   "rn   source_pathmodule_nameNonec              	   C  s(  t |j}t| j| j}t |j|}t||||}|t| j| d |	  t
| j| jD ]1}t|jtr>||j t|jtrEq0|| jv rKq0||j}	d}
|dj|	t|| |
d q0| j}t|D ]\}}||_qi| jD ]6}|j}t|tsJ | D ]%}|j|jd k}t|totdd | D }|r|rd| j|j _qqtt| jd	 }tt|D ]J}|| }||v|_d }|d t|k r||d  }| | ||_!|j"}||_"d	|_#|j#t|k r||j# $| | j#d7  _#|j#t|k sq|d
 |%| |%| d S )Nz { z{ctype}{prefix}{name}{init};)rX   prefixrh   init   c                 s  s    | ]}t |tV  qd S rW   )
isinstancer*   r[   sr^   r^   r_   r`      s    

z+generate_native_function.<locals>.<genexpr>Tr   })&r   contextrH   arg_regsblocksFunctionEmitterVisitor	emit_linern   declindentr   rv   rY   rK   declare_tuple_structrI   rk   rl   r   	enumeratelabel
terminatorr#   targetsr   anysources
referencedr   rangelenrare
emit_label
next_blockopsop_indexacceptemit_from_emitter)rR   rS   ro   rp   declarationsnamesbodyvisitorrrX   rt   r|   iblockr   targetis_next_blockis_problematic_opcommonr   r   r^   r^   r_   generate_native_functionh   sn   






r   c                   @  sj  e Zd ZU dd	d
ZdddZdddZdddZdddZdddZdddZ	dddZ
dd!d"Zdd$d%Zdd*d+Zdd-d.Zdd0d1Zdd3d4ZeeeeeeeeiZd5ed6< dd8d9Zdd;d<Zdd>d?ZddBdCZddEdFZddHdIZ ddKdLZ!ddNdOZ"ddQdRZ#ddTdUZ$ddWdXZ%ddZd[Z&dd]d^Z'dd`daZ(ddcddZ)ddfdgZ*ddidjZ+ddldmZ,ddodpZ-ddrdsZ.ddudvZ/ddxdyZ0dd{d|Z1dd~dZ2dddZ3dddZ4dddZ5dddZ6dddZ7dddZ8dddZ9dddZ:dddZ;dddZ<dddddZ=dddZ>dddZ?dddZ@dddZAdddZBdddZCdddZDdddZEdS )r}   rS   r   r   ro   rU   rp   rT   rq   c                 C  sF   || _ |j| _|| _|| _|| _|jj| _d| _d | _g | _	d| _
d S )NFr   )rS   r   r   ro   rp   rz   literalsr   r   r   r   )selfrS   r   ro   rp   r^   r^   r_   __init__   s   

zFunctionEmitterVisitor.__init__c                 C  s
   | j  S rW   )rS   	temp_namer   r^   r^   r_   r      s   
z FunctionEmitterVisitor.temp_nameopr,   c                 C  s*   |j | jur| d|  |j   d S d S )Ngoto %s;)r   r   r~   r   r   r^   r^   r_   
visit_goto   s   z!FunctionEmitterVisitor.visit_gotor   c                 C  s  |j |j}}|j}d}|| ju r |jd u r ||}}| }d}|r$dnd}d}|jtjkr;| |j	}| | }n:|jtj
krq|j	j}	|rIdnd}
t|	tr_| j|	| |j	| j|
}n| |j	 d|
 d| |	 }nJ d|jd us}|jr|sd	| d
}nd| d
}|| ju r|jd u r|| jur| d| d| | d d S d S | d| d | | | d| | d d S | d| d | | || jur| d| |  | dd| |  d S )NFT!rr   !=== zInvalid branchz	unlikely(rb   zlikely(zif (z) goto ;z) {r   ry   z} elsez    goto %s;)truefalsenegatedr   traceback_entryr   r   BOOLregvalueIS_ERRORrY   rv   rK   rS   tuple_undefined_check_condc_error_valuer   r~   r   emit_traceback
emit_lines)r   r   r   r   r   negated_rarenegcondexpr_resulttypcomparer^   r^   r_   visit_branch   sL   

$


"


z#FunctionEmitterVisitor.visit_branchr>   c                 C  s   |  |j}| d|  d S )Nz
return %s;)r   r   r~   )r   r   	value_strr^   r^   r_   visit_return  s   z#FunctionEmitterVisitor.visit_returnrC   c              
   C  sx   |  |}|j}| j| t|jdkr| | d d S t|jD ]\}}| | d| d|  | d q$d S )Nr   z.empty_struct_error_flag = 0;.f = r   )r   
tuple_typerS   r   r   itemsr~   r   )r   r   destr   r   itemr^   r^   r_   visit_tuple_set  s   
$z&FunctionEmitterVisitor.visit_tuple_setr   c                 C  s\   |  |j}|  |j}||kr,|jjjr|jjjsd| }| | d| d d S d S )Nz(void *)r   r   )r   r   srcrY   
is_unboxedr~   r   r   r   r   r^   r^   r_   visit_assign  s   
z#FunctionEmitterVisitor.visit_assignr   c              
     sd   |j j}t|tsJ  |j } d j|j|t	|j
t fdd|j
D ddf  d S )Nz%s%s[%d] = %s;c                      g | ]}  |qS r^   r   rw   r   r^   r_   
<listcomp>*      z=FunctionEmitterVisitor.visit_assign_multi.<locals>.<listcomp>T)indented)r   rY   rv   rI   r   r~   rS   rk   	item_typer   r   r   )r   r   r   r   r^   r   r_   visit_assign_multi  s   z)FunctionEmitterVisitor.visit_assign_multir3   c              	     s   t |jtr6 fdd|jjD }  } d |j|d|   	| d| d d S   	| d 
|j d d S )Nc                   r   r^   )c_undefined_value)r[   r   r   r^   r_   r   0  r   zAFunctionEmitterVisitor.visit_load_error_value.<locals>.<listcomp>z{} {} = {{ {} }};rV   r   r   )rv   rY   rK   typesr   r~   rl   rX   rc   r   r   )r   r   valuestmpr^   r   r_   visit_load_error_value.  s   " (z-FunctionEmitterVisitor.visit_load_error_valuer5   c                 C  s\   | j |j}t|js| jd| ||f |jd d S | jd| ||f |jd d S )Nz%s = CPyStatics[%d];annz#%s = (CPyTagged)CPyStatics[%d] | 1;)r   literal_indexr   rO   rY   r~   r   )r   r   indexr^   r^   r_   visit_load_literal7  s   
"
z)FunctionEmitterVisitor.visit_load_literalobjGetAttr | SetAttrdecl_clr   c                 C  s  d|j | jj d}|jr_|j jjr_t|j|j	}| j
 }| jd| d | jd|d| j|d| | d| d| |j |j	 d}d| d	| d
| dS |j jjrt|jriJ d|| jj d}d| | d| j	|j	 S )a  Generate attribute accessor for normal (non-property) access.

        This either has a form like obj->attr_name for attributes defined in non-trait
        classes, and *(obj + attr_offset) for attributes defined by traits. We also
        insert all necessary C casts here.
        ( *)zsize_t r   z{} = {};zCPy_FindAttrOffset({}, {}, {})z	)->vtable*z	((char *)z + rb   z)->)
class_typestruct_namerS   r   is_traitclass_irlist
attributesr   attrr   r   r~   rl   type_struct_namerX   	attr_type)r   r   r   r   casttrait_attr_indexoffset	attr_castr^   r^   r_   get_attr_expr@  s*   




z$FunctionEmitterVisitor.get_attr_exprr*   c                 C  s  |  |}|  |j}|j}|j}||j\}}|jo|j}|j|j|drT|jr,dnd}	| 	d||	|| j
|j||j|| j| ||j|jf  d S | |||}
| j
	| d|
 d ||j}d }|s| j
j||d||j|dd	 |  }|d ur|j|u r|jtjkr|jd ur|js| ||j|j | 	d
| |j  |}| j
	d |sd}| j
	d|t |jt |j |j!r|j"s|s|s| j
	d | j
#|| |r|j$| j%ur| 	d
| |j$  |  j&d7  _&d S |s	| j
	d d S d S )N)prefer_method_TRAITrr   z1%s = CPY_GET_ATTR%s(%s, %s, %d, %s, %s); /* %s */r   r   r   T)unlikelyr   ry   PyExc_AttributeErrorz4PyErr_SetString({}, "attribute {} of {} undefined");z} else {ru   )'r   r   r   r   attr_detailsr   r   error_overlap
get_methodr~   rS   r   getter_indexr   r   rX   r   r   is_always_definedemit_undefined_attr_checknext_branchr   r   r   r   r   r   emit_attribute_errorrh   r   r   rl   repris_refcountedis_borrowedemit_inc_refr   r   r   )r   r   r   r   rtypecl
attr_rtyper   r   version	attr_expralways_definedmerged_branchbranch	exc_classr^   r^   r_   visit_get_attrd  st   




z%FunctionEmitterVisitor.visit_get_attrBranch | Nonec                 C  s6   | j d t| jk r| j| j d  }t|tr|S d S )Nru   )r   r   r   rv   r   )r   next_opr^   r^   r_   r     s
   
z"FunctionEmitterVisitor.next_branchr?   c                 C  s  |j tkr
| |}| |j}| |j}|j}|j}||j\}}|	|jrm|j
s2|j tks?J d|j|j
|j |f |jrDdnd}	| d||	|| j|j||j||| j| ||j|jf	  d S | |||}
|j
s|jr||j}|s| j||
d||j| | j|
| |s| jd n|jr||js| j|||||j | j|
 d| d |j tkr| j| d	 d S d S )
Nz%s %d %d %sr   rr   z5%s = CPY_SET_ATTR%s(%s, %s, %d, %s, %s, %s); /* %s */r   ry   r   r   z = 1;)
error_kindr   r   r   r   r   r   r   r   r   is_initr   r~   rS   r   setter_indexr   r   rX   r   r   r   r   r   emit_dec_refr   emit_attr_bitmap_set)r   r   r   r   r   r  r  r  r   r  r  r  r^   r^   r_   visit_set_attr  s\   




z%FunctionEmitterVisitor.visit_set_attrr   
PREFIX_MAPr7   c                 C  s\   |  |}| j|j }| j|j|j|}|jtkrd| }| j| d| d|j	d d S )Nz(PyObject *)%sr   r   r   )
r   r  	namespacerS   static_name
identifierrp   r   r~   r   )r   r   r   rs   rh   r^   r^   r_   visit_load_static  s   

 z(FunctionEmitterVisitor.visit_load_staticr.   c                 C  sh   |  |j}| j|j }| j|j|j|}|jtkrd| }| 	| d| d | 
||jj d S )Nz(PyTypeObject *)%sr   r   )r   r   r  r  rS   r  r  rp   r   r~   r   rY   )r   r   r   rs   rh   r^   r^   r_   visit_init_static  s   
z(FunctionEmitterVisitor.visit_init_staticrB   c                 C  sP   |  |}|  |j}| | d| d|j d |js&| ||j d S d S )Nr   r   r   )r   r   r~   r   r   r   rY   r   r^   r^   r_   visit_tuple_get  s   
z&FunctionEmitterVisitor.visit_tuple_getr   rG   c                 C  s   |j s
| |d S dS )Nr   rr   )is_voidr   )r   r   r^   r^   r_   get_dest_assign  s   z&FunctionEmitterVisitor.get_dest_assignr   c              	     sf     |}d fdd|jD } j|j}|j j} | | t	 | d| d dS )zCall native function.rV   c                 3      | ]}  |V  qd S rW   r   rZ   r   r^   r_   r`         z4FunctionEmitterVisitor.visit_call.<locals>.<genexpr>r   );N)
r  rc   rd   rS   get_group_prefixrR   cnamer   r~   r
   )r   r   r   rd   libr   r^   r   r_   
visit_call	  s
   
&z!FunctionEmitterVisitor.visit_callr8   c                   s6    |} |j}|j}|j}|j}|j|}|dus J ||}|jj	t
kr-g n|jj	tkr:d| dgn|g}	d|	 fdd|jD  }
t| j}|jjrXdnd}|rz j|j} | | t | j d	|
 d
 dS ||} d||| j|j|| j||
|j	 dS )zCall native method.Nz(PyObject *)Py_TYPE(rb   rV   c                   r   r^   r   rZ   r   r^   r_   r   &  r   z<FunctionEmitterVisitor.visit_method_call.<locals>.<listcomp>r   rr   r   r  z4{}CPY_GET_METHOD{}({}, {}, {}, {}, {})({}); /* {} */)r  r   r   receiver_typer   methodr   is_method_finalr   kindr   r   rc   rd   rg   rS   r   r  r~   r
   r   r   method_indexrl   r   r   )r   r   r   r   r  r   rh   r$  	is_directobj_argsrd   mtyper  r!  
method_idxr^   r   r_   visit_method_call  s@   

.

z(FunctionEmitterVisitor.visit_method_callr-   c                 C  s    |  |j}| ||jj d S rW   )r   r   r   rY   r   r   r   r^   r^   r_   visit_inc_ref>  s   z$FunctionEmitterVisitor.visit_inc_refr$   c                 C  s&   |  |j}| j||jj|jd d S )N)is_xdec)r   r   r  rY   r/  r-  r^   r^   r_   visit_dec_refB  s   z$FunctionEmitterVisitor.visit_dec_refr   c                 C  s*   | j j| |j| ||jjdd d S )NT)
can_borrow)rS   emit_boxr   r   rY   r   r^   r^   r_   	visit_boxF  s   *z FunctionEmitterVisitor.visit_boxr!   c                 C  s   |   }d }|d ur8|j|u r8|jtjkr8|jd ur8|js8|j| ju r8t	| 
|j| j| j|j}|  jd7  _| jj| |j| ||j|jj|d d S )Nru   )src_typeerror)r   r   r   r   r   r   r   r   r   r   r   r   ro   rp   r   rS   	emit_castr   r   rY   )r   r   r  handlerr^   r^   r_   
visit_castI  s&   



z!FunctionEmitterVisitor.visit_castrE   c                 C  s$   | j | |j| ||j d S rW   )rS   
emit_unboxr   r   rY   r   r^   r^   r_   visit_unboxb  s   $z"FunctionEmitterVisitor.visit_unboxrF   c                 C  s   | j d d S )NzCPy_Unreachable();rS   r~   r   r^   r^   r_   visit_unreachablee     z(FunctionEmitterVisitor.visit_unreachabler<   c                 C  s   |j d ur<t|j tr!|j dd}| jd|j d| d n&t|j tr8| jd|j| j	|j  nJ d| jd	|j d
 | j| 	| d d S )N"z\"zPyErr_SetString(PyExc_z, "z");zPyErr_SetObject(PyExc_{}, {});Fz)op value type must be either str or ValuezPyErr_SetNone(PyExc_r  z = 0;)
r   rv   rU   replacerS   r~   
class_namerG   rl   r   )r   r   messager^   r^   r_   visit_raise_standard_errorh  s   
z1FunctionEmitterVisitor.visit_raise_standard_errorr    c                   sR   |j rd}n |}d fdd|jD } j| |j d| d d S )Nrr   rV   c                 3  r  rW   r   rZ   r   r^   r_   r`     r  z6FunctionEmitterVisitor.visit_call_c.<locals>.<genexpr>r   r  )r  r  rc   rd   rS   r~   function_name)r   r   r   rd   r^   r   r_   visit_call_cz  s
   
"z#FunctionEmitterVisitor.visit_call_cr;   c                 C  s   t d|jj d)Nzunexpected PrimitiveOp z%: they must be lowered before codegen)RuntimeErrordescrh   r   r^   r^   r_   visit_primitive_op  s   z)FunctionEmitterVisitor.visit_primitive_oprA   c                 C  0   |  |}|  |j}| | d| d d S Nr   r   r   r   r~   )r   r   r   r   r^   r^   r_   visit_truncate  s   
z%FunctionEmitterVisitor.visit_truncater%   c                 C  sX   |  |}|  |j}|jr| |jj}n| |jj}| | d| | d d S rI  )r   r   signedemit_signed_int_castrY   emit_unsigned_int_castr~   )r   r   r   r   src_castr^   r^   r_   visit_extend  s   
z#FunctionEmitterVisitor.visit_extendr4   c                 C  s,   |  |}| j| d|j d|jd d S )Nr   r   r   )r   r~   r  r   )r   r   r   r^   r^   r_   visit_load_global  s   
"z(FunctionEmitterVisitor.visit_load_globalr0   c              
   C  s   |  |}|  |j}|  |j}|jtjkr)| |jj| }| |jj| }| | d| d|j	|j  d| d d S Nr   r   r   )
r   lhsrhsr   r0   RIGHT_SHIFTrM  rY   r~   op_strr   r   r   rS  rT  r^   r^   r_   visit_int_op  s   
.z#FunctionEmitterVisitor.visit_int_opr"   c                 C  s  |  |}|  |j}|  |j}d}d}|jtjtjtjtjfv r1| 	|jj
}| 	|jj
}nC|jtjtjtjtjfv rM| |jj
}| |jj
}n't|jtra|jjdk ra| 	|jj
}nt|jtrt|jjdk rt| 	|jj
}| | d| | d|j|j  d| | d
 d S )Nrr   r   r   r   r   )r   rS  rT  r   r"   SLTSGTSLESGErM  rY   ULTUGTULEUGErN  rv   r/   r   r~   rV  )r   r   r   rS  rT  lhs_castrhs_castr^   r^   r_   visit_comparison_op  s    
6z*FunctionEmitterVisitor.visit_comparison_opr)   c              
   C  s|   |  |}|  |j}|  |j}|jtjkr.| | d| d|j|j  d| d d S | | d| d| d d S )Nr   r   r   z = fmod(rV   r  )r   rS  rT  r   r)   MODr~   rV  rW  r^   r^   r_   visit_float_op  s   
. z%FunctionEmitterVisitor.visit_float_opr(   c                 C  rH  )Nz = -r   rJ  r   r^   r^   r_   visit_float_neg  s   
z&FunctionEmitterVisitor.visit_float_negr'   c              
   C  sP   |  |}|  |j}|  |j}| | d| d|j|j  d| d d S rR  )r   rS  rT  r~   rV  r   rW  r^   r^   r_   visit_float_comparison_op  s   
.z0FunctionEmitterVisitor.visit_float_comparison_opr6   c                 C  sB   |  |}|  |j}| |j}| | d| d| d d S )Nz = *(r   r   )r   r   rX   rY   r~   )r   r   r   r   rY   r^   r^   r_   visit_load_mem  s   
 z%FunctionEmitterVisitor.visit_load_memr@   c              	   C  sR   |  |j}|  |j}| |j}||kr'| d| d| d| d d S d S )Nz*(r   r   r   )r   r   r   rX   	dest_typer~   )r   r   r   r   ri  r^   r^   r_   visit_set_mem  s   "z$FunctionEmitterVisitor.visit_set_memr+   c              	   C  sb   |  |}|  |j}t|jtsJ |j|jjv sJ d| d||j	j
|jj||j d S )NzInvalid field name.z{} = ({})&(({} *){})->{};)r   r   rv   r4  rJ   fieldr   r~   rl   rY   _ctyperh   r   r^   r^   r_   visit_get_element_ptr  s   
z,FunctionEmitterVisitor.visit_get_element_ptrr2   c                 C  s   |j }| |}t|jtr| |j}nt|jtr/| j|jj }| j	|jj
|jj|}n|j}| | d|j d| d d S )Nz = (z)&r   )rY   r   rv   r   r=   r7   r  r  rS   r  r  rp   r~   rl  )r   r   r   r   r   rs   r^   r^   r_   visit_load_address  s   
"z)FunctionEmitterVisitor.visit_load_addressr1   c                 C  s   d S rW   r^   r   r^   r^   r_   visit_keep_alive  s   z'FunctionEmitterVisitor.visit_keep_aliverD   c                 C  rH  rI  rJ  r   r^   r^   r_   visit_unborrow  s   
z%FunctionEmitterVisitor.visit_unborrowr   r   c                 C     | j |S rW   )rS   r   )r   r   r^   r^   r_   r        zFunctionEmitterVisitor.labelr   c                 C  s   t |tr=|j}|dkrt|jrdS t|}|dkr+|dkr%|d7 }|S |d7 }|S |dkr3d}|S |d	kr;|d7 }|S t |tr[t|j}|d
krMdS |dkrSdS |dkrYdS |S | j	|S )Nr   NULLl        l            ULLLLl         z(-9223372036854775807LL - 1)i   infINFINITYz-infz	-INFINITYnanNAN)
rv   r/   r   rP   rY   rU   r&   r   rS   r   )r   r   valrx   r   r^   r^   r_   r     s6   


zFunctionEmitterVisitor.regr  rL   c                 C  rq  rW   )rS   rX   r   r  r^   r^   r_   rX   $  rr  zFunctionEmitterVisitor.ctypec                 C  rq  rW   )rS   r   r{  r^   r^   r_   r   '  rr  z$FunctionEmitterVisitor.c_error_valuec                 C  rq  rW   )rS   r   r{  r^   r^   r_   r   *  rr  z(FunctionEmitterVisitor.c_undefined_valueNr   liner   objectc                C  s   | j j||d d S )Nr   r;  )r   r|  r   r^   r^   r_   r~   -  s   z FunctionEmitterVisitor.emit_linelinesc                 G  s   | j j|  d S rW   )rS   r   )r   r~  r^   r^   r_   r   0  r=  z!FunctionEmitterVisitor.emit_linesc                 C  s   | j j||| jd d S )N)r   )rS   r   r   )r   r   r  r^   r^   r_   r   3  s   z#FunctionEmitterVisitor.emit_inc_refr/  boolc                 C  s   | j j|||| jd d S )N)r/  r   )rS   r  r   )r   r   r  r/  r^   r^   r_   r  6  s   z#FunctionEmitterVisitor.emit_dec_refc                 C  s   | j | d S rW   )r   r~   )r   r|  r^   r^   r_   emit_declaration9  r=  z'FunctionEmitterVisitor.emit_declarationc                 C  s(   |j d ur| j| j| j|j  d S d S rW   )r   rS   r   ro   rp   r   r^   r^   r_   r   <  s   
z%FunctionEmitterVisitor.emit_tracebackr@  r   c              	   C  sd   |j d usJ | jd| j}| d| jdd|j d |||j d |f  tr0| d d S d S )Nglobalsz3CPy_AttributeError("%s", "%s", "%s", "%s", %d, %s);\z\\r   ru   z7assert(PyErr_Occurred() != NULL && "failure w/o err!");)r   rS   r  rp   r~   ro   r?  r   )r   r   r@  r   globals_staticr^   r^   r_   r   @  s    z+FunctionEmitterVisitor.emit_attribute_errorrY   c                 C  s   t |rdS dS )Nz(Py_ssize_t)rr   )rQ   r   rY   r^   r^   r_   rM  Q  s   z+FunctionEmitterVisitor.emit_signed_int_castc                 C  s   t |rdS t|rdS dS )Nz
(uint32_t)z
(uint64_t)rr   )rM   rN   r  r^   r^   r_   rN  W  s
   z-FunctionEmitterVisitor.emit_unsigned_int_cast)
rS   r   r   r   ro   rU   rp   rU   rT   rq   )rT   rU   )r   r,   rT   rq   )r   r   rT   rq   )r   r>   rT   rq   )r   rC   rT   rq   )r   r   rT   rq   )r   r   rT   rq   )r   r3   rT   rq   )r   r5   rT   rq   )r   rU   r   r   r   r   rT   rU   )r   r*   rT   rq   )rT   r  )r   r?   rT   rq   )r   r7   rT   rq   )r   r.   rT   rq   )r   rB   rT   rq   )r   rG   rT   rU   )r   r   rT   rq   )r   r8   rT   rq   )r   r-   rT   rq   )r   r$   rT   rq   )r   r   rT   rq   )r   r!   rT   rq   )r   rE   rT   rq   )r   rF   rT   rq   )r   r<   rT   rq   )r   r    rT   rq   )r   r;   rT   rq   )r   rA   rT   rq   )r   r%   rT   rq   )r   r4   rT   rq   )r   r0   rT   rq   )r   r"   rT   rq   )r   r)   rT   rq   )r   r(   rT   rq   )r   r'   rT   rq   )r   r6   rT   rq   )r   r@   rT   rq   )r   r+   rT   rq   )r   r2   rT   rq   )r   r1   rT   rq   )r   rD   rT   rq   )r   r   rT   rU   )r   rG   rT   rU   )r  rL   rT   rU   )r|  rU   r   r}  rT   rq   )r~  rU   rT   rq   )r   rU   r  rL   rT   rq   )r   rU   r  rL   r/  r  rT   rq   )r|  rU   rT   rq   )r   r   r@  rU   r   rU   rT   rq   )rY   rL   rT   rU   )F__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r
  r   r  r   r   r   r   r   r	   r   r   r  __annotations__r  r  r  r  r"  r,  r.  r0  r3  r8  r:  r<  rB  rD  rG  rK  rP  rQ  rX  rc  re  rf  rg  rh  rj  rm  rn  ro  rp  r   r   rX   r   r   r~   r   r   r  r  r   r   rM  rN  r^   r^   r^   r_   r}      s~   
 




4





	
	
$
B
8


	



-










	









	














r}   N)rR   r   rS   r   rT   rU   )rR   r   rS   r   rT   rU   )
rR   r   rS   r   ro   rU   rp   rU   rT   rq   )___doc__
__future__r   typingr   mypyc.analysis.blockfreqr   mypyc.codegen.emitr   r   r   r   mypyc.commonr	   r
   r   r   r   r   mypyc.ir.class_irr   mypyc.ir.func_irr   r   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   mypyc.ir.pprintrH   mypyc.ir.rtypesrI   rJ   rK   rL   rM   rN   rO   rP   rQ   rg   rn   r   r}   r^   r^   r^   r_   <module>   s     5,


O