
    5 f$~                       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 ddlmZ ddlmZmZmZmZmZ dd	lmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZK dd
lLmMZM ddlNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZW ddZXddZYddZZ G d de?d                   Z[dS )z+Code generation for native function bodies.    )annotations)Final)frequently_executed_blocks)DEBUG_ERRORSEmitterTracebackAndGotoHandlerc_array_initializer)MODULE_PREFIXNATIVE_PREFIX
REG_PREFIXSTATIC_PREFIXTYPE_PREFIX)ClassIR)FUNC_CLASSMETHODFUNC_STATICMETHODFuncDeclFuncIR
all_values)1	ERR_FALSENAMESPACE_MODULENAMESPACE_STATICNAMESPACE_TYPE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RaiseStandardErrorRegisterReturnSetAttrSetMemTruncateTupleGetTupleSetUnborrowUnboxUnreachableValue)generate_names_for_ir)	RArrayRStructRTupleRTypeis_int32_rprimitiveis_int64_rprimitiveis_int_rprimitiveis_pointer_rprimitive	is_taggedfnr   emitterr   returnstrc                    d                     fd| j        D                       pd}                    | j                  }| d| dS )N, c              3  L   K   | ]}                     |j                  V  d S N)ctypetype).0argrQ   s     L/var/www/equiseq/venv/lib/python3.11/site-packages/mypyc/codegen/emitfunc.py	<genexpr>z'native_function_type.<locals>.<genexpr>N   s1      @@W]]38,,@@@@@@    voidz (*)())joinargsrX   ret_type)rP   rQ   rb   rets    `  r\   native_function_typere   M   sZ    99@@@@@@@@@JFD
--
$
$Cr^   r   c                X   g }| j         j        D ]?}|                    |                    |j                   t
           |j                    @d                    |                    | j         j                  |	                    |           d
                    |          pd          S )Nz{ret_type}{name}({args})rU   r_   )rc   namerb   )sigrb   appendctype_spacedrY   r   rg   formatrc   native_function_namera   )rP   rQ   rb   r[   s       r\   native_function_headerrm   S   s    Dv{ O Ow++CH55MzM38MMNNNN%,,%%bfo66))"--YYt__& -   r^   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};)rX   prefixrg   init   c              3  @   K   | ]}t          |t                    V  d S rW   )
isinstancer)   )rZ   ss     r\   r]   z+generate_native_function.<locals>.<genexpr>   sE       G G+,
1g&&G G G G G Gr^   Tr   })&r   contextrF   arg_regsblocksFunctionEmitterVisitor	emit_linerm   declindentr   rw   rY   rI   declare_tuple_structrG   rj   rk   r   	enumeratelabel
terminatorr"   targetsr   anysources
referencedr   rangelenrare
emit_label
next_blockopsop_indexacceptemit_from_emitter)rP   rQ   rn   ro   declarationsnamesbodyvisitorrrX   rt   r|   iblockr   targetis_next_blockis_problematic_opcommonr   r   s                        r\   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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#####r^   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iZd'ed(<   dd*Zdd,Zdd.Zdd1Zdd3Zdd5Zdd7Zdd9Z dd;Z!dd=Z"dd?Z#ddAZ$ddCZ%ddEZ&ddGZ'ddIZ(ddKZ)ddMZ*ddOZ+ddQZ,ddSZ-ddUZ.ddWZ/ddYZ0dd[Z1dd]Z2dd_Z3ddaZ4dddZ5ddfZ6ddiZ7ddjZ8ddkZ9dldmddqZ:ddsZ;ddtZ<ddwZ=ddxZ>ddyZ?dd|Z@dd~ZAddZBdlS )r}   rQ   r   r   rn   rS   ro   rR   rp   c                    || _         |j        | _        || _        || _        || _        |j        j        | _        d| _        d | _        g | _	        d| _
        d S )NFr   )rQ   r   r   rn   ro   rz   literalsr   r   r   r   )selfrQ   r   rn   ro   s        r\   __init__zFunctionEmitterVisitor.__init__   sX     ]
(&&0	-1r^   c                4    | j                                         S rW   )rQ   	temp_name)r   s    r\   r   z FunctionEmitterVisitor.temp_name   s    |%%'''r^   opr+   c                    |j         | j        ur2|                     d|                      |j                   z             d S d S )Ngoto %s;)r   r   r~   r   r   s     r\   
visit_gotoz!FunctionEmitterVisitor.visit_goto   sD    84?**NN:

28(<(<<===== +*r^   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!rr   !=== zInvalid branchz	unlikely(r`   zlikely(zif (z) goto ;z) {r   ry   z} elsez    goto %s;)truefalsenegatedr   traceback_entryr   r   BOOLregvalueIS_ERRORrY   rw   rI   rQ   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              r\   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****5 )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Ir^   r<   c                j    |                      |j                  }|                     d|z             d S )Nz
return %s;)r   r   r~   )r   r   	value_strs      r\   visit_returnz#FunctionEmitterVisitor.visit_return   s2    HHRX&&	|i/00000r^   rA   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_typerQ   r   r   itemsr~   r   )r   r   destr   r   items         r\   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r^   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   srcrY   
is_unboxedr~   r   r   r   r   s       r\   visit_assignz#FunctionEmitterVisitor.visit_assign	  s    xx  hhrv 3;; v{% 'bgl.E '&&&NNd--s---..... ;r^   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   )rZ   rx   r   s     r\   
<listcomp>z=FunctionEmitterVisitor.visit_assign_multi.<locals>.<listcomp>!  s#    $A$A$AQTXXa[[$A$A$Ar^   T)indented)r   rY   rw   rG   r   r~   rQ   rj   	item_typer   r   r	   )r   r   r   r   s   `   r\   visit_assign_multiz)FunctionEmitterVisitor.visit_assign_multi  s    gl#v&&&&&xx   	))#-88BF#$A$A$A$A"&$A$A$ADQQQ		
 	
 	
 	
 	
r^   r2   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)rZ   r   r   s     r\   r   zAFunctionEmitterVisitor.visit_load_error_value.<locals>.<listcomp>'  s'    MMMtd,,T22MMMr^   z{} {} = {{ {} }};rU   r   r   )rw   rY   rI   typesr   r~   rk   rX   ra   r   r   )r   r   valuestmps   `   r\   visit_load_error_valuez-FunctionEmitterVisitor.visit_load_error_value%  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Nr^   r4   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   rM   rY   r~   r   )r   r   indexs      r\   visit_load_literalz)FunctionEmitterVisitor.visit_load_literal.  s    ++BH55 )) 	NN1TXXb\\54IIrxNXXXXXNN5"u8MMSUS[      r^   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 + r`   z)->)
class_typestruct_namerQ   r   is_traitclass_irlist
attributesr   attrr   r   r~   rk   type_struct_namerX   	attr_type)r   r   r   r   casttrait_attr_indexoffset	attr_casts           r\   get_attr_exprz$FunctionEmitterVisitor.get_attr_expr7  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Ar^   r)   c                   |                      |          }|                      |j                  }|j        }|j        }|                    |j                  \  }}|j        o|j        }|                    |j        |          r|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        t.          j        k    r{|j        t|j        sm|                     ||j        |j                   | 	                    d
|                     |j                  z             |}| j
        	                    d           |sUd}| j
        	                    d                    |tA          |j                  tA          |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_method_TRAITrr   z1%s = CPY_GET_ATTR%s(%s, %s, %d, %s, %s); /* %s */r   r   r   T)unlikelyr   ry   PyExc_AttributeErrorz4PyErr_SetString({}, "attribute {} of {} undefined");z} else {ru   )'r   r   r   r   attr_detailsr   r   error_overlap
get_methodr~   rQ   r   getter_indexr   r   rX   r   r   is_always_definedemit_undefined_attr_checknext_branchr   r   r   r   r   r   emit_attribute_errorrg   r   r   rk   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                  r\   visit_get_attrz%FunctionEmitterVisitor.visit_get_attr[  sr   xx||hhrv^ oobg66
G@
(@===>> 9	,"$+5hh2GNNCL11%.AA&&rw//%%dj11JJurw7788G	
     **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+++++, ,r^   Branch | Nonec                    | j         dz   t          | j                  k     r,| j        | j         dz            }t          |t                    r|S d S )Nru   )r   r   r   rw   r   )r   next_ops     r\   r  z"FunctionEmitterVisitor.next_branch  sK    =1s48}},,ht}q01G'6** tr^   r=   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   rr   z5%s = CPY_SET_ATTR%s(%s, %s, %d, %s, %s, %s); /* %s */r   ry   r   r   z = 1;)
error_kindr   r   r   r   r   r   r  r   r  is_initr   r~   rQ   r   setter_indexr   r   rX   r   r   r  r  r  emit_dec_refr  emit_attr_bitmap_set)r   r   r   r   r   r  r  r  r   r  r  r  s               r\   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 *)r^   r   
PREFIX_MAPr6   c                   |                      |          }| j        |j                 }| j                            |j        |j        |          }|j        t          k    rd|z  }|                     | d| d|j	                   d S )Nz(PyObject *)%sr   r   r   )
r   r"  	namespacerQ   static_name
identifierro   r   r~   r   )r   r   r   rs   rg   s        r\   visit_load_staticz(FunctionEmitterVisitor.visit_load_static  s    xx||.|''r~vNN<>))#d*D$**4***77777r^   r-   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$  rQ   r%  r&  ro   r   r~   r  rY   )r   r   r   rs   rg   s        r\   visit_init_staticz(FunctionEmitterVisitor.visit_init_static  s    "".|''r~vNN<>))(50E$++5+++,,,$.....r^   r@   c                    |                      |          }|                      |j                  }|                     | d| d|j         d           |j        s|                     ||j                   d S d S )Nr   r   r   )r   r   r~   r   r  r  rY   r   s       r\   visit_tuple_getz&FunctionEmitterVisitor.visit_tuple_get  s    xx||hhrv$55355"(555666~ 	-dBG,,,,,	- 	-r^   r   rE   c                D    |j         s|                     |          dz   S dS )Nr   rr   )is_voidr   )r   r   s     r\   get_dest_assignz&FunctionEmitterVisitor.get_dest_assign  s&    | 	88D>>E))2r^   r   c           	     F                          |          }d                     fd|j        D                       } j                            |j                  }|j                             j                  }                     | | t           | d| d           dS )zCall native function.rU   c              3  B   K   | ]}                     |          V  d S rW   r   rZ   r[   r   s     r\   r]   z4FunctionEmitterVisitor.visit_call.<locals>.<genexpr>  -      ::3#::::::r^   r   );N)
r.  ra   rb   rQ   get_group_prefixrP   cnamer   r~   r   )r   r   r   rb   libr5  s   `     r\   
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Er^   r7   c                                          |          }                     |j                  }|j        }|j        }|j        }|j                            |          }|J |                    |          }|j        j	        t          k    rg n|j        j	        t          k    rd| dgn|g}	d                    |	 fd|j        D             z             }
t          | j                  }|j        j        rdnd}|r_ j                            |j                  }                     | | t&           |                     j                   d|
 d	           dS |                    |          }                     d
                    ||| j                            |j                  ||                     j                  ||
|j        	  	                   dS )zCall native method.Nz(PyObject *)Py_TYPE(r`   rU   c                :    g | ]}                     |          S r   r   r1  s     r\   r   z<FunctionEmitterVisitor.visit_method_call.<locals>.<listcomp>  s#    $F$F$FsTXXc]]$F$F$Fr^   r   rr   r   r3  z4{}CPY_GET_METHOD{}({}, {}, {}, {}, {})({}); /* {} */)r.  r   r   receiver_typer   methodr  is_method_finalr   kindr   r   ra   rb   re   rQ   r   r4  r~   r   r5  r   method_indexrk   r   r   )r   r   r   r   r  r   rg   r;  	is_directobj_argsrb   mtyper  r6  
method_idxs   `              r\   visit_method_callz(FunctionEmitterVisitor.visit_method_call  s   ##B''hhrv >y**400!!! ,,T22	 {#444 B {#333 0///00 	 yy$F$F$F$Fbg$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I
 
    r^   r,   c                z    |                      |j                  }|                     ||j        j                   d S rW   )r   r   r  rY   r   r   r   s      r\   visit_inc_refz$FunctionEmitterVisitor.visit_inc_ref6  s5    hhrv#rv{+++++r^   r#   c                    |                      |j                  }|                     ||j        j        |j                   d S )N)is_xdec)r   r   r  rY   rH  rE  s      r\   visit_dec_refz$FunctionEmitterVisitor.visit_dec_ref:  s<    hhrv#rv{BJ?????r^   r   c                    | j                             |                     |j                  |                     |          |j        j        d           d S )NT)
can_borrow)rQ   emit_boxr   r   rY   r   s     r\   	visit_boxz FunctionEmitterVisitor.visit_box>  sD    dhhrv..bfkVZ[[[[[r^   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 )Nru   )src_typeerror)r  r   r   r   r   r   r   r   r   r   r   r   rn   ro   r   rQ   	emit_castr   r   rY   )r   r   r  handlers       r\   
visit_castz!FunctionEmitterVisitor.visit_castA  s    !!##""I00*6 7LDO33 2JJv{++$$*	  "HHRVdhhrllBGbfkQX 	 	
 	
 	
 	
 	
r^   rC   c                    | j                             |                     |j                  |                     |          |j                   d S rW   )rQ   
emit_unboxr   r   rY   r   s     r\   visit_unboxz"FunctionEmitterVisitor.visit_unboxZ  s<     0 0$((2,,HHHHHr^   rD   c                :    | j                             d           d S )NzCPy_Unreachable();rQ   r~   r   s     r\   visit_unreachablez(FunctionEmitterVisitor.visit_unreachable]  s    344444r^   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_r3  z = 0;)
r   rw   rS   replacerQ   r~   
class_namerE   rk   r   )r   r   messages      r\   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IuL""#K"-#K#K#KLLL$((2,,55566666r^   r   c                     |j         rd}n                     |          }d                     fd|j        D                       } j                            | |j         d| d           d S )Nrr   rU   c              3  B   K   | ]}                     |          V  d S rW   r   r1  s     r\   r]   z6FunctionEmitterVisitor.visit_call_c.<locals>.<genexpr>w  r2  r^   r   r3  )r-  r.  ra   rb   rQ   r~   function_name)r   r   r   rb   s   `   r\   visit_call_cz#FunctionEmitterVisitor.visit_call_cr  s    : 	,DD''++Dyy::::"':::::$C(8CC4CCCDDDDDr^   r?   c                    |                      |          }|                      |j                  }|                     | d| d           d S Nr   r   r   r   r~   )r   r   r   r   s       r\   visit_truncatez%FunctionEmitterVisitor.visit_truncatez  sM    xx||  $++5+++,,,,,r^   r$   c                *   |                      |          }|                      |j                  }|j        r |                     |j        j                  }n|                     |j        j                  }|                     | d| | d           d S re  )r   r   signedemit_signed_int_castrY   emit_unsigned_int_castr~   )r   r   r   r   src_casts        r\   visit_extendz#FunctionEmitterVisitor.visit_extend  s    xx||  9 	@00==HH2226;??H$5585U55566666r^   r3   c                ~    |                      |          }|                     | d|j         d|j                   d S )Nr   r   r   )r   r~   r&  r   )r   r   r   s      r\   visit_load_globalz(FunctionEmitterVisitor.visit_load_global  sB    xx||$332=333@@@@@r^   r/   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   r/   RIGHT_SHIFTrj  rY   r~   op_strr   r   r   rr  rs  s        r\   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Cr^   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 )Nrr   r   r   r   r   )r   rr  rs  r   r!   SLTSGTSLESGErj  rY   ULTUGTULEUGErk  rw   r.   r   r~   ru  )r   r   r   rr  rs  lhs_castrhs_casts          r\   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Wr^   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(rU   r3  )r   rr  rs  r   r(   MODr~   ru  rv  s        r\   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:::;;;;;r^   r'   c                    |                      |          }|                      |j                  }|                     | d| d           d S )Nz = -r   rf  r   s       r\   visit_float_negz&FunctionEmitterVisitor.visit_float_neg  sM    xx||hhrv$**C***+++++r^   r&   c           
         |                      |          }|                      |j                  }|                      |j                  }|                     | d| d|j        |j                  d| d           d S rq  )r   rr  rs  r~   ru  r   rv  s        r\   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Cr^   r5   c                    |                      |          }|                      |j                  }|                     |j                  }|                     | d| d| d           d S )Nz = *(r   r   )r   r   rX   rY   r~   )r   r   r   r   rY   s        r\   visit_load_memz%FunctionEmitterVisitor.visit_load_mem  sh    xx||hhrvzz"'""$44T44c44455555r^   r>   c           	         |                      |j                  }|                      |j                  }|                     |j                  }||k    r!|                     d| d| d| d           d S d S )Nz*(r   r   r   )r   r   r   rX   	dest_typer~   )r   r   r   r   r  s        r\   visit_set_memz$FunctionEmitterVisitor.visit_set_mem  s    xx  hhrvJJr|,,	 3;;NN=	==d==s===>>>>> ;r^   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   rw   rO  rH   fieldr   r~   rk   rY   _ctyperg   r   s       r\   visit_get_element_ptrz,FunctionEmitterVisitor.visit_get_element_ptr  s    xx||hhrv"+w/////x2;,,,,.C,,,'..bgnbk&6RX 	
 	
 	
 	
 	
r^   r1   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   )rY   r   rw   r   r;   r6   r"  r$  rQ   r%  r&  ro   r~   r  )r   r   r   r   r   rs   s         r\   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9r^   r0   c                    d S rW   r   r   s     r\   visit_keep_alivez'FunctionEmitterVisitor.visit_keep_alive  s    r^   rB   c                    |                      |          }|                      |j                  }|                     | d| d           d S re  rf  r   s       r\   visit_unborrowz%FunctionEmitterVisitor.visit_unborrow  sM    xx||hhrv$))3)))*****r^   r   r   c                6    | j                             |          S rW   )rQ   r   )r   r   s     r\   r   zFunctionEmitterVisitor.label      |!!%(((r^   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)
rw   r.   r   rN   rY   rS   r%   r
  rQ   r   )r   r   valrx   r   s        r\   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(((r^   r  rJ   c                6    | j                             |          S rW   )rQ   rX   r   r  s     r\   rX   zFunctionEmitterVisitor.ctype  r  r^   c                6    | j                             |          S rW   )rQ   r   r  s     r\   r   z$FunctionEmitterVisitor.c_error_value  s    |))%000r^   c                6    | j                             |          S rW   )rQ   r   r  s     r\   r   z(FunctionEmitterVisitor.c_undefined_value  s    |--e444r^   Nr   liner   objectc               >    | j                             ||           d S )Nr   rX  )r   r  r   s      r\   r~   z FunctionEmitterVisitor.emit_line   s#    t-----r^   linesc                $     | j         j        |  d S rW   )rQ   r   )r   r  s     r\   r   z!FunctionEmitterVisitor.emit_lines#  s    ''''r^   c                J    | j                             ||| j                   d S )N)r   )rQ   r  r   )r   r   r  s      r\   r  z#FunctionEmitterVisitor.emit_inc_ref&  s'    !!$DI!>>>>>r^   rH  boolc                L    | j                             |||| j                   d S )N)rH  r   )rQ   r  r   )r   r   r  rH  s       r\   r  z#FunctionEmitterVisitor.emit_dec_ref)  s)    !!$wTY!OOOOOr^   c                :    | j                             |           d S rW   )r   r~   )r   r  s     r\   emit_declarationz'FunctionEmitterVisitor.emit_declaration,  s    ##D)))))r^   c                n    |j         -| j                            | j        | j        |j                    d S d S rW   )r   rQ   r   rn   ro   r   s     r\   r   z%FunctionEmitterVisitor.emit_traceback/  s<    )L''(8$:JBL^_____ *)r^   r]  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   ru   z7assert(PyErr_Occurred() != NULL && "failure w/o err!");)r   rQ   r%  ro   r~   rn   r\  r   )r   r   r]  r   globals_statics        r\   r	  z+FunctionEmitterVisitor.emit_attribute_error3  s    !---11)T=MNNA ((v66"1%"1%
	
 
	
 
	
  	VNNTUUUUU	V 	Vr^   rY   c                (    t          |          rdS dS )Nz(Py_ssize_t)rr   )rO   r   rY   s     r\   rj  z+FunctionEmitterVisitor.emit_signed_int_castD  s    T?? 	!>2r^   c                J    t          |          rdS t          |          rdS dS )Nz
(uint32_t)z
(uint64_t)rr   )rK   rL   r  s     r\   rk  z-FunctionEmitterVisitor.emit_unsigned_int_castJ  s1    t$$ 	< && 	<2r^   )
rQ   r   r   r   rn   rS   ro   rS   rR   rp   )rR   rS   )r   r+   rR   rp   )r   r   rR   rp   )r   r<   rR   rp   )r   rA   rR   rp   )r   r   rR   rp   )r   r   rR   rp   )r   r2   rR   rp   )r   r4   rR   rp   )r   rS   r   r   r   r   rR   rS   )r   r)   rR   rp   )rR   r  )r   r=   rR   rp   )r   r6   rR   rp   )r   r-   rR   rp   )r   r@   rR   rp   )r   rE   rR   rS   )r   r   rR   rp   )r   r7   rR   rp   )r   r,   rR   rp   )r   r#   rR   rp   )r   r   rR   rp   )r   r    rR   rp   )r   rC   rR   rp   )r   rD   rR   rp   )r   r:   rR   rp   )r   r   rR   rp   )r   r?   rR   rp   )r   r$   rR   rp   )r   r3   rR   rp   )r   r/   rR   rp   )r   r!   rR   rp   )r   r(   rR   rp   )r   r'   rR   rp   )r   r&   rR   rp   )r   r5   rR   rp   )r   r>   rR   rp   )r   r*   rR   rp   )r   r1   rR   rp   )r   r0   rR   rp   )r   rB   rR   rp   )r   r   rR   rS   )r   rE   rR   rS   )r  rJ   rR   rS   )r  rS   r   r  rR   rp   )r  rS   rR   rp   )r   rS   r  rJ   rR   rp   )r   rS   r  rJ   rH  r  rR   rp   )r  rS   rR   rp   )r   r   r]  rS   r   rS   rR   rp   )rY   rJ   rR   rS   )C__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r  r  r!  r   r   r   r   r   r
   r"  __annotations__r'  r)  r+  r.  r7  rC  rF  rI  rM  rS  rV  rY  r_  rc  rg  rm  ro  rw  r  r  r  r  r  r  r  r  r  r  r   r   rX   r   r   r~   r   r  r  r  r   r	  rj  rk  r   r^   r\   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@, @, @, @,D   57 57 57 57p 	--J    8 8 8 8/ / / /- - - -   F F F F- - - -^, , , ,@ @ @ @\ \ \ \
 
 
 
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"        r^   r}   N)rP   r   rQ   r   rR   rS   )rP   r   rQ   r   rR   rS   )
rP   r   rQ   r   rn   rS   ro   rS   rR   rp   )\__doc__
__future__r   typingr   mypyc.analysis.blockfreqr   mypyc.codegen.emitr   r   r   r	   mypyc.commonr
   r   r   r   r   mypyc.ir.class_irr   mypyc.ir.func_irr   r   r   r   r   mypyc.ir.opsr   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   mypyc.ir.pprintrF   mypyc.ir.rtypesrG   rH   rI   rJ   rK   rL   rM   rN   rO   re   rm   r   r}   r   r^   r\   <module>r     s   1 1 " " " " " "       ? ? ? ? ? ? b b b b b b b b b b b b ] ] ] ] ] ] ] ] ] ] ] ] ] ] % % % % % % ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2f 2 1 1 1 1 1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
       	 	 	 	L$ L$ L$ L$^b
 b
 b
 b
 b
Yt_ b
 b
 b
 b
 b
r^   