Ë
    pPêj3±  ã            
      óH  — U 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mZ ddlmZmZmZmZmZmZ ddlmZ ddlmZmZmZmZmZ dd	lmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQ dd
lRmSZS ddlTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZb ddddddddddœ	Zcdedd<   d"d„Zed#d„Zfd$d„Zg	 d%	 	 	 	 	 	 	 	 	 	 	 d&d„Zh G d„ deBd   «      Zii Zjdedd <   d'd!„Zky)(z+Code generation for native function bodies.é    )Úannotations)ÚFinal)Úfrequently_executed_blocks)ÚDEBUG_ERRORSÚ
PREFIX_MAPÚEmitterÚTracebackAndGotoHandlerÚc_array_initializer)ÚHAVE_IMMORTALÚIS_FREE_THREADEDÚNATIVE_PREFIXÚ
REG_PREFIXÚRUNNING_FIELDÚ$source_name_from_generator_attribute)ÚClassIR)ÚFUNC_CLASSMETHODÚFUNC_STATICMETHODÚFuncDeclÚFuncIRÚ
all_values)5Ú	ERR_FALSEÚNAMESPACE_MODULEÚNAMESPACE_TYPEÚAssignÚAssignMultiÚ
BasicBlockÚBoxÚBranchÚCallÚCallCÚCastÚComparisonOpÚ	ControlOpÚCStringÚDecRefÚExtendÚFloatÚFloatComparisonOpÚFloatNegÚFloatOpÚGetAttrÚ
GetElementÚGetElementPtrÚGotoÚIncRefÚ
InitStaticÚIntegerÚIntOpÚ	KeepAliveÚLoadAddressÚLoadErrorValueÚ
LoadGlobalÚLoadLiteralÚLoadMemÚ
LoadStaticÚ
MethodCallÚOpÚ	OpVisitorÚPrimitiveOpÚRaiseStandardErrorÚRegisterÚReturnÚSetAttrÚ
SetElementÚSetMemÚTruncateÚTupleGetÚTupleSetÚUnborrowÚUnboxÚUndefÚUnreachableÚValue)Úgenerate_names_for_ir)ÚRArrayÚ	RInstanceÚRStructÚRTupleÚRTypeÚRVecÚis_bool_or_bit_rprimitiveÚis_int32_rprimitiveÚis_int64_rprimitiveÚis_int_rprimitiveÚis_none_rprimitiveÚis_pointer_rprimitiveÚis_simple_refcounted_pointerÚ	is_taggedz	int64_t *z	int32_t *z	int16_t *z	uint8_t *zdouble *zchar *zPyObject **zVecNestedBufItem *zvoid *)	ÚVecI64ÚVecI32ÚVecI16ÚVecU8ÚVecFloatÚVecBoolÚVecTÚ	VecNestedÚVecNestedBufItemr   ÚVEC_ITEMS_C_TYPEc                ó.   — t        | j                  |«      S ©N)Únative_function_type_from_declÚdecl)ÚfnÚemitters     ú[/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypyc/codegen/emitfunc.pyÚnative_function_typerl   o   s   € Ü)¨"¯'©'°7Ó;Ð;ó    c                óÂ   ‡— dj                  ˆfd„| j                  j                  D «       «      xs d}‰j                  | j                  j                  «      }|› d|› d�S )Nú, c              3  óT   •K  — | ]  }‰j                  |j                  «      –— Œ! y ­wrf   )ÚctypeÚtype)Ú.0Úargrj   s     €rk   ú	<genexpr>z1native_function_type_from_decl.<locals>.<genexpr>t   s   øè ø€ ÒF°�W—]‘] 3§8¡8×,ÑFùs   ƒ%(Úvoidz (*)(ú))ÚjoinÚsigÚargsrq   Úret_type)rh   rj   rz   Úrets    `  rk   rg   rg   s   sO   ø€ Ø�9‰9ÓF¸¿¹¿¹ÔFÓFÒPÈ&€DØ
�-‰-˜Ÿ™×)Ñ)Ó
*€CØˆU�%˜�v˜QÐÐrm   c                ój  — g }| j                   j                  D ]@  }|j                  |j                  |j                  «      › t
        › |j                  › �«       ŒB dj                  |j                  | j                   j                  «      |j                  | «      dj                  |«      xs d¬«      S )Nz{ret_type}{name}({args})ro   rv   )r{   Únamerz   )ry   rz   ÚappendÚctype_spacedrr   r   r~   Úformatr{   Únative_function_namerx   )ri   rj   rz   rt   s       rk   Únative_function_headerrƒ   y   s›   € Ø€DØ�v‰v�{‰{ò OˆØ�‰�w×+Ñ+¨C¯H©HÓ5Ð6´z°lÀ3Ç8Á8À*ÐMÕNðOð &×,Ñ,Ø×%Ñ% b§f¡f§o¡oÓ6Ø×)Ñ)¨"Ó-Ø�Y‰Y�t‹_Ò& ð -ó ð rm   Nc           	     óî  — t        |j                  «      }t        | j                  | j                  «      }t        |j                  |«      }t        |||||«      }|j                  t        | j                  |«      › d�«       |j                  «        t        | j                  | j                  «      D ]©  }	t        |	j                  t        «      r|j                  |	j                  «       t        |	j                  t        «      rŒS|	| j                  v rŒb|j!                  |	j                  «      }
d}|j                  dj#                  |
t$        ||	   |¬«      «       Œ« | j                  }t'        |«      D ]  \  }}||_        Œ | j                  D ]«  }|j*                  }t        |t,        «      sJ |«       ‚|j/                  «       D ]s  }|j(                  |j(                  dz   k(  }t        |t0        «      xr  t3        d„ |j5                  «       D «       «      }|r|sŒVd| j                  |j(                     _        Œu Œ­ |�|j9                  | «       t;        | j                  d   «      }t=        t?        |«      «      D ]Â  }||   }||v|_         d }|dz   t?        |«      k  r||dz      }|jC                  |«       ||_"        |jF                  }||_#        d|_$        |jH                  t?        |«      k  sŒw||jH                     jK                  |«       |xjH                  dz  c_$        |jH                  t?        |«      k  rŒLŒÄ |j                  d	«       |jM                  |«       |jM                  |«       y )
Nz {Ú z{ctype}{prefix}{name}{init};)rq   Úprefixr~   Úinité   c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wrf   )Ú
isinstancer+   )rs   Úss     rk   ru   z+generate_native_function.<locals>.<genexpr>»   s   è ø€ ò GØ+,”
˜1œg×&ñGùs   ‚Tr   ú})'r   ÚcontextrL   Úarg_regsÚblocksÚFunctionEmitterVisitorÚ	emit_linerƒ   rh   Úindentr   rŠ   rr   rP   Údeclare_tuple_structrM   r€   r�   r   Ú	enumerateÚlabelÚ
terminatorr#   Útargetsr   ÚanyÚsourcesÚ
referencedÚemit_claim_running_flagr   ÚrangeÚlenÚrareÚ
emit_labelÚ
next_blockÚopsÚop_indexÚacceptÚemit_from_emitter)ri   rj   Úsource_pathÚmodule_nameÚrunning_flag_classÚdeclarationsÚnamesÚbodyÚvisitorÚrrq   r‡   r�   ÚiÚblockr–   ÚtargetÚis_next_blockÚis_problematic_opÚcommonr    r¡   s                         rk   Úgenerate_native_functionr³   …   s  € ô ˜7Ÿ?™?Ó+€LÜ! "§+¡+¨r¯y©yÓ9€EÜ�7—?‘? EÓ*€DÜ$Øˆl˜K¨Ð6Hó€Gð ×ÑÔ4°R·W±W¸gÓFÐGÀsÐKÔLØ‡K�K„Mä˜Ÿ™ R§Y¡YÓ/ò 
ˆÜ�a—f‘fœfÔ%Ø×(Ñ(¨¯©Ô0Ü�a—f‘fœfÔ%Øà�—‘ÑØà×$Ñ$ Q§V¡VÓ,ˆØˆØ×ÑØ*×1Ñ1Ø¤J°U¸1±XÀDð 2ó õ	
ð
ð$ �Y‰Y€FÜ˜fÓ%ò ‰ˆˆ5Øˆ�ðð —‘ò :ˆØ×%Ñ%ˆ
Ü˜*¤iÔ0Ð<°*Ó<Ð0à ×(Ñ(Ó*ò 	:ˆFØ"ŸL™L¨E¯K©K¸!©OÑ;ˆMô !+¨:´vÓ >ò !Ä3ñ GØ0:×0BÑ0BÓ0DôGó DÐñ !Ò$5Ø59�—	‘	˜&Ÿ,™,Ñ'Õ2ñ	:ð	:ð& Ð%à×'Ñ'¨Ô+ä'¨¯	©	°!©Ó5€Fä”3�v“;Óò "ˆØ�q‘	ˆØ FÐ*ˆŒØˆ
Øˆq‰5”3�v“;ÒØ  A¡™ˆJØ�‰˜ÔØ'ˆÔà�i‰iˆØˆŒØˆÔØ×Ñ¤ S£Ó)Ø�× Ñ Ñ!×(Ñ(¨Ô1Ø×Ò Ñ!Õð ×Ñ¤ S£Ô)ð"ð  	‡N�N�3Ôà×Ñ˜lÔ+Ø×Ñ˜dÕ#rm   c                  óX  — e Zd Z	 dE	 	 	 	 	 	 	 	 	 	 	 dFd„ZdGd„ZdHd„ZdId„ZdJd„ZdKd„ZdLd„Z	dMd	„Z
dNd
„ZdOd„ZdPd„ZdQd„ZdRd„ZdSd„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 dTd„ZdUd„ZdUd„ZdVd„ZdWd„ZdXd„ZdYd„ZdZd„Zd[d„Zd\d„Zd]d„Zd^d„Zd_d„Zd`d„Zdad„Zdbd„Z dcd „Z!ddd!„Z"ded"„Z#dfd#„Z$dgd$„Z%dhd%„Z&did&„Z'djd'„Z(dkd(„Z)dld)„Z*dmd*„Z+dnd+„Z,dod,„Z-dpd-„Z.dqd.„Z/drd/„Z0dsd0„Z1dtd1„Z2dud2„Z3dvd3„Z4dwd4„Z5dxd5„Z6dyd6„Z7dzd7„Z8d{d8„Z9d{d9„Z:d{d:„Z;dd;œd|d<„Z<d}d=„Z=d~d>„Z>dd?„Z?d€d@„Z@dJdA„ZAd�dB„ZBd‚dC„ZCd‚dD„ZDy)ƒr�   Nc                óè   — || _         |j                  | _        || _        || _        || _        || _        d | _        |j                  j                  | _        d| _	        d | _
        g | _        d| _        y )NFr   )rj   r©   r¨   r¥   r¦   r§   Úrunning_flag_ptrr�   Úliteralsrž   r    r¡   r¢   )Úselfrj   r¨   r¥   r¦   r§   s         rk   Ú__init__zFunctionEmitterVisitor.__init__ß   sk   € ð ˆŒØ—]‘]ˆŒ
Ø(ˆÔØ&ˆÔØ&ˆÔà"4ˆÔØ,0ˆÔØŸ™×0Ñ0ˆŒØˆŒ	à-1ˆŒàˆŒàˆ�rm   c                ó6   — | j                   j                  «       S rf   )rj   Ú	temp_name©r¸   s    rk   r»   z FunctionEmitterVisitor.temp_nameø   s   € Ø�|‰|×%Ñ%Ó'Ð'rm   c                ó�   — |j                   | j                  ur.| j                  d| j                  |j                   «      z  «       y y )Núgoto %s;)r•   r    r‘   ©r¸   Úops     rk   Ú
visit_gotoz!FunctionEmitterVisitor.visit_gotoû   s5   € Ø�8‰8˜4Ÿ?™?Ñ*Ø�N‰N˜:¨¯
©
°2·8±8Ó(<Ñ<Õ=ð +rm   c                óX  — |j                   }t        |t        «      r7| j                  j	                  || j                  |«      | j                  |«      S t        |t        «      r |dk(  rdnd}| j                  |«      › d|› d�S | j                  |«      › d|› d| j                  |«      › �S )Nú!=z>=ú<z.len z 0ú )rr   rŠ   rP   rj   Útuple_undefined_check_condÚregÚc_error_valuerR   )r¸   ÚvalueÚcompareÚtypÚvec_compares        rk   Úerror_value_checkz(FunctionEmitterVisitor.error_value_checkÿ   s¤   € Ø�j‰jˆÜ�cœ6Ô"à—<‘<×:Ñ:Ø�T—X‘X˜e“_ d×&8Ñ&8¸'óð ô ˜œTÔ"à")¨T¢/™$°sˆKØ—h‘h˜u“oÐ& e¨K¨=¸Ð;Ð;à—h‘h˜u“oÐ& a¨ y°°$×2DÑ2DÀSÓ2IÐ1JÐKÐKrm   c                ó.  — |j                   |j                  }}|j                  }d}|| j                  u r|j                  €	||}}| }d}|rdnd}d}|j
                  t        j                  k(  r"| j                  |j                  «      }|› |› �}nG|j
                  t        j                  k(  r#|rdnd}	| j                  |j                  |	«      }nJ d«       ‚|j                  €|j                  r|sd|› d	�}nd
|› d	�}|| j                  u rŽ|j                  €6|| j                  urs| j                  d|› d| j                  |«      › d�«       y | j                  d|› d�«       | j                  |«       | j!                  d| j                  |«      z  d«       y y | j                  d|› d�«       | j                  |«       || j                  ur#| j                  d| j                  |«      z  «       | j!                  dd| j                  |«      z  «       y )NFTú!r…   rÃ   ú==zInvalid branchz	unlikely(rw   zlikely(úif (z) goto ú;ú) {r¾   rŒ   z} elsez    goto %s;)ÚtrueÚfalseÚnegatedr    Útraceback_entryrÀ   r   ÚBOOLrÇ   rÉ   ÚIS_ERRORrÍ   rž   r‘   r•   Úemit_tracebackÚ
emit_lines)
r¸   rÀ   rÔ   rÕ   rÖ   Únegated_rareÚnegÚcondÚexpr_resultrÊ   s
             rk   Úvisit_branchz#FunctionEmitterVisitor.visit_branch  sì  € Ø—g‘g˜rŸx™xˆeˆØ—*‘*ˆØˆØ�4—?‘?Ñ" r×'9Ñ'9Ð'Aà �%ˆDØ!�kˆGØˆLá‰c "ˆØˆØ�5‰5”F—K‘KÒØŸ(™( 2§8¡8Ó,ˆKØ�U˜;˜-Ð(‰DØ�U‰U”f—o‘oÒ%Ù%‘d¨4ˆGØ×)Ñ)¨"¯(©(°GÓ<‰Dà*Ð*Ó*�5ð ×ÑÐ)¨R¯WªWÙØ" 4 &¨Ð*‘à    aÐ(�à�D—O‘OÑ#Ø×!Ñ!Ð)Ø˜tŸ™Ñ.Ø—N‘N T¨$¨¨w°t·z±zÀ$Ó7GÐ6HÈÐ#JÕKà—‘  d V¨4Ð0Ô1Ø×#Ñ# BÔ'Ø—‘ 
¨T¯Z©Z¸Ó-=Ñ =¸sÕCð /ð �N‰N˜T $  tÐ,Ô-Ø×Ñ Ô#à˜4Ÿ?™?Ñ*Ø—‘˜z¨D¯J©J°tÓ,<Ñ<Ô=à�O‰O˜H n°t·z±zÀ%Ó7HÑ&HÕIrm   c                óv  — | j                   }|€J ‚|j                  | j                  «      }| j                  |j                  d   «      }d|› d|› dt
        › �| _        | j                  }|j                  d«      rdnd}| j                  d|› d	�«       | j                  d
|› d�«       | j                  d«       y)z7Claim the generator's running flag or raise ValueError.Nr   z&((ú *)ú)->Ú	__await__rˆ   zif (unlikely(!CPyGen_TryEnter(z))) {z$return CPyGen_AlreadyExecutingError(ú);rŒ   )	r§   Ústruct_namer©   rÇ   rŽ   r   r¶   Ú
has_methodr‘   )r¸   ri   ÚclÚstructÚself_strÚflagÚis_coroutines          rk   r›   z.FunctionEmitterVisitor.emit_claim_running_flag:  s¯   € à×$Ñ$ˆØˆ~Ðˆ~Ø—‘ §
¡
Ó+ˆØ—8‘8˜BŸK™K¨™NÓ+ˆØ"% f X¨S°°
¸#¼m¸_Ð MˆÔØ×$Ñ$ˆØŸM™M¨+Ô6‘q¸AˆØ�‰Ð7¸°v¸VÐDÔEØ�‰Ð=¸l¸^È2ÐNÔOØ�‰�sÕrm   c                ó^   — | j                   €J ‚| j                  d| j                   › d�«       y)z=Release the flag; every helper exit is represented by Return.NzCPyGen_Exit(rå   )r¶   r‘   r¼   s    rk   Úemit_release_running_flagz0FunctionEmitterVisitor.emit_release_running_flagG  s0   € à×$Ñ$Ð0Ð0Ð0Ø�‰˜ d×&;Ñ&;Ð%<¸BÐ?Õ@rm   c                óš   — | j                  |j                  «      }| j                  �| j                  «        | j	                  d|z  «       y )Nz
return %s;)rÇ   rÉ   r§   rî   r‘   )r¸   rÀ   Ú	value_strs      rk   Úvisit_returnz#FunctionEmitterVisitor.visit_returnL  s=   € Ø—H‘H˜RŸX™XÓ&ˆ	Ø×"Ñ"Ð.Ø×*Ñ*Ô,Ø�‰�| iÑ/Õ0rm   c           
     óZ  — | j                  |«      }|j                  }| j                  j                  |«       t	        |j
                  «      dk(  r| j                  |› d�«       y t        |j
                  «      D ].  \  }}| j                  |› d|› d| j                  |«      › d�«       Œ0 y )Nr   z.empty_struct_error_flag = 0;ú.fú = rÒ   )rÇ   Ú
tuple_typerj   r“   r�   Úitemsr‘   r”   )r¸   rÀ   Údestrõ   r­   Úitems         rk   Úvisit_tuple_setz&FunctionEmitterVisitor.visit_tuple_setR  s”   € Ø�x‰x˜‹|ˆØ—]‘]ˆ
Ø�‰×)Ñ)¨*Ô5Üˆr�x‰x‹=˜AÒØ�N‰N˜d˜VÐ#@ÐAÕBä$ R§X¡XÓ.ò C‘��4Ø—‘ $  r¨!¨¨C°·±¸³Ð/?¸qÐAÕBñCrm   c                ó°  — | j                  |j                  «      }| j                  |j                  «      }||k7  r›|j                  j                  }|j                  j                  }|j                  r|j                  sd|› �}n9|j                  s-|j                  r!d| j
                  j                  |«      › d|› �}| j                  |› d|› d�«       y y )Nz(void *)ú(rw   rô   rÒ   )rÇ   r÷   Úsrcrr   Ú
is_unboxedrj   rq   r‘   )r¸   rÀ   r÷   rü   Úsrc_typeÚ	dest_types         rk   Úvisit_assignz#FunctionEmitterVisitor.visit_assign\  s»   € Ø�x‰x˜Ÿ™Ó ˆØ�h‰h�r—v‘vÓˆð �3Š;Ø—v‘v—{‘{ˆHØŸ™Ÿ™ˆIØ×"Ò"¨9×+?Ò+?ð !  Ð&‘Ø×(Ò(¨Y×-AÒ-Að ˜$Ÿ,™,×,Ñ,¨YÓ7Ð8¸¸#¸Ð?�Ø�N‰N˜d˜V 3 s e¨1Ð-Õ.ð rm   c                óž  — |j                   j                  }t        |t        «      sJ |«       ‚| j	                  |j                   «      }| j                  d| j                  j                  |j                  «      |t        |j                  «      t        |j                  D �cg c]  }| j	                  |«      ‘Œ c}d¬«      fz  «       y c c}w )Nz%s%s[%d] = %s;T)Úindented)r÷   rr   rŠ   rM   rÇ   r‘   rj   r€   Ú	item_typer�   rü   r
   )r¸   rÀ   rË   r÷   r‹   s        rk   Úvisit_assign_multiz)FunctionEmitterVisitor.visit_assign_multin  sœ   € Ø�g‰g�l‰lˆÜ˜#œvÔ&Ð+¨Ó+Ð&Ø�x‰x˜Ÿ™Ó ˆð 	�‰Øà—‘×)Ñ)¨#¯-©-Ó8ØÜ�B—F‘F“Ü#¸"¿&¹&Ö$A°Q T§X¡X¨a¥[Ò$AÈDÔQð	ñõ	
ùò %Bs   Â!C
c           	     ó¬  — | j                  |«      }t        |j                  t        «      r¤|j                  j                  D �cg c]  }| j                  |«      ‘Œ }}| j                  «       }| j                  dj                  | j                  |j                  «      |dj                  |«      «      «       | j                  |› d|› d�«       y t        |j                  t        «      r'| j                  j                  ||j                  «       y | j                  | j                  |«      › d| j                  |j                  «      › d�«       y c c}w )Nz{} {} = {{ {} }};ro   rô   rÒ   )rÇ   rŠ   rr   rP   ÚtypesÚc_undefined_valuer»   r‘   r�   rq   rx   rR   rj   Úset_undefined_valuerÈ   )r¸   rÀ   rÇ   rø   ÚvaluesÚtmps         rk   Úvisit_load_error_valuez-FunctionEmitterVisitor.visit_load_error_value~  sû   € Ø�h‰h�r‹lˆÜ�b—g‘gœvÔ&Ø?A¿w¹w¿}¹}ÖM°t�d×,Ñ,¨TÕ2ÐMˆFÐMØ—.‘.Ó"ˆCØ�N‰NÐ.×5Ñ5°d·j±jÀÇÁÓ6IÈ3ÐPT×PYÑPYÐZ`ÓPaÓbÔcØ�N‰N˜c˜U # c U¨!Ð,Õ-Ü˜Ÿ™¤Ô&Ø�L‰L×,Ñ,¨S°"·'±'Õ:à�N‰N˜dŸh™h r›l˜^¨3¨t×/AÑ/AÀ"Ç'Á'Ó/JÐ.KÈ1ÐMÕNùò Ns   ÁEc                ó>  — | j                   j                  |j                  «      }t        |j                  «      s2| j                  d| j                  |«      |fz  |j                  ¬«       y | j                  d| j                  |«      |fz  |j                  ¬«       y )Nz%s = CPyStatics[%d];©Úannz#%s = (CPyTagged)CPyStatics[%d] | 1;)r·   Úliteral_indexrÉ   rV   rr   r‘   rÇ   )r¸   rÀ   Úindexs      rk   Úvisit_load_literalz)FunctionEmitterVisitor.visit_load_literalŠ  s|   € Ø—‘×+Ñ+¨B¯H©HÓ5ˆÜ  §¡Ô)Ø�N‰NÐ1°T·X±X¸b³\À5Ð4IÑIÈrÏxÉxˆNÕXà�N‰NØ5¸¿¹À"»ÀuÐ8MÑMÐSU×S[ÑS[ð õ rm   c                ól  — | j                   j                  |j                  j                  «       | j                   j                  |«       d|j                  j	                  | j                   j
                  «      › d�}|j                  �r'|j                  j                  j                  �rt        |j                  «      j                  |j                  «      }| j                   j                  «       }| j                  j                  d|› d�«       | j                   j                  dj                  |dj                  | j                   j                  |«      d|› |› d�|«      «      «       d| j!                  |j                  j#                  |j                  «      «      › d�}d|› d	|› d
|› d�S |j                  j                  j                  r7|j                  rJ ‚d|j	                  | j                   j
                  «      › d�}d|› |› d| j                   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.
        rû   râ   zsize_t rÒ   z{} = {};zCPy_FindAttrOffset({}, {}, {})z	)->vtableÚ*z	((char *)z + rw   rã   )rj   Úregister_group_depÚ
class_typeÚclass_irræ   r©   Úis_traitÚlistÚ
attributesr  Úattrr»   r¨   r‘   r�   Útype_struct_namerq   Ú	attr_type)r¸   ÚobjrÀ   Údecl_clÚcastÚtrait_attr_indexÚoffsetÚ	attr_casts           rk   Úget_attr_exprz$FunctionEmitterVisitor.get_attr_expr“  s×  € ð 	�‰×'Ñ'¨¯©×(>Ñ(>Ô?Ø�‰×'Ñ'¨Ô0Ø�2—=‘=×,Ñ,¨T¯\©\×-?Ñ-?Ó@ÐAÀÐEˆØ×Ó §¡× 6Ñ 6× ?Ó ?ô  $ G×$6Ñ$6Ó7×=Ñ=¸b¿g¹gÓFÐà—\‘\×+Ñ+Ó-ˆFØ×Ñ×'Ñ'¨'°&°¸Ð(;Ô<Ø�L‰L×"Ñ"Ø×!Ñ!ØØ4×;Ñ;ØŸ™×5Ñ5°gÓ>Ø˜D˜6 #  iÐ0Ø(óóô	ð ˜DŸJ™J r§}¡}×'>Ñ'>¸r¿w¹wÓ'GÓHÐIÈÐMˆIØ�y�k ¨3¨%¨s°6°(¸!Ð<Ð<ð �}‰}×%Ñ%×.Ò.Ø"×+Ò+Ð+Ð+Ø˜7×.Ñ.¨t¯|©|×/AÑ/AÓBÐCÀ3ÐG�Ø�t�f˜S˜E  T§\¡\×%6Ñ%6°r·w±wÓ%?Ð$@ÐAÐArm   c                ó‚  — t         xr- t        |«      xr  |j                   xr |j                  «        }|r>|j	                  |j
                  «      r#| j                  j                  |› d|› d�«       |S |r&| j                  j                  |› d|› d|› d�«       |S | j                  j                  |› d|› d�«       |S )a2  Emit the load of a native attribute into 'dest', taking a new reference.

        On free-threaded builds, reading a single reference-counted 'PyObject *' field
        and taking a new reference must be synchronized to avoid a use-after-free race
        with a concurrent setter. CPy_GetAttrRef uses an optimistic validated incref
        with a locked fallback and returns a new reference (or NULL if undefined, which
        on a free-threaded build includes an attribute deleted by another thread while
        the read was in flight), so callers must NOT emit a separate inc_ref. Return
        True in that case so the caller can skip it.

        Final attributes are never rebound (no setter), so there is no concurrent writer
        and no use-after-free window; an owned read uses the cheaper CPy_GetAttrRefFinal
        (a plain load + incref). Borrowed reads keep the plain load: they are only emitted
        when safe on free-threaded builds, either for Final and vec attributes in
        transform_member_expr in irbuild or for private generator-frame attributes proven
        safe by borrow_generator_attrs. The default (GIL) build always takes the plain-load
        path and increfs separately.

        Thread-confined attributes also use plain loads; see
        ClassIR.attrs_are_thread_confined.
        z% = CPy_GetAttrRefFinal((PyObject **)&rå   z = CPy_GetAttrRef((PyObject *)ú, (PyObject **)&rô   rÒ   )r   rY   Úis_borrowedÚattrs_are_thread_confinedÚis_final_attrr  rj   r‘   )r¸   r÷   r  rÀ   rè   Ú
attr_rtypeÚ	attr_exprÚuse_get_attr_refs           rk   Úemit_load_attr_take_refz.FunctionEmitterVisitor.emit_load_attr_take_ref¼  sÞ   € ô2 ò 3Ü,¨ZÓ8ò3à—N‘NÐ"ò3ð ×0Ñ0Ó2Ð2ð	 	ñ  × 0Ñ 0°·±Ô 9Ø�L‰L×"Ñ" d VÐ+PÐQZÐP[Ð[]Ð#^Ô_ð  Ðñ Ø�L‰L×"Ñ"Ø�&Ð6°s°eÐ;KÈIÈ;ÐVXÐYôð
  Ðð �L‰L×"Ñ" d V¨3¨y¨k¸Ð#;Ô<ØÐrm   c                ó\  — |j                   r| j                  |«       y | j                  |«      }| j                  |j                  «      }|j                  }|j
                  }|j                  |j                  «      \  }}t        |j                  |j                  «      }|j                  xr |j                  }	|j                  |j                  |	¬«      �r|j                  r|j                  |j                  «      r,| j                  |› d�|j                  |j                  g «       y |j                  rdnd}
| j!                  d||
|| j"                  j%                  |j
                  «      |j'                  |j                  «      |j)                  | j*                  «      | j-                  |j/                  |j                  «      «      |j                  fz  «       y | j1                  |||«      }| j3                  ||||||«      }|j5                  |j                  «      }d }|�s4| j"                  j7                  ||d||j                  |d¬«       | j9                  «       }|�ª|j:                  |u rœ|j<                  t>        j@                  k(  r|jB                  �s|jD                  sg| jG                  ||jH                  |«       | j!                  d	| jK                  |jL                  «      z  «       |}| j"                  j!                  d
«       |sJd}| j"                  j!                  djO                  |tQ        |«      tQ        |jH                  «      «      «       |jR                  rI|jT                  s=|s;|s|s| j"                  j!                  d«       | j"                  jW                  ||«       |r[|jX                  | jZ                  ur-| j!                  d	| jK                  |jX                  «      z  «       | xj\                  dz  c_.        y |s| j"                  j!                  d
«       y y )N)Úprefer_methodrô   Ú_TRAITr…   z1%s = CPY_GET_ATTR%s(%s, %s, %d, %s, %s); /* %s */rÐ   T)Úunlikelyr¾   rŒ   ÚPyExc_AttributeErrorz4PyErr_SetString({}, "attribute {} of {} undefined");z} else {rˆ   )/Úallow_error_valueÚget_attr_with_allow_error_valuerÇ   r  r  r  Úattr_detailsr  r   Úfullnamer  Úerror_overlapÚ
get_methodÚis_ext_classÚis_method_finalÚemit_method_callr‘   rj   r  Úgetter_indexræ   r©   rq   r  r#  r,  Úis_always_definedÚemit_undefined_attr_checkÚnext_branchrÉ   rÀ   r   rÙ   r×   rÖ   Úemit_attribute_errorr~   r•   rÔ   r�   ÚreprÚis_refcountedr&  Úemit_inc_refrÕ   r    r¢   )r¸   rÀ   r÷   r  Úrtyperè   r)  r  Úsource_attr_namer.  Úversionr*  r+  Úalways_definedÚmerged_branchÚbranchÚ	exc_classs                    rk   Úvisit_get_attrz%FunctionEmitterVisitor.visit_get_atträ  sP  € Ø×ÒØ×0Ñ0°Ô4ØØ�x‰x˜‹|ˆØ�h‰h�r—v‘vÓˆØ—‘ˆØ�^‰^ˆØ Ÿo™o¨b¯g©gÓ6Ñˆ
�GÜ?ÀÇÁÈ×IYÑIYÓZÐØŸ™Ò@¨
×(@Ñ(@ˆØ�=‰=˜Ÿ™°ˆ=Õ>ð —?’? b×&8Ñ&8¸¿¹Ô&AØ×%Ñ%¨¨¨c l°B·F±F¸B¿G¹GÀRÕHà&(§k¢k™(°r�Ø—‘ØGàØØØŸ™×5Ñ5°e·n±nÓEØ×*Ñ*¨2¯7©7Ó3Ø×)Ñ)¨$¯*©*Ó5ØŸ
™
 5§?¡?°2·7±7Ó#;Ó<ØŸ™ð	ñ
õð ×*Ñ*¨3°°GÓ<ˆIØ#×;Ñ;Ø�c˜2˜r :¨yó Ðð  ×1Ñ1°"·'±'Ó:ˆNØ ˆMÚ!Ø—‘×6Ñ6Ø  d¨C°·±¸"Àtð 7ô ð ×)Ñ)Ó+�ØÐ%àŸ™¨Ñ*Ø"ŸI™I¬¯©Ò8Ø"×2Ñ2Ð>Ø &§¢ð ×1Ñ1°&¸"¿'¹'ÐCSÔTØŸ™ z°D·J±J¸v¿{¹{Ó4KÑ'KÔLØ(.˜ØŸ™×.Ñ.¨sÔ3Ù$Ø 6�IØ—L‘L×*Ñ*ØN×UÑUØ%¤tÐ,<Ó'=¼tÀBÇGÁG»}óôð ×'Ò'°·²ÑGWÙ$©^Ø—L‘L×*Ñ*¨:Ô6Ø—‘×)Ñ)¨$°
Ô;ÙØ ×&Ñ&¨d¯o©oÑ=Ø—N‘N :°·
±
¸=×;NÑ;NÓ0OÑ#OÔPØ—’ Ñ"–Ù#Ø—‘×&Ñ& sÕ+ð $rm   c                ó   — | j                  |«      }| j                  |j                  «      }|j                  }|j                  }|j	                  |j
                  «      \  }}| j                  |||«      }| j                  ||||||«      sƒ|j                  rv|j                  si| j                  |d«      }	| j                  j                  d|	› d�«       | j                  j                  ||«       | j                  j                  d«       yyyy)zƒHandle GetAttr with allow_error_value=True.

        This allows NULL or other error value without raising AttributeError.
        rÃ   rÑ   rÓ   rŒ   N)rÇ   r  r  r  r4  r  r#  r,  rA  r&  rÍ   rj   r‘   rB  )
r¸   rÀ   r÷   r  rC  rè   r)  r  r*  Úchecks
             rk   r3  z6FunctionEmitterVisitor.get_attr_with_allow_error_value0  sê   € ð
 �x‰x˜‹|ˆØ�h‰h�r—v‘vÓˆØ—‘ˆØ�^‰^ˆØ Ÿo™o¨b¯g©gÓ6Ñˆ
�Gà×&Ñ& s¨B°Ó8ˆ	ð ×+Ñ+¨D°#°r¸2¸zÈ9ÔUà×'Ò'°·²Ø×.Ñ.¨r°4Ó8�Ø—‘×&Ñ&¨¨e¨W°DÐ'9Ô:Ø—‘×)Ñ)¨$°
Ô;Ø—‘×&Ñ& sÕ+ð	 1?Ð'ð Vrm   c                óª   — | j                   dz   t        | j                  «      k  r.| j                  | j                   dz      }t        |t        «      r|S y )Nrˆ   )r¢   r�   r¡   rŠ   r   )r¸   Únext_ops     rk   r>  z"FunctionEmitterVisitor.next_branchJ  sD   € Ø�=‰=˜1Ñœs 4§8¡8›}Ò,Ø—h‘h˜tŸ}™}¨qÑ0Ñ1ˆGÜ˜'¤6Ô*Ø�Ørm   c                óT  — |j                   t        k(  r| j                  |«      }| j                  |j                  «      }| j                  |j                  «      }|j
                  }|j                  }|j                  |j                  «      \  }}|j                  ���|j                  s|j                   t        k(  s,J d|j                  |j                  |j                   |fz  «       ‚|j                  rdnd}	|j                  j                  j                  }
| j                  j                  |
«      }| j!                  «       }| j#                  d|||	|| j                  j%                  |j                  «      |j'                  |j                  «      ||j)                  | j*                  «      | j                  |j-                  |j                  «      «      ||j                  fz  «       | j#                  › d�«       | j                  j/                  ||
|› d�«       y t0        rµt3        |«      rª|j5                  «       sš| j7                  |||«      }|j                  r#| j                  j#                  d|› d|› d	�«       n%| j                  j#                  d
|› d|› d|› d	�«       |j                   t        k(  r| j                  j#                  › d�«       y y | j7                  |||«      }|j                  s�|j8                  r�|j;                  |j                  «      }|s*| j                  j=                  ||d||j                  |«       | j                  j?                  ||«       |sl| j                  j#                  d«       nP|j@                  rD|j;                  |j                  «      s)| j                  jC                  |||||j                  «       | j                  j#                  |› d|› d�«       |j                   t        k(  r| j                  j#                  › d�«       y y )Nz%s %d %d %sr/  r…   z<%s %s = CPY_SET_ATTR%s(%s, %s, %d, %s, %s, %s, %s); /* %s */z = 1;ú = 0;zCPy_InitAttrRef((PyObject **)&ro   rå   zCPy_SetAttrRef((PyObject *)r%  rÃ   rŒ   rô   rÒ   )"Ú
error_kindr   rÇ   r  rü   r  r  r4  r  ÚpropsetÚis_initr  ry   r{   rj   rq   r»   r‘   r  Úsetter_indexræ   r©   r  Úemit_error_checkr   rY   r'  r#  rA  r<  r=  Úemit_dec_refr6  Úemit_attr_bitmap_set)r¸   rÀ   r÷   r  rü   rC  rè   r)  r  rE  r{   Ú
c_ret_typer
  r*  rF  s                  rk   Úvisit_set_attrz%FunctionEmitterVisitor.visit_set_attrQ  sr  € Ø�=‰=œIÒ%Ø—8‘8˜B“<ˆDØ�h‰h�r—v‘vÓˆØ�h‰h�r—v‘vÓˆØ—‘ˆØ�^‰^ˆØ Ÿo™o¨b¯g©gÓ6Ñˆ
�GØ�:‰:Ñ!à—z’z b§m¡m´yÒ&@ð À-Ø—‘Ø—
‘
Ø—‘Øð	Sñ Có Ð@ð #%§+¢+‘h°2ˆGØ—z‘z—~‘~×.Ñ.ˆHØŸ™×+Ñ+¨HÓ5ˆJØ—.‘.Ó"ˆCØ�N‰NØNàØØØØ—L‘L×1Ñ1°%·.±.ÓAØ×&Ñ& r§w¡wÓ/ØØ×%Ñ% d§j¡jÓ1Ø—J‘J˜uŸ™¨r¯w©wÓ7Ó8ØØ—G‘Gðñôð  �N‰N˜d˜V 5˜>Ô*Ø�L‰L×)Ñ)¨#¨x¸D¸6À¸ÕHåÜ,¨ZÔ8Ø×0Ñ0Ô2ð ×*Ñ*¨3°°GÓ<ˆIØ�zŠzà—‘×&Ñ&Ð)GÈ	À{ÐRTÐUXÐTYÐY[Ð'\Õ]à—‘×&Ñ&Ø1°#°Ð6FÀyÀkÐQSÐTWÐSXÐXZÐ[ôð �}‰}¤	Ò)Ø—‘×&Ñ&¨$¨¨u ~Õ6ð *ð ×*Ñ*¨3°°GÓ<ˆIØ—:’: *×":Ò":ð "$×!5Ñ!5°b·g±gÓ!>�Ù%Ø—L‘L×:Ñ:Ø" I¨t°S¸"¿'¹'À2ôð —‘×)Ñ)¨)°ZÔ@Ù%Ø—L‘L×*Ñ*¨3Õ/Ø×)Ò)°"×2FÑ2FÀrÇwÁwÔ2Oð —‘×1Ñ1°#°s¸JÈÈBÏGÉGÔTð �L‰L×"Ñ" i [°°C°5¸Ð#:Ô;Ø�}‰}¤	Ò)Ø—‘×&Ñ&¨$¨¨u ~Õ6ð *rm   c                óX  — | j                  |«      }t        |j                     }| j                  j	                  |j
                  |j                  |«      }|j                  t        k(  rd|z  }n|j                  t        k(  rd|› d�}| j                  |› d|› d�|j                  ¬«       y )Nz(PyObject *)%szCPyImport_GetModuleCache(&rw   rô   rÒ   r  )rÇ   r   Ú	namespacerj   Ústatic_nameÚ
identifierr¦   r   r   r‘   r  )r¸   rÀ   r÷   r†   r~   s        rk   Úvisit_load_staticz(FunctionEmitterVisitor.visit_load_staticŸ  s�   € Ø�x‰x˜‹|ˆÜ˜BŸL™LÑ)ˆØ�|‰|×'Ñ'¨¯©°r·~±~ÀvÓNˆØ�<‰<œ>Ò)Ø# dÑ*‰DØ�\‰\Ô-Ò-Ø/°¨v°QÐ7ˆDØ�‰˜$˜˜s 4 &¨Ð*°·±ˆÕ7rm   c                ól  — | j                  |j                  «      }t        |j                     }| j                  j                  |j                  |j                  |«      }|j                  t        k(  rd|z  }| j                  |› d|› d�«       | j                  ||j                  j                  «       y )Nz(PyTypeObject *)%srô   rÒ   )rÇ   rÉ   r   r[  rj   r\  r]  r¦   r   r‘   rB  rr   )r¸   rÀ   rÉ   r†   r~   s        rk   Úvisit_init_staticz(FunctionEmitterVisitor.visit_init_static©  s‰   € Ø—‘˜Ÿ™Ó"ˆÜ˜BŸL™LÑ)ˆØ�|‰|×'Ñ'¨¯©°r·~±~ÀvÓNˆØ�<‰<œ>Ò)Ø(¨5Ñ0ˆEØ�‰˜$˜˜s 5 '¨Ð+Ô,Ø×Ñ˜$ §¡§¡Õ.rm   c                ó$  — | j                  |«      }| j                  |j                  «      }| j                  |› d|› d|j                  › d�«       |j                  s4|j
                  j                  r| j                  ||j
                  «       y y y )Nrô   ró   rÒ   )rÇ   rü   r‘   r  r&  rr   rA  rB  ©r¸   rÀ   r÷   rü   s       rk   Úvisit_tuple_getz&FunctionEmitterVisitor.visit_tuple_get²  sr   € Ø�x‰x˜‹|ˆØ�h‰h�r—v‘vÓˆØ�‰˜$˜˜s 3 % r¨"¯(©(¨°1Ð5Ô6Ø�~Š~ "§'¡'×"7Ò"7Ø×Ñ˜d B§G¡GÕ,ð #8ˆ~rm   c                óD   — |j                   s| j                  |«      dz   S y)Nrô   r…   )Úis_voidrÇ   )r¸   r÷   s     rk   Úget_dest_assignz&FunctionEmitterVisitor.get_dest_assign¹  s   € Ø�|Š|Ø—8‘8˜D“> EÑ)Ð)àrm   c           	     óF  ‡ — ‰ j                  |«      }dj                  ˆ fd„|j                  D «       «      }‰ j                  j	                  |j
                  «      }|j
                  j                  ‰ j                  «      }‰ j                  |› |› t        › |› d|› d�«       y)zCall native function.ro   c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrf   ©rÇ   ©rs   rt   r¸   s     €rk   ru   z4FunctionEmitterVisitor.visit_call.<locals>.<genexpr>Â  ó   øè ø€ Ò:¨3˜Ÿ™ #ŸÑ:ùó   ƒrû   rå   N)
rf  rx   rz   rj   Úget_group_prefixri   Úcnamer©   r‘   r   )r¸   rÀ   r÷   rz   Úlibrn  s   `     rk   Ú
visit_callz!FunctionEmitterVisitor.visit_call¿  s~   ø€ à×#Ñ# BÓ'ˆØ�y‰yÓ:°"·'±'Ô:Ó:ˆØ�l‰l×+Ñ+¨B¯E©EÓ2ˆØ—‘—‘˜DŸJ™JÓ'ˆØ�‰˜$˜ ˜u¤] O°E°7¸!¸D¸6ÀÐDÕErm   c                óŠ   — | j                  |«      }| j                  ||j                  |j                  |j                  «       y)zCall native method.N)rf  r:  r  Úmethodrz   ©r¸   rÀ   r÷   s      rk   Úvisit_method_callz(FunctionEmitterVisitor.visit_method_callÇ  s2   € à×#Ñ# BÓ'ˆØ×Ñ˜d B§F¡F¨B¯I©I°r·w±wÕ?rm   c                ó~  — | j                  |«      }|j                  }t        |t        «      sJ |«       ‚|j                  }|j                  j                  |«      }|j                   xs |j                  |«      }	|j                  t        k(  rg n|j                  t        k(  rd|› d�gn|g}
dj                  |
|D �cg c]  }| j                  |«      ‘Œ c}z   «      }t        || j                  «      }|j                  j                  rdnd}|	r3| j                  |› | j                  j!                  |«      › d|› d�«       y |j#                  |«      }| j                  dj%                  |||| j                  j'                  |j                  «      ||j)                  | j*                  «      |||«	      «       y c c}w )	Nz(PyObject *)Py_TYPE(rw   ro   r/  r…   rû   rå   z4{}CPY_GET_METHOD{}({}, {}, {}, {}, {})({}); /* {} */)rÇ   rr   rŠ   rN   r  Úmethod_declr8  r9  Úkindr   r   rx   rg   rj   r  r‘   Únative_function_callÚmethod_indexr�   r  ræ   r©   )r¸   r÷   Úop_objr~   Úop_argsr  rC  r  rv  Ú	is_directÚobj_argsrt   rz   ÚmtyperE  Ú
method_idxs                   rk   r:  z'FunctionEmitterVisitor.emit_method_callÌ  sš  € Ø�h‰h�vÓˆØ—‘ˆÜ˜%¤Ô+Ð2¨UÓ2Ð+Ø—>‘>ˆð
 —n‘n×0Ñ0°Ó6ˆð
 !×-Ñ-Ð-ÒO°×1IÑ1IÈ$Ó1Oˆ	ð ×ÑÔ#4Ò4ñ à4?×4DÑ4DÔHXÒ4XÐ(¨¨¨QÐ/Ñ0Ð_bÐ^cð 	ð
 �y‰y˜¸gÖ$F°s T§X¡X¨c¥]Ò$FÑFÓGˆÜ.¨{¸D¿L¹LÓIˆØ#Ÿn™n×5Ò5‘(¸2ˆÙà�N‰N˜d˜V D§L¡L×$EÑ$EÀkÓ$RÐ#SÐSTÐUYÐTZÐZ\Ð]Õ^ð ×+Ñ+¨DÓ1ˆJØ�N‰NØF×MÑMØØØØ—L‘L×1Ñ1°%·.±.ÓAØØ×%Ñ% d§j¡jÓ1ØØØó
õùò %Gs   Â>F:
c                ó  — t        |j                  t        «      rYt        |j                  j                  j                  «      s)t        |j                  j                  j                  «      rt        ry t        |j                  t        «      r:t        r4|j                  j                  }t	        |«      t        u rd|cxk  rdk  ry  | j                  |j                  «      }| j                  ||j                  j                  «       y )Néûÿÿÿé   )rŠ   rü   r   rW   rr   rS   r   r7   rÉ   ÚintrÇ   rB  )r¸   rÀ   rÉ   rü   s       rk   Úvisit_inc_refz$FunctionEmitterVisitor.visit_inc_refú  s°   € ä�r—v‘vœsÔ#Ü# B§F¡F§J¡J§O¡OÔ4Ô8QÐRT×RXÑRX×R\ÑR\×RaÑRaÔ8bÝð ä�b—f‘fœkÔ*­}Ø—F‘F—L‘LˆEä�E‹{œcÑ! b¨EÔ&8°SÒ&8àð '9ð �h‰h�r—v‘vÓˆØ×Ñ˜#˜rŸv™vŸ{™{Õ+rm   c                óž   — | j                  |j                  «      }| j                  ||j                  j                  |j                  ¬«       y )N)Úis_xdec)rÇ   rü   rV  rr   r†  )r¸   rÀ   rü   s      rk   Úvisit_dec_refz$FunctionEmitterVisitor.visit_dec_ref  s5   € Ø�h‰h�r—v‘vÓˆØ×Ñ˜#˜rŸv™vŸ{™{°B·J±JÐÕ?rm   c                óº   — | j                   j                  | j                  |j                  «      | j                  |«      |j                  j                  d¬«       y )NT)Ú
can_borrow)rj   Úemit_boxrÇ   rü   rr   r¿   s     rk   Ú	visit_boxz FunctionEmitterVisitor.visit_box  s;   € Ø�‰×Ñ˜dŸh™h r§v¡vÓ.°·±¸³¸b¿f¹f¿k¹kÐVZÐÕ[rm   c                ó  — |j                   rL|j                  r@| j                  | j                  |«      › d| j                  |j                  «      › d�«       y | j                  «       }d }|�µ|j                  |u r§|j                  t        j                  k(  rŠ|j                  �~|j                  sr|j                  | j                  u rZt        | j                  |j                   «      | j"                  | j$                  |j                  «      }| xj&                  dz  c_        | j(                  j+                  | j                  |j                  «      | j                  |«      |j,                  |j                  j,                  |¬«       y )Nrô   rÒ   rˆ   )rþ   Úerror)Úis_uncheckedr&  r‘   rÇ   rü   r>  rÉ   rÀ   r   rÙ   r×   rÖ   rÕ   r    r	   r•   rÔ   r¥   r¦   r¢   rj   Ú	emit_castrr   )r¸   rÀ   rH  Úhandlers       rk   Ú
visit_castz!FunctionEmitterVisitor.visit_cast  s$  € Ø�?Š?˜rŸ~š~Ø�N‰N˜dŸh™h r›l˜^¨3¨t¯x©x¸¿¹Ó/?Ð.@ÀÐBÔCØØ×!Ñ!Ó#ˆØˆØÐà—‘ Ñ"Ø—I‘I¤§¡Ò0Ø×*Ñ*Ð6ØŸšØ—L‘L D§O¡OÑ3ô 2Ø—J‘J˜vŸ{™{Ó+Ø×$Ñ$Ø×$Ñ$Ø×*Ñ*ó	�ð —’ Ñ"•à�‰×ÑØ�H‰H�R—V‘VÓ˜dŸh™h r›l¨B¯G©G¸b¿f¹f¿k¹kÐQXð 	õ 	
rm   c                ó¢   — | j                   j                  | j                  |j                  «      | j                  |«      |j                  «       y rf   )rj   Ú
emit_unboxrÇ   rü   rr   r¿   s     rk   Úvisit_unboxz"FunctionEmitterVisitor.visit_unbox0  s1   € Ø�‰×Ñ §¡¨¯©Ó 0°$·(±(¸2³,ÀÇÁÕHrm   c                ó:   — | j                   j                  d«       y )NzCPy_Unreachable();©rj   r‘   r¿   s     rk   Úvisit_unreachablez(FunctionEmitterVisitor.visit_unreachable3  s   € Ø�‰×ÑÐ3Õ4rm   c                ó‚  — |j                   �Ýt        |j                   t        «      rI|j                   j                  dd«      }| j                  j                  d|j                  › d|› d�«       n£t        |j                   t        «      rY| j                  j                  dj                  |j                  | j                  j                  |j                   «      «      «       n0J d«       ‚| j                  j                  d|j                  › d	�«       | j                  j                  | j                  |«      › d
�«       y )Nú"ú\"zPyErr_SetString(PyExc_z, "z");zPyErr_SetObject(PyExc_{}, {});z)op value type must be either str or ValuezPyErr_SetNone(PyExc_rå   rP  )
rÉ   rŠ   ÚstrÚreplacerj   r‘   Ú
class_namerK   r�   rÇ   )r¸   rÀ   Úmessages      rk   Úvisit_raise_standard_errorz1FunctionEmitterVisitor.visit_raise_standard_error6  sò   € à�8‰8ÐÜ˜"Ÿ(™(¤CÔ(ØŸ(™(×*Ñ*¨3°Ó6�Ø—‘×&Ñ&Ð)?ÀÇÁ¸ÈcÐRYÐQZÐZ]Ð'^Õ_Ü˜BŸH™H¤eÔ,Ø—‘×&Ñ&Ø4×;Ñ;ØŸ™ t§|¡|×'7Ñ'7¸¿¹Ó'Aóõð JÐIÓI�uà�L‰L×"Ñ"Ð%9¸"¿-¹-¸ÈÐ#KÔLØ�‰×Ñ $§(¡(¨2£, ¨uÐ5Õ6rm   c                óè   ‡ — |j                   rd}n‰ j                  |«      }dj                  ˆ fd„|j                  D «       «      }‰ j                  j                  |› |j                  › d|› d�«       y )Nr…   ro   c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrf   ri  rj  s     €rk   ru   z6FunctionEmitterVisitor.visit_call_c.<locals>.<genexpr>M  rk  rl  rû   rå   )re  rf  rx   rz   rj   r‘   Úfunction_name)r¸   rÀ   r÷   rz   s   `   rk   Úvisit_call_cz#FunctionEmitterVisitor.visit_call_cH  sa   ø€ Ø�:Š:Ø‰Dà×'Ñ'¨Ó+ˆDØ�y‰yÓ:°"·'±'Ô:Ó:ˆØ�‰×Ñ $ ¨×(8Ñ(8Ð'9¸¸4¸&ÀÐCÕDrm   c                óH   — t        d|j                  j                  › d�«      ‚)Nzunexpected PrimitiveOp z%: they must be lowered before codegen)ÚRuntimeErrorÚdescr~   r¿   s     rk   Úvisit_primitive_opz)FunctionEmitterVisitor.visit_primitive_opP  s$   € ÜØ% b§g¡g§l¡l ^Ð3XÐYó
ð 	
rm   c                óŠ   — | j                  |«      }| j                  |j                  «      }| j                  |› d|› d�«       y ©Nrô   rÒ   ©rÇ   rü   r‘   )r¸   rÀ   r÷   rÉ   s       rk   Úvisit_truncatez%FunctionEmitterVisitor.visit_truncateU  s:   € Ø�x‰x˜‹|ˆØ—‘˜Ÿ™Ó ˆà�‰˜$˜˜s 5 '¨Ð+Õ,rm   c                ó<  — | j                  |«      }| j                  |j                  «      }|j                  r&| j                  |j                  j                  «      }n%| j                  |j                  j                  «      }| j                  |› d|› |› d�«       y r©  )rÇ   rü   ÚsignedÚemit_signed_int_castrr   Úemit_unsigned_int_castr‘   )r¸   rÀ   r÷   rÉ   Úsrc_casts        rk   Úvisit_extendz#FunctionEmitterVisitor.visit_extend[  su   € Ø�x‰x˜‹|ˆØ—‘˜Ÿ™Ó ˆØ�9Š9Ø×0Ñ0°·±·±Ó=‰Hà×2Ñ2°2·6±6·;±;Ó?ˆHØ�‰˜$˜˜s 8 *¨U¨G°1Ð5Õ6rm   c                ó€   — | j                  |«      }| j                  |› d|j                  › d�|j                  ¬«       y )Nrô   rÒ   r  )rÇ   r‘   r]  r  rs  s      rk   Úvisit_load_globalz(FunctionEmitterVisitor.visit_load_globald  s4   € Ø�x‰x˜‹|ˆØ�‰˜$˜˜s 2§=¡= /°Ð3¸¿¹ˆÕ@rm   c           
     óÔ  — | j                  |«      }| j                  |j                  «      }| j                  |j                  «      }|j                  t        j
                  k(  rP| j                  |j                  j                  «      |z   }| j                  |j                  j                  «      |z   }| j                  |› d|› d|j                  |j                     › d|› d�«       y ©Nrô   rÅ   rÒ   )
rÇ   ÚlhsÚrhsrÀ   r2   ÚRIGHT_SHIFTr®  rr   r‘   Úop_str©r¸   rÀ   r÷   r¶  r·  s        rk   Úvisit_int_opz#FunctionEmitterVisitor.visit_int_oph  s²   € Ø�x‰x˜‹|ˆØ�h‰h�r—v‘vÓˆØ�h‰h�r—v‘vÓˆØ�5‰5”E×%Ñ%Ò%à×+Ñ+¨B¯F©F¯K©KÓ8¸3Ñ>ˆCØ×+Ñ+¨B¯F©F¯K©KÓ8¸3Ñ>ˆCØ�‰˜$˜˜s 3 % q¨¯©°2·5±5Ñ)9Ð(:¸!¸C¸5ÀÐBÕCrm   c                óÂ  — | j                  |«      }| j                  |j                  «      }| j                  |j                  «      }d}d}|j                  t        j
                  t        j                  t        j                  t        j                  fv rL| j                  |j                  j                  «      }| j                  |j                  j                  «      }�nF|j                  t        j                  t        j                  t        j                  t        j                  fv rK| j                  |j                  j                  «      }| j                  |j                  j                  «      }n±t!        |j                  t"        «      r?|j                  j$                  dk  r&| j                  |j                  j                  «      }nXt!        |j                  t"        «      r>|j                  j$                  dk  r%| j                  |j                  j                  «      }| j'                  |› d|› |› d|j(                  |j                     › d|› |› d�
«       y )Nr…   r   rô   rÅ   rÒ   )rÇ   r¶  r·  rÀ   r"   ÚSLTÚSGTÚSLEÚSGEr®  rr   ÚULTÚUGTÚULEÚUGEr¯  rŠ   r1   rÉ   r‘   r¹  )r¸   rÀ   r÷   r¶  r·  Úlhs_castÚrhs_casts          rk   Úvisit_comparison_opz*FunctionEmitterVisitor.visit_comparison_opr  sž  € Ø�x‰x˜‹|ˆØ�h‰h�r—v‘vÓˆØ�h‰h�r—v‘vÓˆØˆØˆØ�5‰5”\×%Ñ%¤|×'7Ñ'7¼×9IÑ9IÌ<×K[ÑK[Ð\Ñ\à×0Ñ0°·±·±Ó=ˆHØ×0Ñ0°·±·±Ó=ŠHØ�U‰U”|×'Ñ'¬×)9Ñ)9¼<×;KÑ;KÌ\×M]ÑM]Ð^Ñ^à×2Ñ2°2·6±6·;±;Ó?ˆHØ×2Ñ2°2·6±6·;±;Ó?‰HÜ˜Ÿ™¤Ô(¨R¯V©V¯\©\¸AÒ-=à×0Ñ0°·±·±Ó=‰HÜ˜Ÿ™¤Ô(¨R¯V©V¯\©\¸AÒ-=à×0Ñ0°·±·±Ó=ˆHØ�‰˜$˜˜s 8 *¨S¨E°°2·9±9¸R¿U¹UÑ3CÐ2DÀAÀhÀZÐPSÈuÐTUÐVÕWrm   c           
     ój  — | j                  |«      }| j                  |j                  «      }| j                  |j                  «      }|j                  t        j
                  k7  r5| j                  |› d|› d|j                  |j                     › d|› d�«       y | j                  |› d|› d|› d�«       y )Nrô   rÅ   rÒ   z = fmod(ro   rå   )rÇ   r¶  r·  rÀ   r*   ÚMODr‘   r¹  rº  s        rk   Úvisit_float_opz%FunctionEmitterVisitor.visit_float_opˆ  s—   € Ø�x‰x˜‹|ˆØ�h‰h�r—v‘vÓˆØ�h‰h�r—v‘vÓˆØ�5‰5”G—K‘KÒØ�N‰N˜d˜V 3 s e¨1¨R¯Y©Y°r·u±uÑ-=Ð,>¸aÀ¸uÀAÐFÕGð �N‰N˜d˜V 8¨C¨5°°3°%°rÐ:Õ;rm   c                óŠ   — | j                  |«      }| j                  |j                  «      }| j                  |› d|› d�«       y )Nz = -rÒ   rª  rb  s       rk   Úvisit_float_negz&FunctionEmitterVisitor.visit_float_neg’  s:   € Ø�x‰x˜‹|ˆØ�h‰h�r—v‘vÓˆØ�‰˜$˜˜t C 5¨Ð*Õ+rm   c           
     óú   — | j                  |«      }| j                  |j                  «      }| j                  |j                  «      }| j                  |› d|› d|j                  |j
                     › d|› d�«       y rµ  )rÇ   r¶  r·  r‘   r¹  rÀ   rº  s        rk   Úvisit_float_comparison_opz0FunctionEmitterVisitor.visit_float_comparison_op—  sf   € Ø�x‰x˜‹|ˆØ�h‰h�r—v‘vÓˆØ�h‰h�r—v‘vÓˆØ�‰˜$˜˜s 3 % q¨¯©°2·5±5Ñ)9Ð(:¸!¸C¸5ÀÐBÕCrm   c                óF  — | j                  |«      }| j                  |j                  «      }| j                  |j                  «      }| j	                  |› d|› d|› d�«       |j
                  s4|j                  j                  r| j                  ||j                  «       y y y )Nz = *(râ   rÒ   )rÇ   rü   rq   rr   r‘   r&  rA  rB  )r¸   rÀ   r÷   rü   rr   s        rk   Úvisit_load_memz%FunctionEmitterVisitor.visit_load_mem�  s€   € Ø�x‰x˜‹|ˆØ�h‰h�r—v‘vÓˆà�z‰z˜"Ÿ'™'Ó"ˆØ�‰˜$˜˜u T F¨#¨c¨U°!Ð4Ô5Ø�~Š~ "§'¡'×"7Ò"7Ø×Ñ˜d B§G¡GÕ,ð #8ˆ~rm   c           	     óè   — | j                  |j                  «      }| j                  |j                  «      }| j                  |j                  «      }||k7  r| j                  d|› d|› d|› d�«       y y )Nz*(râ   rô   rÒ   )rÇ   r÷   rü   rq   rÿ   r‘   ©r¸   rÀ   r÷   rü   rÿ   s        rk   Úvisit_set_memz$FunctionEmitterVisitor.visit_set_mem¦  sg   € Ø�x‰x˜Ÿ™Ó ˆØ�h‰h�r—v‘vÓˆØ—J‘J˜rŸ|™|Ó,ˆ	ð �3Š;Ø�N‰N˜R 	˜{¨#¨d¨V°3°s°e¸1Ð=Õ>ð rm   c           
     óà   — | j                  |«      }| j                  |j                  «      }| j                  |j                  «      }| j	                  |› d|› d|› d|j
                  › d�«       y )Nú = (rw   ú.rÒ   )rÇ   rü   rq   rr   r‘   ÚfieldrÒ  s        rk   Úvisit_get_elementz(FunctionEmitterVisitor.visit_get_element¯  s\   € Ø�x‰x˜‹|ˆØ�h‰h�r—v‘vÓˆØ—J‘J˜rŸw™wÓ'ˆ	Ø�‰˜$˜˜t I ;¨a°¨u°A°b·h±h°Z¸qÐAÕBrm   c           	     ó°  — | j                  |«      }| j                  |j                  «      }t        |j                  t        «      sJ |j                  «       ‚|j
                  |j                  j                  v sJ d«       ‚| j                  dj                  ||j                  j                  ||j                  j                  |j
                  «      «       y )NzInvalid field name.z){} = ({})((CPyPtr){} + offsetof({}, {}));)rÇ   rü   rŠ   rþ   rO   r×  r©   r‘   r�   rr   Ú_ctyper~   rb  s       rk   Úvisit_get_element_ptrz,FunctionEmitterVisitor.visit_get_element_ptrµ  s�   € Ø�x‰x˜‹|ˆØ�h‰h�r—v‘vÓˆä˜"Ÿ+™+¤wÔ/Ð<°·±Ó<Ð/Ø�x‰x˜2Ÿ;™;×,Ñ,Ñ,ÐCÐ.CÓCÐ,ð 	�‰Ø7×>Ñ>Ø�b—g‘g—n‘n c¨2¯;©;×+;Ñ+;¸R¿X¹Xóõ	
rm   c           	     ó´  — | j                  |«      }|j                  }| j                  |j                  j                  || j                  |j
                  «      «      }t        |j                  t        «      r| j                  |› d|› d|› d�«       y | j                  |j                  «      }|j                  j                  }t        |t        t        f«      sJ |«       ‚g }|j                  D ]/  }||k7  r|j                  |› d|› �«       Œ|j                  |«       Œ1 | j                  |› d| j                  |«      › ddj                  |«      › d�«       y )NrÖ  rô   rÒ   rÕ  z) { ro   z };)rÇ   r×  Úset_element_itemrü   rr   rø   rŠ   rI   r‘   rO   rR   r©   r   rq   rx   )	r¸   rÀ   r÷   r×  rø   rü   rþ   Ú
init_itemsÚns	            rk   Úvisit_set_elementz(FunctionEmitterVisitor.visit_set_elementÄ  s#  € Ø�x‰x˜‹|ˆØ—‘ˆØ×$Ñ$ R§V¡V§[¡[°%¸¿¹À"Ç'Á'Ó9JÓKˆÜ�b—f‘fœeÔ$à�N‰N˜d˜V 1 U G¨3¨t¨f°AÐ6Õ7ð —(‘(˜2Ÿ6™6Ó"ˆCØ—v‘v—{‘{ˆHÜ˜h¬´$¨Ô8ÐB¸(ÓBÐ8ØˆJØ—^‘^ò ,�Ø˜’:Ø×%Ñ%¨¨¨Q¨q¨c lÕ3à×%Ñ% dÕ+ð	,ð
 �N‰N˜d˜V 4¨¯
©
°8Ó(<Ð'=¸UÀ4Ç9Á9ÈZÓCXÐBYÐY]Ð^Õ_rm   c                óf   — |dk(  r+|j                   t        v rdt        |j                      › d|› �S |S )Nrö   rû   rw   )rÚ  rd   )r¸   rþ   r×  rø   s       rk   rÝ  z'FunctionEmitterVisitor.set_element_itemÝ  s9   € Ø�GÒ §¡Ô3CÑ CØÔ'¨¯©Ñ8Ð9¸¸4¸&ÐAÐAØˆrm   c                ó  — |j                   }| j                  |«      }t        |j                  t        «      r| j                  |j                  «      }n‰t        |j                  t
        «      rct        |j                  j                     }| j                  j                  |j                  j                  |j                  j                  |«      }n|j                  }| j                  |› d|j                  › d|› d�«       y )NrÕ  z)&rÒ   )rr   rÇ   rŠ   rü   r?   r9   r   r[  rj   r\  r]  r¦   r‘   rÚ  )r¸   rÀ   rË   r÷   rü   r†   s         rk   Úvisit_load_addressz)FunctionEmitterVisitor.visit_load_addressâ  s³   € Ø�g‰gˆØ�x‰x˜‹|ˆÜ�b—f‘fœhÔ'Ø—(‘(˜2Ÿ6™6Ó"‰CÜ˜Ÿ™¤
Ô+Ü §¡× 0Ñ 0Ñ1ˆFØ—,‘,×*Ñ*¨2¯6©6×+<Ñ+<¸b¿f¹f×>PÑ>PÐRXÓY‰Cà—&‘&ˆCØ�‰˜$˜˜t C§J¡J <¨r°#°°aÐ8Õ9rm   c                 ó   — y rf   © r¿   s     rk   Úvisit_keep_alivez'FunctionEmitterVisitor.visit_keep_aliveî  s   € àrm   c                óŠ   — | j                  |«      }| j                  |j                  «      }| j                  |› d|› d�«       y r©  rª  rb  s       rk   Úvisit_unborrowz%FunctionEmitterVisitor.visit_unborrowò  s:   € à�x‰x˜‹|ˆØ�h‰h�r—v‘vÓˆØ�‰˜$˜˜s 3 % qÐ)Õ*rm   c                ó8   — | j                   j                  |«      S rf   )rj   r•   )r¸   r•   s     rk   r•   zFunctionEmitterVisitor.labelú  ó   € Ø�|‰|×!Ñ! %Ó(Ð(rm   c                óÞ  — t        |t        «      r_|j                  }|dk(  rt        |j                  «      ryt        |«      }|dk\  r|dk\  r|dz  }|S |dz  }|S |dk(  rd}|S |d	k  r|dz  }|S t        |t        «      r)t        |j                  «      }|d
k(  ry|dk(  ry|dk(  ry|S t        |t        «      rdt        |j                  «      z   dz   S | j                  j                  |«      S )Nr   ÚNULLl        l            ÚULLÚLLlûÿÿÿ         z(-9223372036854775807LL - 1)i   €ÚinfÚINFINITYz-infz	-INFINITYÚnanÚNANr™  )rŠ   r1   rÉ   rX   rr   r›  r'   r@  r$   Úencode_c_string_literalrj   rÇ   )r¸   rÇ   Úvalr‹   r¬   s        rk   rÇ   zFunctionEmitterVisitor.regý  s  € Ü�cœ7Ô#Ø—)‘)ˆCØ�aŠxÔ1°#·(±(Ô;ØÜ�C“ˆAØ�wÒà˜7Ò#Ø˜‘J�Að ˆHð ˜‘I�Að ˆHð ˜
Ò"à2�ð ˆHð ˜
Ò"Ø�T‘	�ØˆHÜ˜œUÔ#Ü�S—Y‘Y“ˆAØ�EŠzØ!Ø�f’Ø"Ø�e’ØØˆHÜ˜œWÔ%ØÔ0°·±Ó;Ñ;¸cÑAÐAà—<‘<×#Ñ# CÓ(Ð(rm   c                ó8   — | j                   j                  |«      S rf   )rj   rq   ©r¸   rC  s     rk   rq   zFunctionEmitterVisitor.ctype  rê  rm   c                ó8   — | j                   j                  |«      S rf   )rj   rÈ   rö  s     rk   rÈ   z$FunctionEmitterVisitor.c_error_value   s   € Ø�|‰|×)Ñ)¨%Ó0Ð0rm   c                ó8   — | j                   j                  |«      S rf   )rj   r  rö  s     rk   r  z(FunctionEmitterVisitor.c_undefined_value#  s   € Ø�|‰|×-Ñ-¨eÓ4Ð4rm   r  c               ó>   — | j                   j                  ||¬«       y )Nr  r–  )r¸   Úliner  s      rk   r‘   z FunctionEmitterVisitor.emit_line&  s   € Ø�‰×Ñ˜t¨ÐÕ-rm   c                ó6   —  | j                   j                  |Ž  y rf   )rj   rÛ   )r¸   Úliness     rk   rÛ   z!FunctionEmitterVisitor.emit_lines)  s   € Øˆ�‰×Ñ Ò'rm   c                óT   — | j                   j                  ||| j                  ¬«       y )N)rž   )rj   rB  rž   )r¸   r÷   rC  s      rk   rB  z#FunctionEmitterVisitor.emit_inc_ref,  s   € Ø�‰×!Ñ! $¨°D·I±IÐ!Õ>rm   c                óV   — | j                   j                  |||| j                  ¬«       y )N)r†  rž   )rj   rV  rž   )r¸   r÷   rC  r†  s       rk   rV  z#FunctionEmitterVisitor.emit_dec_ref/  s!   € Ø�‰×!Ñ! $¨°wÀTÇYÁYÐ!ÕOrm   c                ó:   — | j                   j                  |«       y rf   )r¨   r‘   )r¸   rú  s     rk   Úemit_declarationz'FunctionEmitterVisitor.emit_declaration2  s   € Ø×Ñ×#Ñ# DÕ)rm   c                ó”   — |j                   �<| j                  j                  | j                  | j                  |j                   «       y y rf   )r×   rj   rÚ   r¥   r¦   r¿   s     rk   rÚ   z%FunctionEmitterVisitor.emit_traceback5  s;   € Ø×ÑÐ)Ø�L‰L×'Ñ'¨×(8Ñ(8¸$×:JÑ:JÈB×L^ÑL^Õ_ð *rm   c           	     óª  — |j                   €J ‚| j                  j                  j                  r|j                   d   dk\  sJ d«       ‚| j                  j	                  d| j
                  «      }| j                  d| j                  j                  dd«      |j                   d   |||j                   d   |fz  «       t        r| j                  d«       y y )	Nrˆ   r   z;AttributeError traceback cannot have a negative line numberÚglobalsz3CPy_AttributeError("%s", "%s", "%s", "%s", %d, %s);ú\ú\\z7assert(PyErr_Occurred() != NULL && "failure w/o err!");)
r×   rj   r�   Ústrict_traceback_checksr\  r¦   r‘   r¥   rœ  r   )r¸   rÀ   r�  rD  Úglobals_statics        rk   r?  z+FunctionEmitterVisitor.emit_attribute_error9  sÓ   € Ø×!Ñ!Ð-Ð-Ð-Ø�<‰<×Ñ×7Ò7à×"Ñ" 1Ñ%¨Ò*ðMàLóMØ*àŸ™×1Ñ1°)¸T×=MÑ=MÓNˆØ�‰ØAà× Ñ ×(Ñ(¨¨vÓ6Ø×"Ñ" 1Ñ%ØØ Ø×"Ñ" 1Ñ%Øðñô
	
õ Ø�N‰NÐTÕUð rm   c                ó   — t        |«      ryy)Nz(Py_ssize_t)r…   )rZ   ©r¸   rr   s     rk   r®  z+FunctionEmitterVisitor.emit_signed_int_castN  s   € Ü�TŒ?Ø!àrm   c                ó4   — t        |«      ryt        |«      ryy)Nz
(uint32_t)z
(uint64_t)r…   )rT   rU   r	  s     rk   r¯  z-FunctionEmitterVisitor.emit_unsigned_int_castT  s   € Ü˜tÔ$ØÜ  Ô&Øàrm   rf   )rj   r   r¨   r   r¥   r›  r¦   r›  r§   úClassIR | NoneÚreturnÚNone)r  r›  )rÀ   r.   r  r  )rÉ   rK   rÊ   r›  r  r›  )rÀ   r   r  r  )ri   r   r  r  )r  r  )rÀ   r@   r  r  )rÀ   rF   r  r  )rÀ   r   r  r  )rÀ   r   r  r  )rÀ   r5   r  r  )rÀ   r7   r  r  )r  r›  rÀ   zGetAttr | SetAttrr  r   r  r›  )r÷   r›  r  r›  rÀ   r+   rè   r   r)  rQ   r*  r›  r  Úbool)rÀ   r+   r  r  )r  zBranch | None)rÀ   rA   r  r  )rÀ   r9   r  r  )rÀ   r0   r  r  )rÀ   rE   r  r  )r÷   rK   r  r›  )rÀ   r   r  r  )rÀ   r:   r  r  )
r÷   r›  rz  rK   r~   r›  r{  zlist[Value]r  r  )rÀ   r/   r  r  )rÀ   r%   r  r  )rÀ   r   r  r  )rÀ   r!   r  r  )rÀ   rH   r  r  )rÀ   rJ   r  r  )rÀ   r>   r  r  )rÀ   r    r  r  )rÀ   r=   r  r  )rÀ   rD   r  r  )rÀ   r&   r  r  )rÀ   r6   r  r  )rÀ   r2   r  r  )rÀ   r"   r  r  )rÀ   r*   r  r  )rÀ   r)   r  r  )rÀ   r(   r  r  )rÀ   r8   r  r  )rÀ   rC   r  r  )rÀ   r,   r  r  )rÀ   r-   r  r  )rÀ   rB   r  r  )rþ   rQ   r×  r›  rø   r›  r  r›  )rÀ   r4   r  r  )rÀ   r3   r  r  )rÀ   rG   r  r  )r•   r   r  r›  )rÇ   rK   r  r›  )rC  rQ   r  r›  )rú  r›  r  Úobjectr  r  )rü  r›  r  r  )r÷   r›  rC  rQ   r  r  )r÷   r›  rC  rQ   r†  r  r  r  )rú  r›  r  r  )rÀ   r   r�  r›  rD  r›  r  r  )rr   rQ   r  r›  )EÚ__name__Ú
__module__Ú__qualname__r¹   r»   rÁ   rÍ   rà   r›   rî   rñ   rù   r   r  r  r  r#  r,  rJ  r3  r>  rY  r^  r`  rc  rf  rp  rt  r:  r„  r‡  r‹  r‘  r”  r—  rŸ  r£  r§  r«  r±  r³  r»  rÇ  rÊ  rÌ  rÎ  rÐ  rÓ  rØ  rÛ  rà  rÝ  rã  ræ  rè  r•   rÇ   rq   rÈ   r  r‘   rÛ   rB  rV  r   rÚ   r?  r®  r¯  rå  rm   rk   r�   r�   Þ   sæ  „ ð .2ðàðð ðð ð	ð
 ðð +ðð 
óó2(ó>óLó+JóZóAó
1óCó/ó$
ó 
Oóó'BðR& Øð& Ø!ð& Ø'.ð& Ø4;ð& ØINð& Ø[^ð& à	ó& óPJ,óX,ó4óL7ó\8ó/ó-óóFó@ó
,ó\,ó&@ó\ó
ó8Ió5ó7ó$Eó
ó
-ó7óAóDóXó,<ó,ó
Dó-ó?óCó
ó`ó2ó

:óó+ó)ó)ó@)ó1ó5ð 59õ .ó(ó?óPó*ó`óVó*ôrm   r�   zFinal[dict[int, str]]Ú_translation_tablec                ó„  — t         s—t        d«      dt        d«      dt        d«      dt        d«      dt        d	«      d
i}t        d«      D ](  }||vsŒ|dk  s|dk\  r	d|z  ||<   Œt        |«      ||<   Œ* t         j	                  t
        j                  |«      «       | j                  d«      j                  t         «      S )z®Convert bytestring to the C string literal syntax (with necessary escaping).

    For example, b'foo
' gets converted to 'foo\n' (note that double quotes are not added).
    ú
z\núz\rú	z\tr™  rš  r  r  r‚  é    é   z\x%.2xÚlatin1)	r  Úordrœ   ÚchrÚupdater›  Ú	maketransÚdecodeÚ	translate)ÚbÚdr­   s      rk   ró  ró  `  s´   € õ
 ô �‹I�uÜ�‹I�uÜ�‹I�uÜ�‹H�eÜ�‹I�vð
ˆô �s“ò 	"ˆAØ˜ŠzØ�r’6˜Q #šXØ$ q™=�A�a’Dä˜q›6�A�a’Dð	"ô 	×!Ñ!¤#§-¡-°Ó"2Ô3Ø�8‰8�HÓ×'Ñ'Ô(:Ó;Ð;rm   )ri   r   rj   r   r  r›  )rh   r   rj   r   r  r›  )ri   r   rj   r   r  r›  rf   )ri   r   rj   r   r¥   r›  r¦   r›  r§   r  r  r  )r!  Úbytesr  r›  )lÚ__doc__Ú
__future__r   Útypingr   Úmypyc.analysis.blockfreqr   Úmypyc.codegen.emitr   r   r   r	   r
   Úmypyc.commonr   r   r   r   r   r   Úmypyc.ir.class_irr   Úmypyc.ir.func_irr   r   r   r   r   Úmypyc.ir.opsr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   Úmypyc.ir.pprintrL   Úmypyc.ir.rtypesrM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   rd   Ú__annotations__rl   rg   rƒ   r³   r�   r  ró  rå  rm   rk   ú<module>r0     s;  ðÚ 1å "å å ?÷õ ÷÷ õ &ß ^Õ ^÷6÷ 6÷ 6÷ 6÷ 6÷ 6÷ 6÷ 6÷ 6÷ 6÷ 6÷ 6÷ 6õ 6õn 2÷÷ ÷ ÷ ð$ ØØØØØØØ%Ø ñ
Ð �%ó 
ó<ó ó	ð" *.ðV$ØðV$àðV$ð ðV$ð ð	V$ð
 'ðV$ð 
óV$ôr|˜Y t™_ô |ð~ -/Ð Ð)Ó .ô<rm   