
    hi                    *   U d Z ddlm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mZmZ ddlmZ dd	lmZ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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZV ddlWmXZX ddlYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZe d$dZfd%dZgd&dZhd'dZi G d deGd                   Zji Zkdeld <   d(d#ZmdS ))z+Code generation for native function bodies.    )annotations)Final)frequently_executed_blocks)c_string_initializer)DEBUG_ERRORSEmitterTracebackAndGotoHandlerc_array_initializer)GENERATOR_ATTRIBUTE_PREFIXHAVE_IMMORTALMODULE_PREFIXNATIVE_PREFIX
REG_PREFIXSTATIC_PREFIXTYPE_PREFIXTYPE_VAR_PREFIX)ClassIR)FUNC_CLASSMETHODFUNC_STATICMETHODFuncDeclFuncIR
all_valuesget_text_signature)6	ERR_FALSENAMESPACE_MODULENAMESPACE_STATICNAMESPACE_TYPENAMESPACE_TYPE_VARAssignAssignMulti
BasicBlockBoxBranchCallCallCCastComparisonOp	ControlOpCString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
SetElementSetMemTruncateTupleGetTupleSetUnborrowUnboxUndefUnreachableValue)generate_names_for_ir)RArray	RInstanceRStructRTupleRTypeis_bool_or_bit_rprimitiveis_int32_rprimitiveis_int64_rprimitiveis_int_rprimitiveis_none_rprimitiveis_pointer_rprimitive	is_taggedfnr   emitterr   returnstrc                    d                     fd| j        D                       pd}                    | j                  }| d| dS )N, c              3  L   K   | ]}                     |j                  V  d S N)ctypetype).0argr^   s     f/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/mypyc/codegen/emitfunc.py	<genexpr>z'native_function_type.<locals>.<genexpr>g   s1      @@W]]38,,@@@@@@    voidz (*)())joinargsre   ret_type)r]   r^   ro   rets    `  ri   native_function_typerr   f   sZ    99@@@@@@@@@JFD
--
$
$Crk   r   c                X   g }| j         j        D ]?}|                    |                    |j                   t
           |j                    @d                    |                    | j         j                  |	                    |           d
                    |          pd          S )Nz{ret_type}{name}({args})rb   rl   )rp   namero   )sigro   appendctype_spacedrf   r   rt   formatrp   native_function_namern   )r]   r^   ro   rh   s       ri   native_function_headerrz   l   s    Dv{ O Ow++CH55MzM38MMNNNN%,,%%bfo66))"--YYt__& -   rk   funcc                z    t          |           }|dS | d}t          |                    dd                    S )NNULLz
--

asciibackslashreplace)errors)r   r   encode)r{   text_sig	docstrings      ri   native_function_doc_initializerr   x   sJ    !$''Hv%%%I	 0 0AS 0 T TUUUrk   source_pathmodule_nameNonec           	        t          |j                  }t          | j        | j                  }t          |j        |          }t          ||||          }|                    t          | j        |           d           |	                                 t          | j        | j                  D ]}t          |j        t                    r|                    |j                   t          |j        t                    rQ|| j        v r[|                    |j                  }	d}
|                    d                    |	t$          ||         |
                     | j        }t'          |          D ]\  }}||_        | j        D ]}|j        }t          |t,                    s
J |            |                                D ]p}|j        |j        dz   k    }t          |t0                    o*t3          d |                                D                       }|r|rd| j        |j                 _        qt9          | j        d                   }t;          t=          |                    D ]}||         }||v|_        d }|dz   t=          |          k     r||dz            }|                     |           ||_!        |j"        }||_"        d|_#        |j#        t=          |          k     rH||j#                 $                    |           |xj#        dz  c_#        |j#        t=          |          k     H|                    d	           |%                    |           |%                    |           d S )
Nz { z{ctype}{prefix}{name}{init};)re   prefixrt   init   c              3  @   K   | ]}t          |t                    V  d S rd   )
isinstancer0   )rg   ss     ri   rj   z+generate_native_function.<locals>.<genexpr>   sE       G G+,
1g&&G G G G G Grk   Tr   })&r   contextrP   arg_regsblocksFunctionEmitterVisitor	emit_linerz   declindentr   r   rf   rT   declare_tuple_structrQ   rw   rx   r   	enumeratelabel
terminatorr(   targetsr#   anysources
referencedr   rangelenrare
emit_label
next_blockopsop_indexacceptemit_from_emitter)r]   r^   r   r   declarationsnamesbodyvisitorrre   r   r   iblockr   targetis_next_blockis_problematic_opcommonr   r   s                        ri   generate_native_functionr      s    7?++L!"+ry99E7?E**D$T<kRRG4RWgFFKKKLLLKKMMMRY// 
 
aff%% 	1((000aff%% 	$$QV,,*11JU1XD 2  	
 	
 	
 	
 YFf%%  5
  : :%
*i00<<*<<< ((** 	: 	:F"LEK!O;M !+:v > > !3 G G0:0B0B0D0DG G G D D ! :$5 :59	&,'2	: (	!55F3v;; " "q	F*
q53v;;AJ'iS)) !((111! S)) 	NN3l+++d#####rk   c                     e Zd ZU dd	Zdd
ZddZddZddZddZddZ	ddZ
ddZddZddZdd$Zdd&Zdd'Zdd)Zdd+ZeeeeeeeeiZd,ed-<   dd/Zdd1Zdd3Zdd5Z dd7Z!dd9Z"dd>Z#dd@Z$ddBZ%ddDZ&ddFZ'ddHZ(ddJZ)ddLZ*ddNZ+ddPZ,ddRZ-ddTZ.ddVZ/ddXZ0ddZZ1dd\Z2dd^Z3dd`Z4ddbZ5dddZ6ddfZ7ddhZ8ddjZ9ddlZ:ddnZ;ddqZ<ddsZ=ddvZ>ddwZ?ddxZ@dydzdd~ZAddZBddZCddZDddZEddZFddZGddZHddZIdyS )r   r^   r   r   r   r`   r   r_   r   c                    || _         |j        | _        || _        || _        || _        |j        j        | _        d| _        d | _        g | _	        d| _
        d S )NFr   )r^   r   r   r   r   r   literalsr   r   r   r   )selfr^   r   r   r   s        ri   __init__zFunctionEmitterVisitor.__init__   sX     ]
(&&0	-1rk   c                4    | j                                         S rd   )r^   	temp_name)r   s    ri   r   z FunctionEmitterVisitor.temp_name   s    |%%'''rk   opr2   c                    |j         | j        ur2|                     d|                      |j                   z             d S d S )Ngoto %s;)r   r   r   r   r   s     ri   
visit_gotoz!FunctionEmitterVisitor.visit_goto   sD    84?**NN:

28(<(<<===== +*rk   valuerO   comparec                   |j         }t          |t                    r5| j                            ||                     |          | j        |          S |                     |           d| d|                     |           S )N )rf   r   rT   r^   tuple_undefined_check_condregc_error_value)r   r   r   typs       ri   error_value_checkz(FunctionEmitterVisitor.error_value_check   s    jc6"" 	L<::TXXe__d&8'   hhuooKKKK$2D2DS2I2IKKKrk   r#   c                
   |j         |j        }}|j        }d}|| j        u r|j        	||}}| }d}|rdnd}d}|j        t          j        k    r!|                     |j	                  }| | }nA|j        t          j
        k    r"|rdnd}	|                     |j	        |	          }n
J d            |j        |j        r|sd| d	}nd
| d	}|| j        u r|j        <|| j        ur1|                     d| d|                     |           d           d S d S |                     d| d           |                     |           |                     d|                     |          z  d           d S |                     d| d           |                     |           || j        ur+|                     d|                     |          z             |                     dd|                     |          z             d S )NFT!r   !===zInvalid branchz	unlikely(rm   zlikely(if (z) goto ;) {r   r   z} elsez    goto %s;)truefalsenegatedr   traceback_entryr   r#   BOOLr   r   IS_ERRORr   r   r   r   emit_traceback
emit_lines)
r   r   r   r   r   negated_rarenegcondexpr_resultr   s
             ri   visit_branchz#FunctionEmitterVisitor.visit_branch   s\   grxe*4?""r'9'A%D!kGL$cc"5FK((28,,K(;((DDUfo%%%/dd4G))"(G<<DD***** )RW) )*4***((((DO##!)t..NN#J$#J#Jtzz$7G7G#J#J#JKKKKK /. 0d000111##B'''
TZZ-=-= =sCCCCCNN,$,,,---###4?**zDJJt,<,<<===OOHntzz%7H7H&HIIIIIrk   rD   c                j    |                      |j                  }|                     d|z             d S )Nz
return %s;)r   r   r   )r   r   	value_strs      ri   visit_returnz#FunctionEmitterVisitor.visit_return  s2    HHRX&&	|i/00000rk   rJ   c           
     l   |                      |          }|j        }| j                            |           t	          |j                  dk    r|                     | d           d S t          |j                  D ]6\  }}|                     | d| d|                      |           d           7d S )Nr   z.empty_struct_error_flag = 0;.f = r   )r   
tuple_typer^   r   r   itemsr   r   )r   r   destr   r   items         ri   visit_tuple_setz&FunctionEmitterVisitor.visit_tuple_set#  s    xx||]
))*555rx==ANNdAAABBBBB$RX.. C C4$AA!AAAAABBBBC Crk   r   c                   |                      |j                  }|                      |j                  }||k    rD|j        j        j        r|j        j        j        sd| }|                     | d| d           d S d S )Nz(void *)r   r   )r   r   srcrf   
is_unboxedr   r   r   r   r   s       ri   visit_assignz#FunctionEmitterVisitor.visit_assign-  s    xx  hhrv 3;; v{% 'bgl.E '&&&NNd--s---..... ;rk   r    c           
     h    |j         j        }t          |t                    s
J |                                 |j                   }                     d j                            |j                  |t          |j
                  t           fd|j
        D             d          fz             d S )Nz%s%s[%d] = %s;c                :    g | ]}                     |          S  r   )rg   r   r   s     ri   
<listcomp>z=FunctionEmitterVisitor.visit_assign_multi.<locals>.<listcomp>E  s#    $A$A$AQTXXa[[$A$A$Ark   T)indented)r   rf   r   rQ   r   r   r^   rw   	item_typer   r   r
   )r   r   r   r   s   `   ri   visit_assign_multiz)FunctionEmitterVisitor.visit_assign_multi9  s    gl#v&&+++++xx   	))#-88BF#$A$A$A$A"&$A$A$ADQQQ		
 	
 	
 	
 	
rk   r9   c           	     *    t          |j        t                    r fd|j        j        D             }                                 }                     d                                         |j                  |d                    |                                                     	                    |           d| d           d S                       	                    |           d 
                    |j                   d           d S )Nc                :    g | ]}                     |          S r   )c_undefined_value)rg   r   r   s     ri   r   zAFunctionEmitterVisitor.visit_load_error_value.<locals>.<listcomp>K  s'    MMMtd,,T22MMMrk   z{} {} = {{ {} }};rb   r   r   )r   rf   rT   typesr   r   rx   re   rn   r   r   )r   r   valuestmps   `   ri   visit_load_error_valuez-FunctionEmitterVisitor.visit_load_error_valueI  s    bgv&& 	OMMMMrw}MMMF..""CNN.55djj6I6I3PTPYPYZ`PaPabbcccNNdhhrll55s55566666NNdhhrllMMt/A/A"'/J/JMMMNNNNNrk   r;   c                @   | j                             |j                  }t          |j                  s6|                     d|                     |          |fz  |j                   d S |                     d|                     |          |fz  |j                   d S )Nz%s = CPyStatics[%d];annz#%s = (CPyTagged)CPyStatics[%d] | 1;)r   literal_indexr   rY   rf   r   r   )r   r   indexs      ri   visit_load_literalz)FunctionEmitterVisitor.visit_load_literalR  s    ++BH55 )) 	NN1TXXb\\54IIrxNXXXXXNN5"u8MMSUS[      rk   objGetAttr | SetAttrdecl_clr   c                Z   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        r,|j        rJ 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 + rm   z)->)
class_typestruct_namer^   r   is_traitclass_irlist
attributesr  attrr   r   r   rx   type_struct_namere   	attr_type)r   r  r   r  casttrait_attr_indexoffset	attr_casts           ri   get_attr_exprz$FunctionEmitterVisitor.get_attr_expr[  s    F2=,,T\-?@@EEE 	B 6 ? 	B  $G$677==bgFF\++--F''(;&(;(;(;<<<L""!!4;;55g>>0D0#000(  	 	 	 NDJJr}'>'>rw'G'GHHMMMI<y<<3<<6<<<< }%. H"++++G7..t|/ABBGGGAtASAAT\%6%6rw%?%?AAArk   r0   c                   |j         r|                     |           d S |                     |          }|                     |j                  }|j        }|j        }|                    |j                  \  }}|j        o|j	        }|
                    |j        |          r|                    |j                  r'|                     | d|j        |j        g            d S |j        rdnd}	|                     d||	|| j                            |j                  |                    |j                  |                    | j                  |                     |                    |j                            |j        fz             d S |                     |||          }
| j                            | d|
 d           |                    |j                  }d }|sD| j                            ||d||j        |d	           |                                 }||j        |u r|j        t6          j        k    r{|j        t|j        sm|                     ||j         |j                   |                     d
| !                    |j"                  z             |}| j                            d           |smd}| j                            d#                    |tI          |j        %                    tL                              tI          |j                                        |j'        r@|j(        s9|s|s| j                            d           | j        )                    ||           |rP|j*        | j+        ur0|                     d
| !                    |j*                  z             | xj,        dz  c_,        d S |s| j                            d           d S d S )N)prefer_methodr   _TRAITr   z1%s = CPY_GET_ATTR%s(%s, %s, %d, %s, %s); /* %s */r   r   T)unlikelyr   r   PyExc_AttributeErrorz4PyErr_SetString({}, "attribute {} of {} undefined");z} else {r   )-allow_error_valueget_attr_with_allow_error_valuer   r  r
  r  attr_detailsr  r  error_overlap
get_methodis_method_finalemit_method_callr   r^   r  getter_indexr  r   re   r  r  is_always_definedemit_undefined_attr_checknext_branchr   r   r#   r   r   r   emit_attribute_errorrt   r   r   rx   reprremoveprefixr   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_classs                  ri   visit_get_attrz%FunctionEmitterVisitor.visit_get_attr  s    	00444Fxx||hhrv^ oobg66
G@
(@===>> >	,!!"'** %%lllBFBGRHHHHH&(k9((rG55enEE**2733))$*55

5??27#;#;<<	
     **3G<<IL""d#;#;y#;#;#;<<<11"'::N M! 66dC"t 7    ))++%**"I88"2> & ?
 11&"'27KKKzDJJv{4K4K'KLLL(...s333$  6IL**NUU% !5!56P!Q!QRR MM    ' < <$ 7^ 7L**:666))$
;;; , &do==NN:

=;N0O0O#OPPP"# ,&&s+++++, ,rk   c                   |                      |          }|                      |j                  }|j        }|j        }|                    |j                  \  }}|                     |||          }| j                            | d| d           |j	        rr|j
        sm|                     |d          }	| j                            d|	 d           | j                            ||           | j                            d           dS dS dS )zHandle GetAttr with allow_error_value=True.

        This allows NULL or other error value without raising AttributeError.
        r   r   r   r   r   r   N)r   r  r
  r  r  r  r  r^   r   r+  r,  r   r-  )
r   r   r   r  r.  r/  r0  r  r2  checks
             ri   r  z6FunctionEmitterVisitor.get_attr_with_allow_error_value  s!   
 xx||hhrv^ oobg66
G &&sB88	$779777888 # 	(BN 	(**2t44EL""#5%#5#5#5666L%%dJ777L""3'''''		( 	( 	( 	(rk   Branch | Nonec                    | j         dz   t          | j                  k     r,| j        | j         dz            }t          |t                    r|S d S )Nr   )r   r   r   r   r#   )r   next_ops     ri   r'  z"FunctionEmitterVisitor.next_branch  sK    =1s48}},,ht}q01G'6** trk   rE   c                f   |j         t          k    r|                     |          }|                     |j                  }|                     |j                  }|j        }|j        }|                    |j                  \  }}|	                    |j                  r|j
        s|j         t          k    s J d|j        |j
        |j         |fz              |j        rdnd}	|                     d||	|| j                            |j                  |                    |j                  ||                    | j                  |                     |                    |j                            |j        f	z             d S |                     |||          }
|j
        s|j        rx|                    |j                  }|s$| j                            ||
d||j        |           | j                            |
|           |s| j                            d           nD|j        r=|                    |j                  s#| j                            |||||j                   | j                            |
 d| d           |j         t          k    r| j                            | d	           d S d S )
Nz%s %d %d %sr  r   z5%s = CPY_SET_ATTR%s(%s, %s, %d, %s, %s, %s); /* %s */r   r   r   r   z = 1;)
error_kindr   r   r  r   r
  r  r  r  r!  is_initr  r   r^   r  setter_indexr  r   re   r  r  r+  r%  r&  emit_dec_refr   emit_attr_bitmap_set)r   r   r   r  r   r.  r/  r0  r  r1  r2  r3  s               ri   visit_set_attrz%FunctionEmitterVisitor.visit_set_attr  s   =I%%88B<<Dhhrvhhrv^ oobg66
G==!! -	7z bmy&@&@&@-
	S C&@&@&@ #%+5hh2GNNGL11%.AA&&rw//%%dj11JJurw7788G
      **3G<<I: U*": U "$!5!5bg!>!>% L::"ItS"'2   )))Z@@@% 0L**3///) U"2F2Frw2O2O U 11#sJBGTTT L""i#:#:C#:#:#:;;;}	))&&$~~~66666 *)rk   r   
PREFIX_MAPr=   c                   |                      |          }| j        |j                 }| j                            |j        |j        |          }|j        t          k    rd|z  }|                     | d| d|j	                   d S )Nz(PyObject *)%sr   r   r   )
r   rD  	namespacer^   static_name
identifierr   r   r   r   )r   r   r   r   rt   s        ri   visit_load_staticz(FunctionEmitterVisitor.visit_load_static$  s    xx||.|''r~vNN<>))#d*D$**4***77777rk   r4   c                J   |                      |j                  }| j        |j                 }| j                            |j        |j        |          }|j        t          k    rd|z  }| 	                    | d| d           | 
                    ||j        j                   d S )Nz(PyTypeObject *)%sr   r   )r   r   rD  rF  r^   rG  rH  r   r   r   r-  rf   )r   r   r   r   rt   s        ri   visit_init_staticz(FunctionEmitterVisitor.visit_init_static,  s    "".|''r~vNN<>))(50E$++5+++,,,$.....rk   rI   c                    |                      |          }|                      |j                  }|                     | d| d|j         d           |j        s|                     ||j                   d S d S )Nr   r   r   )r   r   r   r  r,  r-  rf   r   s       ri   visit_tuple_getz&FunctionEmitterVisitor.visit_tuple_get5  s    xx||hhrv$55355"(555666~ 	-dBG,,,,,	- 	-rk   r   c                D    |j         s|                     |          dz   S dS )Nr   r   )is_voidr   )r   r   s     ri   get_dest_assignz&FunctionEmitterVisitor.get_dest_assign<  s&    | 	88D>>E))2rk   r$   c           	     F                          |          }d                     fd|j        D                       } j                            |j                  }|j                             j                  }                     | | t           | d| d           dS )zCall native function.rb   c              3  B   K   | ]}                     |          V  d S rd   r   rg   rh   r   s     ri   rj   z4FunctionEmitterVisitor.visit_call.<locals>.<genexpr>E  -      ::3#::::::rk   r  );N)
rP  rn   ro   r^   get_group_prefixr]   cnamer   r   r   )r   r   r   ro   librW  s   `     ri   
visit_callz!FunctionEmitterVisitor.visit_callB  s    ##B''yy::::"':::::l++BE22DJ''$DD]DEDDDDDDEEEEErk   r>   c                ~    |                      |          }|                     ||j        |j        |j                   dS )zCall native method.N)rP  r#  r  methodro   r   r   r   s      ri   visit_method_callz(FunctionEmitterVisitor.visit_method_callJ  s;    ##B''dBFBIrw?????rk   op_objrt   op_argslist[Value]c                                          |          }|j        }t          |t                    s
J |            |j        }|j                            |          }|J |                    |          }	|j        j        t          k    rg n|j        j        t          k    rd| dgn|g}
d                    |
 fd|D             z             }t          | j                  }|j        j        rdnd}|	r_ j                            |j                  }                     | | t"           |                     j                   d| d           d S |                    |          }                     d	                    ||| j                            |j                  ||                     j                  |||	  	                   d S )
Nz(PyObject *)Py_TYPE(rm   rb   c                :    g | ]}                     |          S r   r   rS  s     ri   r   z;FunctionEmitterVisitor.emit_method_call.<locals>.<listcomp>a  s#    $F$F$FsTXXc]]$F$F$Frk   r  r   r  rU  z4{}CPY_GET_METHOD{}({}, {}, {}, {}, {})({}); /* {} */)r   rf   r   rR   r  r!  r"  r   kindr   r   rn   rr   r^   r  rV  r   r   rW  r   method_indexrx   r  r  )r   r   r^  rt   r_  r  r.  r  r[  	is_directobj_argsro   mtyper1  rX  
method_idxs   `               ri   r#  z'FunctionEmitterVisitor.emit_method_callO  s   hhv%++22U222>**400!!! ,,T22	 {#444 B4:K4DHX4X4X////00_b^c 	
 yy$F$F$F$Fg$F$F$FFGG$VT\::#n5=((2 	,//<<CNNd[C[[TZ8P8P[[SW[[[\\\\\ ++D11JNNFMML11%.AA%%dj11
 
    rk   r3   c                   t          |j        t                    rEt          |j        j        j                  st          |j        j        j                  r	t          rd S t          |j        t                    r;t          r4|j        j        }t	          |          t          u rd|cxk    rdk    rn nd S | 
                    |j                  }|                     ||j        j                   d S )N   )r   r   r"   rZ   rf   rV   r   r;   r   intr   r-  )r   r   r   r   s       ri   visit_inc_refz$FunctionEmitterVisitor.visit_inc_refy  s    rvs##	#BFJO44	8QRTRXR\Ra8b8b	 	 Fbfk** 	} 	FLEE{{c!!bE&8&8&8&8S&8&8&8&8&8hhrv#rv{+++++rk   r*   c                    |                      |j                  }|                     ||j        j        |j                   d S )N)is_xdec)r   r   rA  rf   ro  )r   r   r   s      ri   visit_dec_refz$FunctionEmitterVisitor.visit_dec_ref  s<    hhrv#rv{BJ?????rk   r"   c                    | j                             |                     |j                  |                     |          |j        j        d           d S )NT)
can_borrow)r^   emit_boxr   r   rf   r   s     ri   	visit_boxz FunctionEmitterVisitor.visit_box  sD    dhhrv..bfkVZ[[[[[rk   r&   c                   |j         rO|j        rH|                     |                     |           d|                     |j                   d           d S |                                 }d }||j        |u rz|j        t          j	        k    re|j
        ^|j        sW|j        | j        u rIt          |                     |j                  | j        | j        |j
                  }| xj        dz  c_        | j                            |                     |j                  |                     |          |j        |j        j        |           d S )Nr   r   r   )src_typeerror)is_uncheckedr,  r   r   r   r'  r   r   r#   r   r   r   r   r   r	   r   r   r   r   r   r^   	emit_castrf   )r   r   r5  handlers       ri   
visit_castz!FunctionEmitterVisitor.visit_cast  sH   ? 	r~ 	NNdhhrllBBtxx/?/?BBBCCCF!!##""I00*6 7LDO33 2JJv{++$$*	  "HHRVdhhrllBGbfkQX 	 	
 	
 	
 	
 	
rk   rL   c                    | j                             |                     |j                  |                     |          |j                   d S rd   )r^   
emit_unboxr   r   rf   r   s     ri   visit_unboxz"FunctionEmitterVisitor.visit_unbox  s<     0 0$((2,,HHHHHrk   rN   c                :    | j                             d           d S )NzCPy_Unreachable();r^   r   r   s     ri   visit_unreachablez(FunctionEmitterVisitor.visit_unreachable  s    344444rk   rB   c                \   |j         t          |j         t                    rB|j                             dd          }| j                            d|j         d| d           nt          |j         t                    rQ| j                            d                    |j        | j        	                    |j                                        n-J d            | j                            d	|j         d
           | j                            | 	                    |           d           d S )N"\"zPyErr_SetString(PyExc_z, "z");zPyErr_SetObject(PyExc_{}, {});Fz)op value type must be either str or ValuezPyErr_SetNone(PyExc_rU  z = 0;)
r   r   r`   replacer^   r   
class_namerO   rx   r   )r   r   messages      ri   visit_raise_standard_errorz1FunctionEmitterVisitor.visit_raise_standard_error  s+   8"(C(( 
J(**366&&'^'^'^RY'^'^'^____BHe,, J&&4;;t|'7'7'A'A     JIIIIL""#K"-#K#K#KLLL$((2,,55566666rk   r%   c                     |j         rd}n                     |          }d                     fd|j        D                       } j                            | |j         d| d           d S )Nr   rb   c              3  B   K   | ]}                     |          V  d S rd   r   rS  s     ri   rj   z6FunctionEmitterVisitor.visit_call_c.<locals>.<genexpr>  rT  rk   r  rU  )rO  rP  rn   ro   r^   r   function_name)r   r   r   ro   s   `   ri   visit_call_cz#FunctionEmitterVisitor.visit_call_c  s    : 	,DD''++Dyy::::"':::::$C(8CC4CCCDDDDDrk   rA   c                <    t          d|j        j         d          )Nzunexpected PrimitiveOp z%: they must be lowered before codegen)RuntimeErrordescrt   r   s     ri   visit_primitive_opz)FunctionEmitterVisitor.visit_primitive_op  s&    YbglYYY
 
 	
rk   rH   c                    |                      |          }|                      |j                  }|                     | d| d           d S Nr   r   r   r   r   )r   r   r   r   s       ri   visit_truncatez%FunctionEmitterVisitor.visit_truncate  sM    xx||  $++5+++,,,,,rk   r+   c                *   |                      |          }|                      |j                  }|j        r |                     |j        j                  }n|                     |j        j                  }|                     | d| | d           d S r  )r   r   signedemit_signed_int_castrf   emit_unsigned_int_castr   )r   r   r   r   src_casts        ri   visit_extendz#FunctionEmitterVisitor.visit_extend  s    xx||  9 	@00==HH2226;??H$5585U55566666rk   r:   c                ~    |                      |          }|                     | d|j         d|j                   d S )Nr   r   r   )r   r   rH  r   r\  s      ri   visit_load_globalz(FunctionEmitterVisitor.visit_load_global  sB    xx||$332=333@@@@@rk   r6   c           
        |                      |          }|                      |j                  }|                      |j                  }|j        t          j        k    rD|                     |j        j                  |z   }|                     |j        j                  |z   }|                     | d| d|j	        |j                  d| d           d S Nr   r   r   )
r   lhsrhsr   r6   RIGHT_SHIFTr  rf   r   op_strr   r   r   r  r  s        ri   visit_int_opz#FunctionEmitterVisitor.visit_int_op  s    xx||hhrvhhrv5E%%%++BFK883>C++BFK883>C$BB3BB25)9BBCBBBCCCCCrk   r'   c                   |                      |          }|                      |j                  }|                      |j                  }d}d}|j        t          j        t          j        t          j        t          j        fv r@| 	                    |j        j
                  }| 	                    |j        j
                  }n|j        t          j        t          j        t          j        t          j        fv r?|                     |j        j
                  }|                     |j        j
                  }nt!          |j        t"                    r0|j        j        dk     r | 	                    |j        j
                  }nIt!          |j        t"                    r/|j        j        dk     r| 	                    |j        j
                  }|                     | d| | d|j        |j                  d| | d
           d S )Nr   r   r   r   r   )r   r  r  r   r'   SLTSGTSLESGEr  rf   ULTUGTULEUGEr  r   r5   r   r   r  )r   r   r   r  r  lhs_castrhs_casts          ri   visit_comparison_opz*FunctionEmitterVisitor.visit_comparison_op  s   xx||hhrvhhrv5\%|'79I<K[\\\00==H00==HHU|')9<;K\M]^^^2226;??H2226;??HH(( 	>RV\A-=-=00==HH(( 	>RV\A-=-=00==H$VV8VSVV29RU3CVVhVPSVVVWWWWWrk   r/   c           
     d   |                      |          }|                      |j                  }|                      |j                  }|j        t          j        k    r3|                     | d| d|j        |j                  d| d           d S |                     | d| d| d           d S )Nr   r   r   z = fmod(rb   rU  )r   r  r  r   r/   MODr   r  r  s        ri   visit_float_opz%FunctionEmitterVisitor.visit_float_op  s    xx||hhrvhhrv5GKNNdFFsFFRYru-=FFFFFGGGGG NNd::C::3:::;;;;;rk   r.   c                    |                      |          }|                      |j                  }|                     | d| d           d S )Nz = -r   r  r   s       ri   visit_float_negz&FunctionEmitterVisitor.visit_float_neg  sM    xx||hhrv$**C***+++++rk   r-   c           
         |                      |          }|                      |j                  }|                      |j                  }|                     | d| d|j        |j                  d| d           d S r  )r   r  r  r   r  r   r  s        ri   visit_float_comparison_opz0FunctionEmitterVisitor.visit_float_comparison_op  sy    xx||hhrvhhrv$BB3BB25)9BBCBBBCCCCCrk   r<   c                   |                      |          }|                      |j                  }|                     |j                  }|                     | d| d| d           |j        s|                     ||j                   d S d S )Nz = *(r  r   )r   r   re   rf   r   r,  r-  )r   r   r   r   rf   s        ri   visit_load_memz%FunctionEmitterVisitor.visit_load_mem  s    xx||hhrvzz"'""$44T44c444555~ 	-dBG,,,,,	- 	-rk   rG   c           	         |                      |j                  }|                      |j                  }|                     |j                  }||k    r!|                     d| d| d| d           d S d S )Nz*(r  r   r   )r   r   r   re   	dest_typer   )r   r   r   r   r  s        ri   visit_set_memz$FunctionEmitterVisitor.visit_set_mem%  s    xx  hhrvJJr|,,	 3;;NN=	==d==s===>>>>> ;rk   r1   c           	     z   |                      |          }|                      |j                  }t          |j        t                    sJ |j                    |j        |j        j        v s
J d            |                     d                    ||j	        j
        |j        j        ||j                             d S )NzInvalid field name.z{} = ({})&(({} *){})->{};)r   r   r   rv  rS   fieldr   r   rx   rf   _ctypert   r   s       ri   visit_get_element_ptrz,FunctionEmitterVisitor.visit_get_element_ptr.  s    xx||hhrv"+w//<<<<<x2;,,,,.C,,,'..bgnbk&6RX 	
 	
 	
 	
 	
rk   rF   c           	     |   |                      |          }|                      |j                  }|j        }t          |j        t
                    r |                     | d| d| d           d S |                      |j                  }|j        j        }t          |t                    s
J |            g }|j	        D ]8}||k    r|
                    | d|            #|
                    |           9|                     | d|                     |           dd                    |           d           d S )N.r   r    = (z) { rb   z };)r   r   r  r   r   rM   r   rf   rS   r   rv   re   rn   )	r   r   r   r   r  r   rv  
init_itemsns	            ri   visit_set_elementz(FunctionEmitterVisitor.visit_set_element:  sM   xx||xx  bfe$$ 	`NNd66U66t66677777 ((26""Cv{Hh00::(:::J^ , ,::%%llqll3333%%d++++NNd^^

8(<(<^^499ZCXCX^^^_____rk   r8   c                   |j         }|                     |          }t          |j        t                    r|                     |j                  }nit          |j        t
                    rH| j        |j        j                 }| j        	                    |j        j
        |j        j        |          }n|j        }|                     | d|j         d| d           d S )Nr  z)&r   )rf   r   r   r   rC   r=   rD  rF  r^   rG  rH  r   r   r  )r   r   r   r   r   r   s         ri   visit_load_addressz)FunctionEmitterVisitor.visit_load_addressS  s    gxx||bfh'' 	((26""CC
++ 	_RV%56F,**26+<bf>PRXYYCC&C$88CJ88#88899999rk   r7   c                    d S rd   r   r   s     ri   visit_keep_alivez'FunctionEmitterVisitor.visit_keep_alive_  s    rk   rK   c                    |                      |          }|                      |j                  }|                     | d| d           d S r  r  r   s       ri   visit_unborrowz%FunctionEmitterVisitor.visit_unborrowc  sM    xx||hhrv$))3)))*****rk   r   r!   c                6    | j                             |          S rd   )r^   r   )r   r   s     ri   r   zFunctionEmitterVisitor.labelk      |!!%(((rk   r   c                   t          |t                    r`|j        }|dk    rt          |j                  rdS t          |          }|dk    r|dk    r|dz  }n|dz  }n|dk    rd}n|d	k    r|dz  }|S t          |t                    r.t          |j                  }|d
k    rdS |dk    rdS |dk    rdS |S t          |t                    rdt          |j                  z   dz   S | j
                            |          S )Nr   r}   l        l            ULLLLl         z(-9223372036854775807LL - 1)i   infINFINITYz-infz	-INFINITYnanNANr  )r   r5   r   r[   rf   r`   r,   r)  r)   encode_c_string_literalr^   r   )r   r   valr   r   s        ri   r   zFunctionEmitterVisitor.regn  s+   c7## 	))Caxx1#(;;xvCAw7##JAAIAA
""2
""T	HU## 	)SYAEzz!zf"{euHW%% 	)0;;;cAA<##C(((rk   r.  rU   c                6    | j                             |          S rd   )r^   re   r   r.  s     ri   re   zFunctionEmitterVisitor.ctype  r  rk   c                6    | j                             |          S rd   )r^   r   r  s     ri   r   z$FunctionEmitterVisitor.c_error_value  s    |))%000rk   c                6    | j                             |          S rd   )r^   r   r  s     ri   r   z(FunctionEmitterVisitor.c_undefined_value  s    |--e444rk   Nr   liner   objectc               >    | j                             ||           d S )Nr   r  )r   r  r   s      ri   r   z FunctionEmitterVisitor.emit_line  s#    t-----rk   linesc                $     | j         j        |  d S rd   )r^   r   )r   r  s     ri   r   z!FunctionEmitterVisitor.emit_lines  s    ''''rk   c                J    | j                             ||| j                   d S )N)r   )r^   r-  r   )r   r   r.  s      ri   r-  z#FunctionEmitterVisitor.emit_inc_ref  s'    !!$DI!>>>>>rk   ro  boolc                L    | j                             |||| j                   d S )N)ro  r   )r^   rA  r   )r   r   r.  ro  s       ri   rA  z#FunctionEmitterVisitor.emit_dec_ref  s)    !!$wTY!OOOOOrk   c                :    | j                             |           d S rd   )r   r   )r   r  s     ri   emit_declarationz'FunctionEmitterVisitor.emit_declaration  s    ##D)))))rk   c                n    |j         -| j                            | j        | j        |j                    d S d S rd   )r   r^   r   r   r   r   s     ri   r   z%FunctionEmitterVisitor.emit_traceback  s<    )L''(8$:JBL^_____ *)rk   r  r  c           	     ^   |j         J | j                            d| j                  }|                     d| j                            dd          |j         d         ||                    t                    |j         d         |fz             t          r|                     d           d S d S )Nglobalsz3CPy_AttributeError("%s", "%s", "%s", "%s", %d, %s);\\\r   r   z7assert(PyErr_Occurred() != NULL && "failure w/o err!");)
r   r^   rG  r   r   r   r  r*  r   r   )r   r   r  r  globals_statics        ri   r(  z+FunctionEmitterVisitor.emit_attribute_error  s    !---11)T=MNNA ((v66"1%!!"<=="1%
	
 
	
 
	
  	VNNTUUUUU	V 	Vrk   rf   c                (    t          |          rdS dS )Nz(Py_ssize_t)r   )r\   r   rf   s     ri   r  z+FunctionEmitterVisitor.emit_signed_int_cast  s    T?? 	!>2rk   c                J    t          |          rdS t          |          rdS dS )Nz
(uint32_t)z
(uint64_t)r   )rW   rX   r  s     ri   r  z-FunctionEmitterVisitor.emit_unsigned_int_cast  s1    t$$ 	< && 	<2rk   )
r^   r   r   r   r   r`   r   r`   r_   r   )r_   r`   )r   r2   r_   r   )r   rO   r   r`   r_   r`   )r   r#   r_   r   )r   rD   r_   r   )r   rJ   r_   r   )r   r   r_   r   )r   r    r_   r   )r   r9   r_   r   )r   r;   r_   r   )r  r`   r   r  r  r   r_   r`   )r   r0   r_   r   )r_   r:  )r   rE   r_   r   )r   r=   r_   r   )r   r4   r_   r   )r   rI   r_   r   )r   rO   r_   r`   )r   r$   r_   r   )r   r>   r_   r   )
r   r`   r^  rO   rt   r`   r_  r`  r_   r   )r   r3   r_   r   )r   r*   r_   r   )r   r"   r_   r   )r   r&   r_   r   )r   rL   r_   r   )r   rN   r_   r   )r   rB   r_   r   )r   r%   r_   r   )r   rA   r_   r   )r   rH   r_   r   )r   r+   r_   r   )r   r:   r_   r   )r   r6   r_   r   )r   r'   r_   r   )r   r/   r_   r   )r   r.   r_   r   )r   r-   r_   r   )r   r<   r_   r   )r   rG   r_   r   )r   r1   r_   r   )r   rF   r_   r   )r   r8   r_   r   )r   r7   r_   r   )r   rK   r_   r   )r   r!   r_   r`   )r   rO   r_   r`   )r.  rU   r_   r`   )r  r`   r   r  r_   r   )r  r`   r_   r   )r   r`   r.  rU   r_   r   )r   r`   r.  rU   ro  r  r_   r   )r  r`   r_   r   )r   r#   r  r`   r  r`   r_   r   )rf   rU   r_   r`   )J__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r  r  r7  r  r'  rC  r   r   r   r   r   r   r   r   rD  __annotations__rI  rK  rM  rP  rY  r]  r#  rm  rp  rt  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   re   r   r   r   r   r-  rA  r  r   r(  r  r  r   rk   ri   r   r      sp           "( ( ( (> > > >L L L L+J +J +J +JZ1 1 1 1C C C C
/ 
/ 
/ 
/
 
 
 
 O O O O   "B "B "B "BHH, H, H, H,T( ( ( (,   57 57 57 57p 	--O	J    8 8 8 8/ / / /- - - -   F F F F@ @ @ @
( ( ( (T, , , ,&@ @ @ @\ \ \ \
 
 
 
8I I I I5 5 5 57 7 7 7$E E E E
 
 
 

- - - -7 7 7 7A A A AD D D DX X X X,< < < <, , , ,
D D D D- - - -? ? ? ?

 

 

 

` ` ` `2
: 
: 
: 
:   + + + +) ) ) )) ) ) )@) ) ) )1 1 1 15 5 5 5 59 . . . . . .( ( ( (? ? ? ?P P P P* * * *` ` ` `V V V V"        rk   r   NzFinal[dict[int, str]]_translation_tablebbytesc                   t           st          d          dt          d          dt          d          dt          d          dt          d	          d
i}t          d          D ]-}||vr'|dk     s|dk    r	d|z  ||<   t          |          ||<   .t                               t
                              |                     |                     d                              t                     S )zConvert bytestring to the C string literal syntax (with necessary escaping).

    For example, b'foo
' gets converted to 'foo\n' (note that double quotes are not added).
    
z\nz\r	z\tr  r  r  r  rk         z\x%.2xlatin1)	r  ordr   chrupdater`   	maketransdecode	translate)r  dr   s      ri   r  r    s    
  4 IIuIIuIIuHHeIIv
 s 	" 	"Azzr66Q#XX$q=AaDDq66AaD!!#--"2"233388H''(:;;;rk   )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`   )n__doc__
__future__r   typingr   mypyc.analysis.blockfreqr   mypyc.codegen.cstringr   mypyc.codegen.emitr   r   r	   r
   mypyc.commonr   r   r   r   r   r   r   r   mypyc.ir.class_irr   mypyc.ir.func_irr   r   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   mypyc.ir.pprintrP   mypyc.ir.rtypesrQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   rr   rz   r   r   r   r  r  r  r   rk   ri   <module>r     s   1 1 1 " " " " " "       ? ? ? ? ? ? 6 6 6 6 6 6 b b b b b b b b b b b b	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 & % % % % %               7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7p 2 1 1 1 1 1                                   	 	 	 	V V V VL$ L$ L$ L$^x x x x xYt_ x x xv -/  . . . .< < < < < <rk   