Ë
    pPêj­I  ã                  ó¬  — d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
mZ ddlmZmZ ddl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&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@mAZAmBZBmCZCmDZD dd
lEmFZFmGZGmHZH ee4z  ZI G d„ de5eJ   «      ZKdd„ZL	 	 	 	 	 	 	 	 dd„ZMddd„ZNdd„ZOdd„ZPy)z:Utilities for pretty-printing IR in a human-readable form.é    )Úannotations)Údefaultdict)ÚSequence)ÚAnyÚFinal)Ú
short_name)ÚFuncIRÚall_values_full)Ú	ModuleIRs)3Ú	ERR_NEVERÚ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)ÚRTypeÚis_bool_rprimitiveÚis_int_rprimitivec                  ó¨  — e Zd ZU dZd2d„Zd3d„Zej                  dej                  diZ	de
d<   d4d„Zd5d	„Zd6d
„Zd7d„Zd8d„Zd9d„Zd:d„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&„Z)dSd'„Z*dTd(„Z+dUd)„Z,dVd*„Z-dWd+„Z.dXd,„Z/dYd-„Z0dZd.„Z1d[d/„Z2d\d0„Z3y1)]ÚIRPrettyPrintVisitorz(Internal visitor that pretty-prints ops.c                ó   — || _         y ©N)Únames)ÚselfrF   s     úT/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypyc/ir/pprint.pyÚ__init__zIRPrettyPrintVisitor.__init__I   s   € ð ˆ�
ó    c                ó:   — | j                  d|j                  «      S )Nzgoto %l)ÚformatÚlabel©rG   Úops     rH   Ú
visit_gotozIRPrettyPrintVisitor.visit_gotoO   s   € Ø�{‰{˜9 b§h¡hÓ/Ð/rJ   )ú%rÚbool)zis_error(%r)Ú r   Úbranch_op_namesc                óB  — | j                   |j                     \  }}|j                  rd|› �}| j                  ||j                  «      }d}|j
                  rd|j
                  z  }d|› d|› d�}|r|d|› �z  }| j                  ||j                  |j                  «      S )Nznot rS   z (error at %s:%d)zif z goto %lz else goto %lú :: )rT   rO   ÚnegatedrL   ÚvalueÚtraceback_entryÚtrueÚfalse)rG   rO   ÚfmtÚtypÚcondÚtbs         rH   Úvisit_branchz!IRPrettyPrintVisitor.visit_branchT   s    € Ø×'Ñ'¨¯©Ñ.‰ˆˆSØ�:Š:Ø˜˜�,ˆCà�{‰{˜3 §¡Ó)ˆØˆØ×ÒØ$ r×'9Ñ'9Ñ9ˆBØ�D�6˜ "  ]Ð3ˆÙØ�T˜#˜�<ÑˆCØ�{‰{˜3 §¡¨¯©Ó2Ð2rJ   c                ó:   — | j                  d|j                  «      S )Nz	return %r)rL   rX   rN   s     rH   Úvisit_returnz!IRPrettyPrintVisitor.visit_returnb   s   € Ø�{‰{˜;¨¯©Ó1Ð1rJ   c                 ó   — y)NÚunreachable© rN   s     rH   Úvisit_unreachablez&IRPrettyPrintVisitor.visit_unreachablee   s   € ØrJ   c                óP   — | j                  d|j                  |j                  «      S )Nz%r = %r)rL   ÚdestÚsrcrN   s     rH   Úvisit_assignz!IRPrettyPrintVisitor.visit_assignh   s   € Ø�{‰{˜9 b§g¡g¨r¯v©vÓ6Ð6rJ   c                ó‚   ‡ — ‰ j                  d|j                  dj                  ˆ fd„|j                  D «       «      «      S )Nz	%r = [%s]ú, c              3  óB   •K  — | ]  }‰j                  d |«      –— Œ y­w©rQ   N©rL   ©Ú.0ÚvrG   s     €rH   ú	<genexpr>z:IRPrettyPrintVisitor.visit_assign_multi.<locals>.<genexpr>l   s   øè ø€ Ò:`ÐTU¸4¿;¹;ÀtÈQ×;OÑ:`ùó   ƒ)rL   rh   Újoinri   rN   s   ` rH   Úvisit_assign_multiz'IRPrettyPrintVisitor.visit_assign_multik   s0   ø€ Ø�{‰{˜;¨¯©°·±Ó:`ÐY[×Y_ÑY_Ô:`Ó1`ÓaÐarJ   c                ó<   — | j                  d||j                  «      S )Nz%r = <error> :: %s)rL   ÚtyperN   s     rH   Úvisit_load_error_valuez+IRPrettyPrintVisitor.visit_load_error_valuen   s   € Ø�{‰{Ð/°°R·W±WÓ=Ð=rJ   c                ó^  — d}t        |j                  t        «      rd}t        |j                  «      }t        |j                  t        «      rHt        |j                  t        ¬«      D �cg c]  }t        |«      ‘Œ }}ddj                  |«      z   dz   }| j                  d|||«      S c c}w )NrS   zobject )Úkeyzfrozenset({rl   z})z	%r = %s%s)	Ú
isinstancerX   ÚintÚreprÚ	frozensetÚsortedÚstrru   rL   )rG   rO   ÚprefixÚrvalueÚiÚformatted_itemss         rH   Úvisit_load_literalz'IRPrettyPrintVisitor.visit_load_literalq   sŽ   € Øˆô �b—h‘h¤Ô$ØˆFä�b—h‘h“ˆÜ�b—h‘h¤	Ô*ô 17°r·x±xÄSÔ0IÖJ¨1œt A�wÐJˆOÐJØ" T§Y¡Y¨Ó%?Ñ?À$ÑFˆFØ�{‰{˜;¨¨F°FÓ;Ð;ùò Ks   Á+B*c                ór   — | j                  d|| j                  |«      |j                  |j                  «      S )Nz%r = %s%r.%s)rL   Úborrow_prefixÚobjÚattrrN   s     rH   Úvisit_get_attrz#IRPrettyPrintVisitor.visit_get_attr„   s,   € Ø�{‰{˜>¨2¨t×/AÑ/AÀ"Ó/EÀrÇvÁvÈrÏwÉwÓWÐWrJ   c                ó   — |j                   ryy)Nzborrow rS   )Úis_borrowedrN   s     rH   rˆ   z"IRPrettyPrintVisitor.borrow_prefix‡   s   € Ø�>Š>ØØrJ   c                ó4  — |j                   r|j                  t        k(  sJ ‚|j                  t        k(  r2| j                  d|j                  |j
                  |j                  «      S | j                  d|j                  |j
                  |j                  |«      S )Nz
%r.%s = %rz%r.%s = %r; %r = is_error)Úis_initÚ
error_kindr   rL   r‰   rŠ   ri   rN   s     rH   Úvisit_set_attrz#IRPrettyPrintVisitor.visit_set_attrŒ   sm   € Ø�:Š:Ø—=‘=¤IÒ-Ð-Ð-Ø�=‰=œIÒ%à—;‘;˜|¨R¯V©V°R·W±W¸b¿f¹fÓEÐEà—;‘;Ð:¸B¿F¹FÀBÇGÁGÈRÏVÉVÐUWÓXÐXrJ   c                óà   — |j                   rdt        |j                   «      › d�nd}|j                  }|j                  �|j                  › d|› �}| j	                  d|||j
                  |«      S )Nú  (ú)rS   ú.z%r = %s :: %s%s)Úannr~   Ú
identifierÚmodule_namerL   Ú	namespace)rG   rO   r–   Únames       rH   Úvisit_load_staticz&IRPrettyPrintVisitor.visit_load_static•   sd   € Ø')§v¢v�”D˜Ÿ™“L�> Ñ#°2ˆØ�}‰}ˆØ�>‰>Ð%Ø—n‘nÐ% Q t fÐ-ˆDØ�{‰{Ð,¨b°$¸¿¹ÀcÓJÐJrJ   c                ó¤   — |j                   }|j                  �|j                  › d|› �}| j                  d||j                  |j                  «      S )Nr•   z%s = %r :: %s)r—   r˜   rL   rX   r™   ©rG   rO   rš   s      rH   Úvisit_init_staticz&IRPrettyPrintVisitor.visit_init_staticœ   sG   € Ø�}‰}ˆØ�>‰>Ð%Ø—n‘nÐ% Q t fÐ-ˆDØ�{‰{˜?¨D°"·(±(¸B¿L¹LÓIÐIrJ   c                ór   — | j                  d|| j                  |«      |j                  |j                  «      S )Nz%r = %s%r[%d])rL   rˆ   ri   ÚindexrN   s     rH   Úvisit_tuple_getz$IRPrettyPrintVisitor.visit_tuple_get¢   s/   € Ø�{‰{˜?¨B°×0BÑ0BÀ2Ó0FÈÏÉÐPR×PXÑPXÓYÐYrJ   c                ór   ‡ — dj                  ˆ fd„|j                  D «       «      }‰ j                  d||«      S )Nrl   c              3  óB   •K  — | ]  }‰j                  d |«      –— Œ y­wrn   ro   )rq   ÚitemrG   s     €rH   rs   z7IRPrettyPrintVisitor.visit_tuple_set.<locals>.<genexpr>¦   s   øè ø€ ÒJ¸˜TŸ[™[¨¨t×4ÑJùrt   z	%r = (%s))ru   ÚitemsrL   )rG   rO   Úitem_strs   `  rH   Úvisit_tuple_setz$IRPrettyPrintVisitor.visit_tuple_set¥   s.   ø€ Ø—9‘9ÓJÀÇÁÔJÓJˆØ�{‰{˜;¨¨HÓ5Ð5rJ   c                ó  — | j                  d|j                  «      }t        |j                  j                  «      st	        |j                  j                  «      r/|dt        |j                  j                  j                  «      › �z  }|S )Nz
inc_ref %rrV   )rL   ri   r@   rx   rA   r   rš   ©rG   rO   Úss      rH   Úvisit_inc_refz"IRPrettyPrintVisitor.visit_inc_ref©   s`   € Ø�K‰K˜ b§f¡fÓ-ˆä˜bŸf™fŸk™kÔ*Ô.?ÀÇÁÇÁÔ.LØ�4œ
 2§6¡6§;¡;×#3Ñ#3Ó4Ð5Ð6Ñ6ˆAØˆrJ   c                ó6  — | j                  d|j                  rdnd|j                  «      }t        |j                  j                  «      st        |j                  j                  «      r/|dt        |j                  j                  j                  «      › �z  }|S )Nz%sdec_ref %rÚxrS   rV   )rL   Úis_xdecri   r@   rx   rA   r   rš   r©   s      rH   Úvisit_dec_refz"IRPrettyPrintVisitor.visit_dec_ref°   sj   € Ø�K‰K˜¨r¯zªz©¸rÀ2Ç6Á6ÓJˆä˜bŸf™fŸk™kÔ*Ô.?ÀÇÁÇÁÔ.LØ�4œ
 2§6¡6§;¡;×#3Ñ#3Ó4Ð5Ð6Ñ6ˆAØˆrJ   c                óÎ   ‡ — dj                  ˆ fd„|j                  D «       «      }|j                  j                  }|› d|› d�}|j                  s‰ j                  d|«      |z   }|S )Nrl   c              3  óB   •K  — | ]  }‰j                  d |«      –— Œ y­wrn   ro   ©rq   ÚargrG   s     €rH   rs   z2IRPrettyPrintVisitor.visit_call.<locals>.<genexpr>¸   ó   øè ø€ ÒC°C˜Ÿ™ T¨3×/ÑCùrt   ú(r”   ú%r = )ru   ÚargsÚfnÚ	shortnameÚis_voidrL   )rG   rO   r·   r   rª   s   `    rH   Ú
visit_callzIRPrettyPrintVisitor.visit_call·   s[   ø€ Ø�y‰yÓC¸2¿7¹7ÔCÓCˆà—U‘U—_‘_ˆ
Øˆl˜!˜D˜6 Ð#ˆØ�zŠzØ—‘˜G RÓ(¨1Ñ,ˆAØˆrJ   c                óâ   ‡ — dj                  ˆ fd„|j                  D «       «      }‰ j                  d|j                  |j                  |«      }|j
                  s‰ j                  d|«      |z   }|S )Nrl   c              3  óB   •K  — | ]  }‰j                  d |«      –— Œ y­wrn   ro   r²   s     €rH   rs   z9IRPrettyPrintVisitor.visit_method_call.<locals>.<genexpr>Á   r´   rt   z	%r.%s(%s)r¶   )ru   r·   rL   r‰   Úmethodrº   )rG   rO   r·   rª   s   `   rH   Úvisit_method_callz&IRPrettyPrintVisitor.visit_method_callÀ   sX   ø€ Ø�y‰yÓC¸2¿7¹7ÔCÓCˆØ�K‰K˜ R§V¡V¨R¯Y©Y¸Ó=ˆØ�zŠzØ—‘˜G RÓ(¨1Ñ,ˆAØˆrJ   c                ó–   — |j                   rd}nd}| j                  d||| j                  |«      |j                  |j                  «      S )Nz
unchecked rS   z%r = %s%scast(%s, %r))Úis_uncheckedrL   rˆ   rx   ri   )rG   rO   r‚   s      rH   Ú
visit_castzIRPrettyPrintVisitor.visit_castÇ   sG   € Ø�?Š?Ø!‰FàˆFØ�{‰{Ø# R¨°×1CÑ1CÀBÓ1GÈÏÉÐRT×RXÑRXó
ð 	
rJ   c                óf   — | j                  d||j                  j                  |j                  «      S )Nz%r = box(%s, %r))rL   ri   rx   rN   s     rH   Ú	visit_boxzIRPrettyPrintVisitor.visit_boxÐ   s$   € Ø�{‰{Ð-¨r°2·6±6·;±;ÀÇÁÓGÐGrJ   c                óR   — | j                  d||j                  |j                  «      S )Nz%r = unbox(%s, %r))rL   rx   ri   rN   s     rH   Úvisit_unboxz IRPrettyPrintVisitor.visit_unboxÓ   s    € Ø�{‰{Ð/°°R·W±W¸b¿f¹fÓEÐErJ   c                ó|  — |j                   �”t        |j                   t        «      r1| j                  d||j                  t        |j                   «      «      S t        |j                   t        «      r(| j                  d||j                  |j                   «      S J d«       ‚| j                  d||j                  «      S )Nz%r = raise %s(%s)z%r = raise %s(%r)z&value type must be either str or Valuez%r = raise %s)rX   r|   r�   rL   Ú
class_namer~   r>   rN   s     rH   Úvisit_raise_standard_errorz/IRPrettyPrintVisitor.visit_raise_standard_errorÖ   s�   € Ø�8‰8ÐÜ˜"Ÿ(™(¤CÔ(Ø—{‘{Ð#6¸¸B¿M¹MÌ4ÐPR×PXÑPXË>ÓZÐZÜ˜BŸH™H¤eÔ,Ø—{‘{Ð#6¸¸B¿M¹MÈ2Ï8É8ÓTÐTàFÐFÓF�uà—;‘;˜°°B·M±MÓBÐBrJ   c                óÚ   ‡ — dj                  ˆ fd„|j                  D «       «      }|j                  r‰ j                  d|j                  |«      S ‰ j                  d||j                  |«      S )Nrl   c              3  óB   •K  — | ]  }‰j                  d |«      –— Œ y­wrn   ro   r²   s     €rH   rs   z4IRPrettyPrintVisitor.visit_call_c.<locals>.<genexpr>â   ó   øè ø€ ÒG¸˜TŸ[™[¨¨s×3ÑGùrt   z%s(%s)z%r = %s(%s))ru   r·   rº   rL   Úfunction_name)rG   rO   Úargs_strs   `  rH   Úvisit_call_cz!IRPrettyPrintVisitor.visit_call_cá   sV   ø€ Ø—9‘9ÓG¸r¿w¹wÔGÓGˆØ�:Š:Ø—;‘;˜x¨×)9Ñ)9¸8ÓDÐDà—;‘;˜}¨b°"×2BÑ2BÀHÓMÐMrJ   c                ót  ‡ — dj                  ˆ fd„|j                  D «       «      }|j                  r)dj                  d„ |j                  D «       «      }d|› d�}nd}|j                  r(‰ j	                  d|j
                  j                  ||«      S ‰ j	                  d||j
                  j                  ||«      S )	Nrl   c              3  óB   •K  — | ]  }‰j                  d |«      –— Œ y­wrn   ro   r²   s     €rH   rs   z:IRPrettyPrintVisitor.visit_primitive_op.<locals>.<genexpr>é   rÌ   rt   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrE   )r�   ©rq   r³   s     rH   rs   z:IRPrettyPrintVisitor.visit_primitive_op.<locals>.<genexpr>ë   s   è ø€ Ò@¨Cœs 3ŸxÑ@ùs   ‚ú[ú]rS   z%s%s %sz%r = %s%s %s)ru   r·   Ú	type_argsrº   rL   Údescrš   )rG   rO   rÎ   ÚjoinedrÖ   s   `    rH   Úvisit_primitive_opz'IRPrettyPrintVisitor.visit_primitive_opè   s�   ø€ Ø—9‘9ÓG¸r¿w¹wÔGÓGˆØ�<Š<Ø—Y‘YÑ@°2·<±<Ô@Ó@ˆFØ˜F˜8 1˜‰IàˆIØ�:Š:Ø—;‘;˜y¨"¯'©'¯,©,¸	À8ÓLÐLà—;‘;˜~¨r°2·7±7·<±<ÀÈHÓUÐUrJ   c                óh   — | j                  d||j                  |j                  |j                  «      S )Nz%r = truncate %r: %t to %t)rL   ri   Úsrc_typerx   rN   s     rH   Úvisit_truncatez#IRPrettyPrintVisitor.visit_truncateô   s)   € Ø�{‰{Ð7¸¸R¿V¹VÀRÇ[Á[ÐRT×RYÑRYÓZÐZrJ   c                óŒ   — |j                   rd}nd}| j                  d|||j                  |j                  |j                  «      S )Nz signedrS   z%r = extend%s %r: %t to %t)ÚsignedrL   ri   rÛ   rx   )rG   rO   Úextras      rH   Úvisit_extendz!IRPrettyPrintVisitor.visit_extend÷   s<   € Ø�9Š9Ø‰EàˆEØ�{‰{Ð7¸¸UÀBÇFÁFÈBÏKÉKÐY[×Y`ÑY`ÓaÐarJ   c                óŒ   — |j                   rdt        |j                   «      › d�nd}| j                  d||j                  |«      S )Nr“   r”   rS   z%r = load_global %s :: static%s)r–   r~   rL   r—   )rG   rO   r–   s      rH   Úvisit_load_globalz&IRPrettyPrintVisitor.visit_load_globalþ   s;   € Ø')§v¢v�”D˜Ÿ™“L�> Ñ#°2ˆØ�{‰{Ð<¸bÀ"Ç-Á-ÐQTÓUÐUrJ   c                óŠ   — | j                  d||j                  t        j                  |j                     |j
                  «      S ©Nz%r = %r %s %r)rL   Úlhsr%   Úop_strrO   ÚrhsrN   s     rH   Úvisit_int_opz!IRPrettyPrintVisitor.visit_int_op  s.   € Ø�{‰{˜?¨B°·±¼¿¹ÀRÇUÁUÑ8KÈRÏVÉVÓTÐTrJ   c                óÄ  — |j                   t        j                  t        j                  t        j                  t        j
                  fv rd}nO|j                   t        j                  t        j                  t        j                  t        j                  fv rd}nd}| j                  d||j                  t        j                  |j                      |j                  |«      S )Nz
 :: signedz :: unsignedrS   z%r = %r %s %r%s)rO   r   ÚSLTÚSGTÚSLEÚSGEÚULTÚUGTÚULEÚUGErL   rå   ræ   rç   )rG   rO   Úsign_formats      rH   Úvisit_comparison_opz(IRPrettyPrintVisitor.visit_comparison_op  s    € Ø�5‰5”\×%Ñ%¤|×'7Ñ'7¼×9IÑ9IÌ<×K[ÑK[Ð\Ñ\Ø&‰KØ�U‰U”|×'Ñ'¬×)9Ñ)9¼<×;KÑ;KÌ\×M]ÑM]Ð^Ñ^Ø(‰KàˆKØ�{‰{Ø˜r 2§6¡6¬<×+>Ñ+>¸r¿u¹uÑ+EÀrÇvÁvÈ{ó
ð 	
rJ   c                óŠ   — | j                  d||j                  t        j                  |j                     |j
                  «      S rä   )rL   rå   r   ræ   rO   rç   rN   s     rH   Úvisit_float_opz#IRPrettyPrintVisitor.visit_float_op  s.   € Ø�{‰{˜?¨B°·±¼¿¹ÀrÇuÁuÑ8MÈrÏvÉvÓVÐVrJ   c                ó<   — | j                  d||j                  «      S )Nz%r = -%r©rL   ri   rN   s     rH   Úvisit_float_negz$IRPrettyPrintVisitor.visit_float_neg  s   € Ø�{‰{˜: r¨2¯6©6Ó2Ð2rJ   c                ó‚   — | j                  d||j                  |j                  |j                     |j                  «      S rä   )rL   rå   ræ   rO   rç   rN   s     rH   Úvisit_float_comparison_opz.IRPrettyPrintVisitor.visit_float_comparison_op  s.   € Ø�{‰{˜?¨B°·±¸¿	¹	À"Ç%Á%Ñ8HÈ"Ï&É&ÓQÐQrJ   c                ór   — | j                  d|| j                  |«      |j                  |j                  «      S )Nz%r = %sload_mem %r :: %t*)rL   rˆ   ri   rx   rN   s     rH   Úvisit_load_memz#IRPrettyPrintVisitor.visit_load_mem  s1   € Ø�{‰{Ø'¨¨T×-?Ñ-?ÀÓ-CÀRÇVÁVÈRÏWÉWó
ð 	
rJ   c                óf   — | j                  d|j                  |j                  |j                  «      S )Nzset_mem %r, %r :: %t*)rL   rh   ri   Ú	dest_typerN   s     rH   Úvisit_set_memz"IRPrettyPrintVisitor.visit_set_mem  s$   € Ø�{‰{Ð2°B·G±G¸R¿V¹VÀRÇ\Á\ÓRÐRrJ   c                óR   — | j                  d||j                  |j                  «      S )Nz
%r = %r.%s)rL   ri   ÚfieldrN   s     rH   Úvisit_get_elementz&IRPrettyPrintVisitor.visit_get_element!  s   € Ø�{‰{˜<¨¨R¯V©V°R·X±XÓ>Ð>rJ   c                óh   — | j                  d||j                  |j                  |j                  «      S )Nz %r = get_element_ptr %r %s :: %t)rL   ri   r  rÛ   rN   s     rH   Úvisit_get_element_ptrz*IRPrettyPrintVisitor.visit_get_element_ptr$  s)   € Ø�{‰{Ð=¸rÀ2Ç6Á6È2Ï8É8ÐUW×U`ÑU`ÓaÐarJ   c                óh   — | j                  d||j                  |j                  |j                  «      S )Nz%r = set_element %r, %s, %r)rL   ri   r  r¤   rN   s     rH   Úvisit_set_elementz&IRPrettyPrintVisitor.visit_set_element'  s)   € Ø�{‰{Ð8¸"¸b¿f¹fÀbÇhÁhÐPR×PWÑPWÓXÐXrJ   c                ó¼  — t        |j                  t        «      r| j                  d||j                  «      S t        |j                  t        «      ro|j                  j
                  }|j                  j                  �|j                  j                  › d|› �}| j                  d|||j                  j                  «      S | j                  d||j                  «      S )Nz%r = load_address %rr•   z%r = load_address %s :: %sz%r = load_address %s)r|   ri   r2   rL   r,   r—   r˜   r™   r�   s      rH   Úvisit_load_addressz'IRPrettyPrintVisitor.visit_load_address*  s¨   € Ü�b—f‘fœhÔ'Ø—;‘;Ð5°r¸2¿6¹6ÓBÐBÜ˜Ÿ™¤
Ô+Ø—6‘6×$Ñ$ˆDØ�v‰v×!Ñ!Ð-ØŸ&™&×,Ñ,Ð-¨Q¨t¨fÐ5�Ø—;‘;Ð;¸RÀÀrÇvÁv×GWÑGWÓXÐXà—;‘;Ð5°r¸2¿6¹6ÓBÐBrJ   c           	     ó¬   ‡ — |j                   rd}nd}‰ j                  dj                  |dj                  ˆ fd„|j                  D «       «      «      «      S )Nzsteal rS   zkeep_alive {}{}rl   c              3  óB   •K  — | ]  }‰j                  d |«      –— Œ y­wrn   ro   rp   s     €rH   rs   z8IRPrettyPrintVisitor.visit_keep_alive.<locals>.<genexpr>;  s   øè ø€ Ò5[Èq°d·k±kÀ$È×6JÑ5[ùrt   )ÚstealrL   ru   ri   )rG   rO   r  s   `  rH   Úvisit_keep_alivez%IRPrettyPrintVisitor.visit_keep_alive5  sK   ø€ Ø�8Š8Ø‰EàˆEØ�{‰{Ø×$Ñ$ U¨D¯I©IÓ5[ÐTV×TZÑTZÔ5[Ó,[Ó\ó
ð 	
rJ   c                ó<   — | j                  d||j                  «      S )Nz%r = unborrow %rr÷   rN   s     rH   Úvisit_unborrowz#IRPrettyPrintVisitor.visit_unborrow>  s   € Ø�{‰{Ð-¨r°2·6±6Ó:Ð:rJ   c                óü  — g }d}t        |«      }|t        |«      k  �rN|j                  d|«      }|dk  rt        |«      }|j                  ||| «       |t        |«      k  �r÷||dz      }|j	                  d«      }|dk(  �rt        |t        «      sJ ‚t        |t        «      r&|j                  t        |j                  «      «       �nŠt        |t        «      r&|j                  t        |j                  «      «       �nTt        |t        «      r!|j                  d|j                  ›d�«       �n#t        |t        «      r)|j                  d|j                  j                  › �«       nê|j                  | j                   |   «       nË|dk(  r|j                  d	|z  «       n±|d
k(  r|j                  d|z  «       n—|dk(  r1t        |t"        «      sJ ‚|j                  d|j$                  z  «       na|dk(  r.t        |t&        «      sJ ‚|j                  |j                  «       n.|dk(  r|j                  t        |«      «       nt)        d|› �«      ‚|dz   }n|}|t        |«      k  r�ŒNdj+                  |«      S )a2  Helper for formatting strings.

        These format sequences are supported in fmt:

          %s: arbitrary object converted to string using str()
          %r: name of IR value/register
          %d: int
          %f: float
          %l: BasicBlock (formatted as label 'Ln')
          %t: RType
        r   ú%é   ÚrzCString(r”   zundef Údz%dÚfz%fÚlzL%sÚtrª   zInvalid format sequence %é   rS   )ÚlistÚlenÚfindÚappendÚpopr|   r>   r$   r�   rX   r   r~   r   r<   rx   rš   rF   r   rM   r?   Ú
ValueErrorru   )	rG   r\   r·   Úresultr„   ÚarglistÚnÚtypespecr³   s	            rH   rL   zIRPrettyPrintVisitor.formatC  s   € ð ˆØˆÜ�t“*ˆØ”#�c“(‹lØ—‘˜˜aÓ ˆAØ�1ŠuÜ˜“H�Ø�M‰M˜#˜a ˜(Ô#Ø”3�s“8‹|Ø˜q 1™u™:�Ø—k‘k !“n�Ø˜s“?ä% c¬5Ô1Ð1Ð1Ü! #¤wÔ/ØŸ™¤c¨#¯)©)£nÖ5Ü# C¬Ô/ØŸ™¤d¨3¯9©9£oÖ6Ü# C¬Ô1ØŸ™¨°·±°¸QÐ&?Ö@Ü# C¬Ô/ØŸ™¨¨s¯x©x¯}©}¨oÐ&>Õ?àŸ™ d§j¡j°¡oÕ6Ø ’_à—M‘M $¨¡*Õ-Ø ’_à—M‘M $¨¡*Õ-Ø ’_ä% c¬:Ô6Ð6Ð6Ø—M‘M %¨#¯)©)Ñ"3Õ4Ø ’_ä% c¬5Ô1Ð1Ð1Ø—M‘M #§(¡(Õ+Ø ’_à—M‘M¤# c£(Õ+ä$Ð'@ÀÀ
Ð%KÓLÐLØ˜‘E‘à�ðU ”#�c“(ŒlðV �w‰w�v‹ÐrJ   N)rF   údict[Value, str]ÚreturnÚNone)rO   r!   r#  r�   )rO   r   r#  r�   )rO   r3   r#  r�   )rO   r=   r#  r�   )rO   r   r#  r�   )rO   r   r#  r�   )rO   r(   r#  r�   )rO   r*   r#  r�   )rO   r   r#  r�   )rO   r.   r#  r�   )rO   r4   r#  r�   )rO   r,   r#  r�   )rO   r#   r#  r�   )rO   r8   r#  r�   )rO   r9   r#  r�   )rO   r"   r#  r�   )rO   r   r#  r�   )rO   r   r#  r�   )rO   r-   r#  r�   )rO   r   r#  r�   )rO   r   r#  r�   )rO   r;   r#  r�   )rO   r1   r#  r�   )rO   r   r#  r�   )rO   r0   r#  r�   )rO   r7   r#  r�   )rO   r   r#  r�   )rO   r)   r#  r�   )rO   r%   r#  r�   )rO   r   r#  r�   )rO   r   r#  r�   )rO   r   r#  r�   )rO   r   r#  r�   )rO   r+   r#  r�   )rO   r6   r#  r�   )rO   r   r#  r�   )rO   r    r#  r�   )rO   r5   r#  r�   )rO   r'   r#  r�   )rO   r&   r#  r�   )rO   r:   r#  r�   )r\   r�   r·   r   r#  r�   )4Ú__name__Ú
__module__Ú__qualname__Ú__doc__rI   rP   r   ÚBOOLÚIS_ERRORrT   Ú__annotations__r`   rb   rf   rj   rv   ry   r†   r‹   rˆ   r‘   r›   rž   r¡   r§   r«   r¯   r»   r¿   rÂ   rÄ   rÆ   rÉ   rÏ   rÙ   rÜ   rà   râ   rè   ró   rõ   rø   rú   rü   rÿ   r  r  r  r  r  r  rL   re   rJ   rH   rC   rC   F   s  … Ù2óó0ð %Ÿk™k¨>¸6¿?¹?ÐL`Ða€O�UÓaó3ó2óó7óbó>ó<ó&Xóó
YóKóJóZó6óóóóó
óHóFó	CóNó
Vó[óbóVóUó	
óWó3óRó
ó
Só?óbóYó	Có
ó;ô
:rJ   rC   c                ó(  — g }d}t        | j                  | j                  «      }|t        |«      k  rß|}|||      g}|dz   t        |«      k  rr||dz      j                  ||   j                  k(  rP|dz  }|j                  |||      «       |dz   t        |«      k  r#||dz      j                  ||   j                  k(  rŒP|dz  }|j                  dj                  dj                  |«      ||   j                  «      «       |t        |«      k  rŒß|S )Nr   r  z{} :: {}rl   )r
   Úarg_regsÚblocksr  rx   r  rL   ru   )Úfunc_irrF   r  r„   ÚregsÚi0Úgroups          rH   Úformat_registersr3  €  s  € Ø€FØ	€AÜ˜7×+Ñ+¨W¯^©^Ó<€DØ
Œc�$‹iŠ-ØˆØ�t˜B‘x‘Ð!ˆØ�!‰e”c˜$“iÒ D¨¨Q©¡K×$4Ñ$4¸¸R¹¿¹Ò$EØ�‰FˆAØ�L‰L˜˜t A™w™Ô(ð �!‰e”c˜$“iÒ D¨¨Q©¡K×$4Ñ$4¸¸R¹¿¹Ó$Eð 	
ˆQ‰ˆØ�‰�j×'Ñ'¨¯	©	°%Ó(8¸$¸r¹(¿-¹-ÓHÔIð Œc�$‹i‹-ð €MrJ   c                ó  — t        | «      D ]  \  }}||_        Œ i }| D ]:  }|j                  sŒ|j                  |j                  g «      j	                  |«       Œ< t        |«      }g }t        | «      D �]�  \  }}d}	||v r5t        d„ ||   D «       «      }
dj                  dj                  |
«      «      }	|j	                  d|j                  |	fz  «       ||v r||   D ]  }|j	                  d|› �«       Œ |j                  }t        |d   t        «      rC|dz   t        | «      k  r2|d   j                  | |dz      k(  r|j                  |d   g «      s|d	d }|D ]f  }d
|j                  |«      z   }|j	                  |«       ||v sŒ-t        |«      dz
  }||   D ]  }|j	                  d|› �«       Œ d||   dd	 z   ||<   Œh t        |j                  d   t        t        t         t"        f«      r�Œ€|j	                  d«       �Œ“ |S )z<Format a list of IR basic blocks into a human-readable form.rS   c              3  ó:   K  — | ]  }d |j                   z  –— Œ y­w)zL%dN)rM   )rq   Úbs     rH   rs   z format_blocks.<locals>.<genexpr>¤  s   è ø€ ÒH°˜E A§G¡G�OÑHùs   ‚z (handler for {})rl   zL%d:%sz	  ERROR: éÿÿÿÿr  Nú    u       ðŸ‘† ERROR: u    â�Œ é   z    [MISSING BLOCK EXIT OPCODE])Ú	enumeraterM   Úerror_handlerÚ
setdefaultr  rC   r€   rL   ru   Úopsr|   r!   r  ÚgetÚacceptr   r3   r=   )r.  rF   Úsource_to_errorr„   ÚblockÚhandler_mapr6  ÚvisitorÚlinesÚhandler_msgÚlabelsÚerrorr=  rO   ÚlineÚfirsts                   rH   Úformat_blocksrJ  �  s)  € ô ˜fÓ%ò ‰ˆˆ5Øˆ�ðð 79€KØò BˆØ�?‹?Ø×"Ñ" 1§?¡?°BÓ7×>Ñ>¸qÕAðBô # 5Ó)€Gà€EÜ˜fÓ%ó  <‰ˆˆ5ØˆØ�KÑÜÑH°[ÀÑ5GÔHÓHˆFØ-×4Ñ4°T·Y±Y¸vÓ5FÓGˆKà�‰�X §¡¨kÐ :Ñ:Ô;Ø�OÑ#Ø(¨Ñ/ò 2�Ø—‘˜y¨¨Ð0Õ1ð2à�i‰iˆä�s˜2‘w¤Ô%Ø�A‘œ˜F›Ò#Ø�B‘—‘ ¨¨A©¡Ò.Ø#×'Ñ'¨¨B©°Ô4ð �c�r�(ˆCØò 	AˆBØ˜BŸI™I gÓ.Ñ.ˆDØ�L‰L˜ÔØ�_Ò$Ü˜E›
 Q™�à,¨RÑ0ò C�EØ—L‘LÐ#9¸%¸Ð!AÕBðCà-°°e±¸Q¸RÐ0@Ñ@��e’ð	Aô ˜%Ÿ)™) B™-¬$´¼ÄÐ)LÖMà�L‰LÐ:Ö;ðA <ðB €LrJ   c           
     ó  — g }| j                   r| j                   dz   nd}|j                  dj                  || j                  dj	                  d„ | j
                  D «       «      «      «       t        | j                  | j                  «      }t        | |«      D ]  }|j                  d|z   «       Œ t        t        «      }|D ]  \  }}||   j                  |«       Œ t        | j                  ||«      }	|j                  |	«       |S )Nr•   rS   zdef {}{}({}):rl   c              3  ó4   K  — | ]  }|j                   –— Œ y ­wrE   )rš   rÓ   s     rH   rs   zformat_func.<locals>.<genexpr>É  s   è ø€ Ò=ZÈ3¸c¿h½hÑ=Zùs   ‚r8  )rÈ   r  rL   rš   ru   r·   Úgenerate_names_for_irr-  r.  r3  r   r  rJ  Úextend)
r¸   ÚerrorsrD  Ú
cls_prefixrF   rH  r@  ÚsourcerG  Úcodes
             rH   Úformat_funcrS  Å  sè   € Ø€EØ(*¯ª�—‘ Ò$¸2€JØ	‡L�LØ×Ñ˜z¨2¯7©7°D·I±IÑ=ZÐRT×RYÑRYÔ=ZÓ4ZÓ[ôô " "§+¡+¨r¯y©yÓ9€EÜ   UÓ+ò $ˆØ�‰�V˜d‘]Õ#ð$ô "¤$Ó'€OØò .‰ˆ�Ø˜Ñ×&Ñ& uÕ-ð.ô ˜Ÿ™ E¨?Ó;€DØ	‡L�L�ÔØ€LrJ   c                ó¬   — g }| j                  «       D ]>  }|j                  D ]-  }|j                  t        |«      «       |j	                  d«       Œ/ Œ@ |S )NrS   )ÚvaluesÚ	functionsrN  rS  r  )Úmodulesr=  Úmoduler¸   s       rH   Úformat_modulesrY  Ø  sT   € Ø
€CØ—.‘.Ó"ò ˆØ×"Ñ"ò 	ˆBØ�J‰J”{ 2“Ô'Ø�J‰J�r�Nñ	ðð €JrJ   c           	     óö  — i }t        «       }d}| D ],  }|j                  ||<   |j                  |j                  «       Œ. |D �]3  }|j                  D �]   }g }|j	                  «       D ]  }	|	|vsŒ|j                  |	«       Œ t        |t        t        f«      r|j                  |j                  «       n2t        |t        «      s|j                  rŒ€||vr|j                  |«       |D ]‡  }
|
|v rŒt        |
t        «      r|
j                  r|
j                  }n&t        |
t        t        t        f«      rŒMd|z  }|dz  }||v rd}	 d||fz  }||vr|}n|dz  }Œ|||
<   |j                  |«       Œ‰ �Œ# �Œ6 |S )z¹Generate unique names for IR values.

    Give names such as 'r5' to temp values in IR which are useful when
    pretty-printing or generating C. Ensure generated names are unique.
    r   zr%dr  r  z%s_%d)Úsetrš   Úaddr=  Úsourcesr  r|   r   r   rh   r   rº   r2   r$   r   r<   )r·   r.  rF   Ú
used_namesÚ
temp_indexr³   rA  rO   rU  rQ  rX   rš   r   Ú	candidates                 rH   rM  rM  á  s�  € ð !€EÜ“€Jà€Jàò !ˆØ—X‘Xˆˆc‰
Ø�‰�s—x‘xÕ ð!ð ó %%ˆØ—)‘)ó $	%ˆBØˆFàŸ*™*›,ò *�Ø Ò&Ø—M‘M &Õ)ð*ô ˜"œv¤{Ð3Ô4Ø—‘˜bŸg™gÕ&Ü˜B¤	Ô*¨b¯jªjØØ˜5‘Ø—‘˜bÔ!àò %�Ø˜E‘>ØÜ˜e¤XÔ.°5·:²:Ø Ÿ:™:‘DÜ ¬´¼Ð'>Ô?Øà  :Ñ-�DØ !‘O�Jð ˜:Ñ%Ø�AØØ$+¨t°Q¨iÑ$7˜	Ø$¨JÑ6Ø#,˜DØ!Ø˜Q™˜ð ð  $��e‘Ø—‘˜tÕ$ò-%ò$	%ð%%ðN €LrJ   N)r/  r	   rF   r"  r#  ú	list[str])r.  úlist[BasicBlock]rF   r"  r@  zdict[ErrorSource, list[str]]r#  ra  )re   )r¸   r	   rO  z!Sequence[tuple[ErrorSource, str]]r#  ra  )rW  r   r#  ra  )r·   zlist[Register]r.  rb  r#  r"  )Qr(  Ú
__future__r   Úcollectionsr   Úcollections.abcr   Útypingr   r   Úmypyc.commonr   Úmypyc.ir.func_irr	   r
   Úmypyc.ir.module_irr   Ú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&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   Úmypyc.ir.rtypesr?   r@   rA   ÚErrorSourcer�   rC   r3  rJ  rS  rY  rM  re   rJ   rH   ú<module>rm     sÇ   ðÙ @å "å #Ý $ß å #ß 4Ý (÷4÷ 4÷ 4÷ 4÷ 4÷ 4÷ 4÷ 4÷ 4÷ 4÷ 4÷ 4÷ 4ñ 4÷j IÑ Hà˜2‰o€ôw˜9 S™>ô wót	ð3Øð3àð3ð 2ð3ð ó	3ôló&ô6rJ   