
    X-PhQ                       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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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZO dd
lPmQZQ ddlRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^ ddZ_ddZ`ddZa G d deBd                   ZbdS )z+Code generation for native function bodies.    )annotations)Final)frequently_executed_blocks)DEBUG_ERRORSEmitterTracebackAndGotoHandlerc_array_initializer)HAVE_IMMORTAL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	RInstanceRStructRTupleRTypeis_bool_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argrX   s     V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypyc/codegen/emitfunc.py	<genexpr>z'native_function_type.<locals>.<genexpr>[   s1      @@W]]38,,@@@@@@    voidz (*)())joinargsr_   ret_type)rW   rX   ri   rets    `  rc   native_function_typerl   Z   sZ    99@@@@@@@@@JFD
--
$
$Cre   r   c                X   g }| j         j        D ]?}|                    |                    |j                   t
           |j                    @d                    |                    | j         j                  |	                    |           d
                    |          pd          S )Nz{ret_type}{name}({args})r\   rf   )rj   nameri   )sigri   appendctype_spacedr`   r   rn   formatrj   native_function_namerh   )rW   rX   ri   rb   s       rc   native_function_headerrt   `   s    Dv{ O Ow++CH55MzM38MMNNNN%,,%%bfo66))"--YYt__& -   re   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};)r_   prefixrn   init   c              3  @   K   | ]}t          |t                    V  d S r^   )
isinstancer,   )ra   ss     rc   rd   z+generate_native_function.<locals>.<genexpr>   sE       G G+,
1g&&G G G G G Gre   Tr   })&r   contextrJ   arg_regsblocksFunctionEmitterVisitor	emit_linert   declindentr   r~   r`   rN   declare_tuple_structrK   rq   rr   r   	enumeratelabel
terminatorr%   targetsr    anysources
referencedr   rangelenrare
emit_label
next_blockopsop_indexacceptemit_from_emitter)rW   rX   ru   rv   declarationsnamesbodyvisitorrr_   r{   r   iblockr   targetis_next_blockis_problematic_opcommonr   r   s                        rc   generate_native_functionr   l   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0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#####re   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eeeeeeeeiZd'ed(<   dd*Zdd,Zdd.Zdd1Zdd3Zdd5Z dd:Z!dd<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Z8ddkZ9ddmZ:ddpZ;ddqZ<ddrZ=dsdtddxZ>ddzZ?dd{Z@dd~ZAddZBddZCddZDddZEddZFdsS )r   rX   r   r   ru   rZ   rv   rY   rw   c                    || _         |j        | _        || _        || _        || _        |j        j        | _        d| _        d | _        g | _	        d| _
        d S )NFr   )rX   r   r   ru   rv   r   literalsr   r   r   r   )selfrX   r   ru   rv   s        rc   __init__zFunctionEmitterVisitor.__init__   sX     ]
(&&0	-1re   c                4    | j                                         S r^   )rX   	temp_name)r   s    rc   r   z FunctionEmitterVisitor.temp_name   s    |%%'''re   opr.   c                    |j         | j        ur2|                     d|                      |j                   z             d S d S )Ngoto %s;)r   r   r   r   r   s     rc   
visit_gotoz!FunctionEmitterVisitor.visit_goto   sD    84?**NN:

28(<(<<===== +*re   r    c                   |j         |j        }}|j        }d}|| j        u r|j        	||}}| }d}|rdnd}d}|j        t          j        k    r!|                     |j	                  }| | }n|j        t          j
        k    r|j	        j        }	|rdnd}
t          |	t                    r;| j                            |	|                     |j	                  | j        |
          }n@|                     |j	                   d|
 d|                     |	           }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!ry   !=== zInvalid branchz	unlikely(rg   zlikely(zif (z) goto ;z) {r   r   z} elsez    goto %s;)truefalsenegatedr   traceback_entryr   r    BOOLregvalueIS_ERRORr`   r~   rN   rX   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compares              rc   visit_branchz#FunctionEmitterVisitor.visit_branch   s   grxe*4?""r'9'A%D!kGL$cc"5FK((28,,K(;((DDUfo%%(-C%/dd4G#v&& S|>>"(++T-?  ((28,,RRwRR9K9KC9P9PRR***** )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Ire   r@   c                j    |                      |j                  }|                     d|z             d S )Nz
return %s;)r   r   r   )r   r   	value_strs      rc   visit_returnz#FunctionEmitterVisitor.visit_return  s2    HHRX&&	|i/00000re   rE   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_typerX   r   r   itemsr   r   )r   r   destr   r   items         rc   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re   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   srcr`   
is_unboxedr   r   r   r   r   s       rc   visit_assignz#FunctionEmitterVisitor.visit_assign  s    xx  hhrv 3;; v{% 'bgl.E '&&&NNd--s---..... ;re   r   c           
     X    |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   )ra   r   r   s     rc   
<listcomp>z=FunctionEmitterVisitor.visit_assign_multi.<locals>.<listcomp>.  s#    $A$A$AQTXXa[[$A$A$Are   T)indented)r   r`   r~   rK   r   r   rX   rq   	item_typer   r   r	   )r   r   r   r   s   `   rc   visit_assign_multiz)FunctionEmitterVisitor.visit_assign_multi"  s    gl#v&&&&&xx   	))#-88BF#$A$A$A$A"&$A$A$ADQQQ		
 	
 	
 	
 	
re   r5   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)ra   r   r   s     rc   r   zAFunctionEmitterVisitor.visit_load_error_value.<locals>.<listcomp>4  s'    MMMtd,,T22MMMre   z{} {} = {{ {} }};r\   r   r   )r~   r`   rN   typesr   r   rr   r_   rh   r   r   )r   r   valuestmps   `   rc   visit_load_error_valuez-FunctionEmitterVisitor.visit_load_error_value2  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Nre   r7   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   rS   r`   r   r   )r   r   indexs      rc   visit_load_literalz)FunctionEmitterVisitor.visit_load_literal;  s    ++BH55 )) 	NN1TXXb\\54IIrxNXXXXXNN5"u8MMSUS[      re   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 + rg   z)->)
class_typestruct_namerX   r   is_traitclass_irlist
attributesr   attrr   r   r   rr   type_struct_namer_   	attr_type)r   r   r   r   casttrait_attr_indexoffset	attr_casts           rc   get_attr_exprz$FunctionEmitterVisitor.get_attr_exprD  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Are   r,   c                V   |                      |          }|                      |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 }|s,| j                            ||d||j        |d	           |                                 }||j        |u r|j        t2          j        k    r{|j        t|j        sm|                     ||j        |j                   |                     d
|                     |j                   z             |}| j                            d           |sUd}| j                            d!                    |tE          |j                  tE          |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   _TRAITry   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|   ))r   r   r   r   attr_detailsr   r   error_overlap
get_methodis_method_finalemit_method_callr   rX   r   getter_indexr   r   r_   r   r  is_always_definedemit_undefined_attr_checknext_branchr   r   r    r   r   r   emit_attribute_errorrn   r   r   rr   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_classs                  rc   visit_get_attrz%FunctionEmitterVisitor.visit_get_attrh  s   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%tBG}}d27mm    ' < <$ 7^ 7L**:666))$
;;; , &do==NN:

=;N0O0O#OPPP"# ,&&s+++++, ,re   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     rc   r  z"FunctionEmitterVisitor.next_branch  sK    =1s48}},,ht}q01G'6** tre   rA   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  ry   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   rX   r   setter_indexr   r   r_   r   r  r  r  r  emit_dec_refr
  emit_attr_bitmap_set)r   r   r   r   r   r  r  r  r   r  r  r  s               rc   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 *)re   r   
PREFIX_MAPr9   c                   |                      |          }| j        |j                 }| j                            |j        |j        |          }|j        t          k    rd|z  }|                     | d| d|j	                   d S )Nz(PyObject *)%sr   r   r   )
r   r+  	namespacerX   static_name
identifierrv   r   r   r   )r   r   r   rz   rn   s        rc   visit_load_staticz(FunctionEmitterVisitor.visit_load_static  s    xx||.|''r~vNN<>))#d*D$**4***77777re   r0   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   r+  r-  rX   r.  r/  rv   r   r   r  r`   )r   r   r   rz   rn   s        rc   visit_init_staticz(FunctionEmitterVisitor.visit_init_static  s    "".|''r~vNN<>))(50E$++5+++,,,$.....re   rD   c                    |                      |          }|                      |j                  }|                     | d| d|j         d           |j        s|                     ||j                   d S d S )Nr   r   r   )r   r   r   r   r  r  r`   r   s       rc   visit_tuple_getz&FunctionEmitterVisitor.visit_tuple_get  s    xx||hhrv$55355"(555666~ 	-dBG,,,,,	- 	-re   r   rI   c                D    |j         s|                     |          dz   S dS )Nr   ry   )is_voidr   )r   r   s     rc   get_dest_assignz&FunctionEmitterVisitor.get_dest_assign
  s&    | 	88D>>E))2re   r!   c           	     F                          |          }d                     fd|j        D                       } j                            |j                  }|j                             j                  }                     | | t           | d| d           dS )zCall native function.r\   c              3  B   K   | ]}                     |          V  d S r^   r   ra   rb   r   s     rc   rd   z4FunctionEmitterVisitor.visit_call.<locals>.<genexpr>  -      ::3#::::::re   r   );N)
r7  rh   ri   rX   get_group_prefixrW   cnamer   r   r   )r   r   r   ri   libr>  s   `     rc   
visit_callz!FunctionEmitterVisitor.visit_call  s    ##B''yy::::"':::::l++BE22DJ''$DD]DEDDDDDDEEEEEre   r:   c                ~    |                      |          }|                     ||j        |j        |j                   dS )zCall native method.N)r7  r  r   methodri   r   r   r   s      rc   visit_method_callz(FunctionEmitterVisitor.visit_method_call  s;    ##B''dBFBIrw?????re   op_objrn   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(rg   r\   c                :    g | ]}                     |          S r   r   r:  s     rc   r   z;FunctionEmitterVisitor.emit_method_call.<locals>.<listcomp>/  s#    $F$F$FsTXXc]]$F$F$Fre   r  ry   r   r<  z4{}CPY_GET_METHOD{}({}, {}, {}, {}, {})({}); /* {} */)r   r`   r~   rL   r   r  r  r   kindr   r   rh   rl   rX   r   r=  r   r   r>  r   method_indexrr   r   r   )r   r   rE  rn   rF  r   r  r   rB  	is_directobj_argsri   mtyper  r?  
method_idxs   `               rc   r  z'FunctionEmitterVisitor.emit_method_call  s   hhv%+++++>**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
 
    re   r/   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   rT   r`   rP   r
   r7   r   intr   r  )r   r   r   r   s       rc   visit_inc_refz$FunctionEmitterVisitor.visit_inc_refG  s    rvs##	#BFJO44	8J26:?8[8[	 	 Fbfk** 	} 	FLEE{{c!!bE&8&8&8&8S&8&8&8&8&8hhrv#rv{+++++re   r&   c                    |                      |j                  }|                     ||j        j        |j                   d S )N)is_xdec)r   r   r(  r`   rV  )r   r   r   s      rc   visit_dec_refz$FunctionEmitterVisitor.visit_dec_refZ  s<    hhrv#rv{BJ?????re   r   c                    | j                             |                     |j                  |                     |          |j        j        d           d S )NT)
can_borrow)rX   emit_boxr   r   r`   r   s     rc   	visit_boxz FunctionEmitterVisitor.visit_box^  sD    dhhrv..bfkVZ[[[[[re   r#   c                   |                                  }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|   )src_typeerror)r  r   r   r    r   r   r   r   r   r   r   r   ru   rv   r   rX   	emit_castr   r   r`   )r   r   r  handlers       rc   
visit_castz!FunctionEmitterVisitor.visit_casta  s    !!##""I00*6 7LDO33 2JJv{++$$*	  "HHRVdhhrllBGbfkQX 	 	
 	
 	
 	
 	
re   rG   c                    | j                             |                     |j                  |                     |          |j                   d S r^   )rX   
emit_unboxr   r   r`   r   s     rc   visit_unboxz"FunctionEmitterVisitor.visit_unboxz  s<     0 0$((2,,HHHHHre   rH   c                :    | j                             d           d S )NzCPy_Unreachable();rX   r   r   s     rc   visit_unreachablez(FunctionEmitterVisitor.visit_unreachable}  s    344444re   r>   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\"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   r~   rZ   replacerX   r   
class_namerI   rr   r   )r   r   messages      rc   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6re   r"   c                     |j         rd}n                     |          }d                     fd|j        D                       } j                            | |j         d| d           d S )Nry   r\   c              3  B   K   | ]}                     |          V  d S r^   r   r:  s     rc   rd   z6FunctionEmitterVisitor.visit_call_c.<locals>.<genexpr>  r;  re   r   r<  )r6  r7  rh   ri   rX   r   function_name)r   r   r   ri   s   `   rc   visit_call_cz#FunctionEmitterVisitor.visit_call_c  s    : 	,DD''++Dyy::::"':::::$C(8CC4CCCDDDDDre   r=   c                <    t          d|j        j         d          )Nzunexpected PrimitiveOp z%: they must be lowered before codegen)RuntimeErrordescrn   r   s     rc   visit_primitive_opz)FunctionEmitterVisitor.visit_primitive_op  s&    YbglYYY
 
 	
re   rC   c                    |                      |          }|                      |j                  }|                     | d| d           d S Nr   r   r   r   r   )r   r   r   r   s       rc   visit_truncatez%FunctionEmitterVisitor.visit_truncate  sM    xx||  $++5+++,,,,,re   r'   c                *   |                      |          }|                      |j                  }|j        r |                     |j        j                  }n|                     |j        j                  }|                     | d| | d           d S rw  )r   r   signedemit_signed_int_castr`   emit_unsigned_int_castr   )r   r   r   r   src_casts        rc   visit_extendz#FunctionEmitterVisitor.visit_extend  s    xx||  9 	@00==HH2226;??H$5585U55566666re   r6   c                ~    |                      |          }|                     | d|j         d|j                   d S )Nr   r   r   )r   r   r/  r   rC  s      rc   visit_load_globalz(FunctionEmitterVisitor.visit_load_global  sB    xx||$332=333@@@@@re   r2   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   r2   RIGHT_SHIFTr|  r`   r   op_strr   r   r   r  r  s        rc   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Cre   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 )Nry   r   r   r   r   )r   r  r  r   r$   SLTSGTSLESGEr|  r`   ULTUGTULEUGEr}  r~   r1   r   r   r  )r   r   r   r  r  lhs_castrhs_casts          rc   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Wre   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(r\   r<  )r   r  r  r   r+   MODr   r  r  s        rc   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:::;;;;;re   r*   c                    |                      |          }|                      |j                  }|                     | d| d           d S )Nz = -r   rx  r   s       rc   visit_float_negz&FunctionEmitterVisitor.visit_float_neg  sM    xx||hhrv$**C***+++++re   r)   c           
         |                      |          }|                      |j                  }|                      |j                  }|                     | d| d|j        |j                  d| d           d S r  )r   r  r  r   r  r   r  s        rc   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Cre   r8   c                    |                      |          }|                      |j                  }|                     |j                  }|                     | d| d| d           d S )Nz = *(r   r   )r   r   r_   r`   r   )r   r   r   r   r`   s        rc   visit_load_memz%FunctionEmitterVisitor.visit_load_mem  sh    xx||hhrvzz"'""$44T44c44455555re   rB   c           	         |                      |j                  }|                      |j                  }|                     |j                  }||k    r!|                     d| d| d| d           d S d S )Nz*(r   r   r   )r   r   r   r_   	dest_typer   )r   r   r   r   r  s        rc   visit_set_memz$FunctionEmitterVisitor.visit_set_mem  s    xx  hhrvJJr|,,	 3;;NN=	==d==s===>>>>> ;re   r-   c           	     `   |                      |          }|                      |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   r~   r]  rM   fieldr   r   rr   r`   _ctypern   r   s       rc   visit_get_element_ptrz,FunctionEmitterVisitor.visit_get_element_ptr  s    xx||hhrv"+w/////x2;,,,,.C,,,'..bgnbk&6RX 	
 	
 	
 	
 	
re   r4   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 )Nz = (z)&r   )r`   r   r~   r   r?   r9   r+  r-  rX   r.  r/  rv   r   r  )r   r   r   r   r   rz   s         rc   visit_load_addressz)FunctionEmitterVisitor.visit_load_address  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9re   r3   c                    d S r^   r   r   s     rc   visit_keep_alivez'FunctionEmitterVisitor.visit_keep_alive  s    re   rF   c                    |                      |          }|                      |j                  }|                     | d| d           d S rw  rx  r   s       rc   visit_unborrowz%FunctionEmitterVisitor.visit_unborrow  sM    xx||hhrv$))3)))*****re   r   r   c                6    | j                             |          S r^   )rX   r   )r   r   s     rc   r   zFunctionEmitterVisitor.label      |!!%(((re   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 | j        	                    |          S )Nr   NULLl        l            ULLLLl         z(-9223372036854775807LL - 1)i   infINFINITYz-infz	-INFINITYnanNAN)
r~   r1   r   rU   r`   rZ   r(   r  rX   r   )r   r   valr   r   s        rc   r   zFunctionEmitterVisitor.reg  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<##C(((re   r  rO   c                6    | j                             |          S r^   )rX   r_   r   r  s     rc   r_   zFunctionEmitterVisitor.ctype<  r  re   c                6    | j                             |          S r^   )rX   r   r  s     rc   r   z$FunctionEmitterVisitor.c_error_value?  s    |))%000re   c                6    | j                             |          S r^   )rX   r   r  s     rc   r   z(FunctionEmitterVisitor.c_undefined_valueB  s    |--e444re   Nr   liner   objectc               >    | j                             ||           d S )Nr   rf  )r   r  r   s      rc   r   z FunctionEmitterVisitor.emit_lineE  s#    t-----re   linesc                $     | j         j        |  d S r^   )rX   r   )r   r  s     rc   r   z!FunctionEmitterVisitor.emit_linesH  s    ''''re   c                J    | j                             ||| j                   d S )N)r   )rX   r  r   )r   r   r  s      rc   r  z#FunctionEmitterVisitor.emit_inc_refK  s'    !!$DI!>>>>>re   rV  boolc                L    | j                             |||| j                   d S )N)rV  r   )rX   r(  r   )r   r   r  rV  s       rc   r(  z#FunctionEmitterVisitor.emit_dec_refN  s)    !!$wTY!OOOOOre   c                :    | j                             |           d S r^   )r   r   )r   r  s     rc   emit_declarationz'FunctionEmitterVisitor.emit_declarationQ  s    ##D)))))re   c                n    |j         -| j                            | j        | j        |j                    d S d S r^   )r   rX   r   ru   rv   r   s     rc   r   z%FunctionEmitterVisitor.emit_tracebackT  s<    )L''(8$:JBL^_____ *)re   rk  r   c           	     .   |j         J | j                            d| j                  }|                     d| j                            dd          |j         d         |||j         d         |fz             t          r|                     d           d S d S )Nglobalsz3CPy_AttributeError("%s", "%s", "%s", "%s", %d, %s);\z\\r   r|   z7assert(PyErr_Occurred() != NULL && "failure w/o err!");)r   rX   r.  rv   r   ru   rj  r   )r   r   rk  r   globals_statics        rc   r  z+FunctionEmitterVisitor.emit_attribute_errorX  s    !---11)T=MNNA ((v66"1%"1%
	
 
	
 
	
  	VNNTUUUUU	V 	Vre   r`   c                (    t          |          rdS dS )Nz(Py_ssize_t)ry   )rV   r   r`   s     rc   r|  z+FunctionEmitterVisitor.emit_signed_int_casti  s    T?? 	!>2re   c                J    t          |          rdS t          |          rdS dS )Nz
(uint32_t)z
(uint64_t)ry   )rQ   rR   r  s     rc   r}  z-FunctionEmitterVisitor.emit_unsigned_int_casto  s1    t$$ 	< && 	<2re   )
rX   r   r   r   ru   rZ   rv   rZ   rY   rw   )rY   rZ   )r   r.   rY   rw   )r   r    rY   rw   )r   r@   rY   rw   )r   rE   rY   rw   )r   r   rY   rw   )r   r   rY   rw   )r   r5   rY   rw   )r   r7   rY   rw   )r   rZ   r   r   r   r   rY   rZ   )r   r,   rY   rw   )rY   r!  )r   rA   rY   rw   )r   r9   rY   rw   )r   r0   rY   rw   )r   rD   rY   rw   )r   rI   rY   rZ   )r   r!   rY   rw   )r   r:   rY   rw   )
r   rZ   rE  rI   rn   rZ   rF  rG  rY   rw   )r   r/   rY   rw   )r   r&   rY   rw   )r   r   rY   rw   )r   r#   rY   rw   )r   rG   rY   rw   )r   rH   rY   rw   )r   r>   rY   rw   )r   r"   rY   rw   )r   r=   rY   rw   )r   rC   rY   rw   )r   r'   rY   rw   )r   r6   rY   rw   )r   r2   rY   rw   )r   r$   rY   rw   )r   r+   rY   rw   )r   r*   rY   rw   )r   r)   rY   rw   )r   r8   rY   rw   )r   rB   rY   rw   )r   r-   rY   rw   )r   r4   rY   rw   )r   r3   rY   rw   )r   rF   rY   rw   )r   r   rY   rZ   )r   rI   rY   rZ   )r  rO   rY   rZ   )r  rZ   r   r  rY   rw   )r  rZ   rY   rw   )r   rZ   r  rO   rY   rw   )r   rZ   r  rO   rV  r  rY   rw   )r  rZ   rY   rw   )r   r    rk  rZ   r   rZ   rY   rw   )r`   rO   rY   rZ   )G__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__r0  r2  r4  r7  r@  rD  r  rT  rW  r[  ra  rd  rg  rm  rq  ru  ry  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   re   rc   r   r      s+           "( ( ( (> > > >2J 2J 2J 2Jh1 1 1 1C C C C
/ 
/ 
/ 
/
 
 
 
 O O O O   "B "B "B "BHC, C, C, C,J   57 57 57 57p 	--O	J    8 8 8 8/ / / /- - - -   F F F F@ @ @ @
( ( ( (T, , , ,&@ @ @ @\ \ \ \
 
 
 
2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6 6 6 6? ? ? ?

 

 

 


: 
: 
: 
:   + + + +) ) ) )) ) ) )<) ) ) )1 1 1 15 5 5 5 59 . . . . . .( ( ( (? ? ? ?P P P P* * * *` ` ` `V V V V"        re   r   N)rW   r   rX   r   rY   rZ   )rW   r   rX   r   rY   rZ   )
rW   r   rX   r   ru   rZ   rv   rZ   rY   rw   )c__doc__
__future__r   typingr   mypyc.analysis.blockfreqr   mypyc.codegen.emitr   r   r   r	   mypyc.commonr
   r   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/   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   mypyc.ir.pprintrJ   mypyc.ir.rtypesrK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rl   rt   r   r   r   re   rc   <module>r     s3   1 1 " " " " " "       ? ? ? ? ? ? b b b b b b b b b b b b                  & % % % % % ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4j 2 1 1 1 1 1                                   	 	 	 	L$ L$ L$ L$^z
 z
 z
 z
 z
Yt_ z
 z
 z
 z
 z
re   