
    X-PhF                       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
 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA dd
lBmCZCmDZDmEZE e
ee3f         ZF G d de4eG                   ZHd%dZId&dZJd'd(dZKd)d ZLd*d#ZMd$S )+z:Utilities for pretty-printing IR in a human-readable form.    )annotations)defaultdict)Sequence)AnyFinalUnion)
short_name)FuncIRall_values_full)	ModuleIRs)/	ERR_NEVERAssignAssignMulti
BasicBlockBoxBranchCallCallCCastComparisonOp	ControlOpDecRefExtendFloatFloatComparisonOpFloatNegFloatOpGetAttrGetElementPtrGotoIncRef
InitStaticIntegerIntOp	KeepAliveLoadAddressLoadErrorValue
LoadGlobalLoadLiteralLoadMem
LoadStatic
MethodCallOp	OpVisitorPrimitiveOpRaiseStandardErrorRegisterReturnSetAttrSetMemTruncateTupleGetTupleSetUnborrowUnboxUnreachableValue)RTypeis_bool_rprimitiveis_int_rprimitivec                     e Zd ZU dZd`dZdad
Zej        dej        diZ	de
d<   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drd0Zdsd2Zdtd4Zdud6Zdvd8Zdwd:Z dxd<Z!dyd>Z"dzd@Z#d{dBZ$d|dDZ%d}dFZ&d~dHZ'ddJZ(ddLZ)ddNZ*ddPZ+ddRZ,ddTZ-ddVZ.ddXZ/ddZZ0dd^Z1d_S )IRPrettyPrintVisitorz(Internal visitor that pretty-prints ops.namesdict[Value, str]returnNonec                    || _         d S N)rA   )selfrA   s     O/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypyc/ir/pprint.py__init__zIRPrettyPrintVisitor.__init__E   s     


    opr    strc                8    |                      d|j                  S )Nzgoto %l)formatlabelrG   rK   s     rH   
visit_gotozIRPrettyPrintVisitor.visit_gotoK   s    {{9bh///rJ   )%rbool)zis_error(%r) r   branch_op_namesr   c                   | j         |j                 \  }}|j        rd| }|                     ||j                  }d}|j        r
d|j        z  }d| d| d}|r|d| z  }|                     ||j        |j                  S )Nznot rT   z (error at %s:%d)zif z goto %lz else goto %l :: )rU   rK   negatedrN   valuetraceback_entrytruefalse)rG   rK   fmttypcondtbs         rH   visit_branchz!IRPrettyPrintVisitor.visit_branchP   s    '.S: 	,,C{{3)) 	:$r'99B3D33"333 	 <#<<C{{3222rJ   r2   c                8    |                      d|j                  S )Nz	return %r)rN   rY   rP   s     rH   visit_returnz!IRPrettyPrintVisitor.visit_return^   s    {{;111rJ   r:   c                    dS )Nunreachable rP   s     rH   visit_unreachablez&IRPrettyPrintVisitor.visit_unreachablea   s    }rJ   r   c                D    |                      d|j        |j                  S )Nz%r = %r)rN   destsrcrP   s     rH   visit_assignz!IRPrettyPrintVisitor.visit_assignd   s    {{9bgrv666rJ   r   c                                           d|j        d                     fd|j        D                                 S )Nz	%r = [%s], c              3  D   K   | ]}                     d |          V  dS rR   NrN   .0vrG   s     rH   	<genexpr>z:IRPrettyPrintVisitor.visit_assign_multi.<locals>.<genexpr>h   s2      :`:`TU4;;tQ;O;O:`:`:`:`:`:`rJ   )rN   ri   joinrj   rP   s   ` rH   visit_assign_multiz'IRPrettyPrintVisitor.visit_assign_multig   s@    {{;:`:`:`:`Y[Y_:`:`:`1`1`aaarJ   r'   c                :    |                      d||j                  S )Nz%r = <error> :: %s)rN   typerP   s     rH   visit_load_error_valuez+IRPrettyPrintVisitor.visit_load_error_valuej   s    {{/RW===rJ   r)   c                J   d}t          |j        t                    rd}t          |j                  }t          |j        t                    r@d t          |j        t                    D             }dd                    |          z   dz   }|                     d|||          S )	NrT   zobject c                ,    g | ]}t          |          S rf   )repr)rr   is     rH   
<listcomp>z;IRPrettyPrintVisitor.visit_load_literal.<locals>.<listcomp>|   s    JJJ1tAwwJJJrJ   )keyzfrozenset({rm   z})z	%r = %s%s)	
isinstancerY   intr|   	frozensetsortedrL   ru   rN   )rG   rK   prefixrvalueformatted_itemss        rH   visit_load_literalz'IRPrettyPrintVisitor.visit_load_literalm   s     bh$$ 	Fbhbh	** 	G KJrxS0I0I0IJJJO"TYY%?%??$FF{{;FF;;;rJ   r   c                n    |                      d||                     |          |j        |j                  S )Nz%r = %s%r.%s)rN   borrow_prefixobjattrrP   s     rH   visit_get_attrz#IRPrettyPrintVisitor.visit_get_attr   s.    {{>2t/A/A"/E/ErvrwWWWrJ   r-   c                    |j         rdS dS )Nzborrow rT   )is_borrowedrP   s     rH   r   z"IRPrettyPrintVisitor.borrow_prefix   s    > 	9rrJ   r3   c                    |j         r|j        t          k    sJ |j        t          k    r'|                     d|j        |j        |j                  S |                     d|j        |j        |j        |          S )Nz
%r.%s = %rz%r.%s = %r; %r = is_error)is_init
error_kindr   rN   r   r   rj   rP   s     rH   visit_set_attrz#IRPrettyPrintVisitor.visit_set_attr   sl    : 	.=I----=I%%;;|RVRWbfEEE;;:BFBGRVUWXXXrJ   r+   c                    |j         rdt          |j                    dnd}|j        }|j        |j         d| }|                     d|||j        |          S )N  ()rT   .z%r = %s :: %s%s)annr|   
identifiermodule_namerN   	namespace)rG   rK   r   names       rH   visit_load_staticz&IRPrettyPrintVisitor.visit_load_static   sh    ')v5#DLL####2}>%n--t--D{{,b$cJJJrJ   r"   c                z    |j         }|j        |j         d| }|                     d||j        |j                  S )Nr   z%s = %r :: %s)r   r   rN   rY   r   rG   rK   r   s      rH   visit_init_staticz&IRPrettyPrintVisitor.visit_init_static   sB    }>%n--t--D{{?D"(BLIIIrJ   r6   c                n    |                      d||                     |          |j        |j                  S )Nz%r = %s%r[%d])rN   r   rj   indexrP   s     rH   visit_tuple_getz$IRPrettyPrintVisitor.visit_tuple_get   s0    {{?B0B0B20F0FPRPXYYYrJ   r7   c                ~     d                      fd|j        D                       }                     d||          S )Nrm   c              3  D   K   | ]}                     d |          V  dS ro   rp   )rr   itemrG   s     rH   rt   z7IRPrettyPrintVisitor.visit_tuple_set.<locals>.<genexpr>   s1      JJT[[t44JJJJJJrJ   z	%r = (%s))ru   itemsrN   )rG   rK   item_strs   `  rH   visit_tuple_setz$IRPrettyPrintVisitor.visit_tuple_set   sA    99JJJJJJJJJ{{;H555rJ   r!   c                    |                      d|j                  }t          |j        j                  st	          |j        j                  r$|dt          |j        j        j                   z  }|S )Nz
inc_ref %rrW   )rN   rj   r=   rx   r>   r	   r   rG   rK   ss      rH   visit_inc_refz"IRPrettyPrintVisitor.visit_inc_ref   sf    KKbf--bfk** 	7.?.L.L 	76
26;#344666ArJ   r   c                    |                      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xrT   rW   )rN   is_xdecrj   r=   rx   r>   r	   r   r   s      rH   visit_dec_refz"IRPrettyPrintVisitor.visit_dec_ref   ss    KKrz(Ar26JJbfk** 	7.?.L.L 	76
26;#344666ArJ   r   c                     d                      fd|j        D                       }|j        j        }| d| d}|j        s                     d|          |z   }|S )Nrm   c              3  D   K   | ]}                     d |          V  dS ro   rp   rr   argrG   s     rH   rt   z2IRPrettyPrintVisitor.visit_call.<locals>.<genexpr>   1      CCCT3//CCCCCCrJ   (r   %r = )ru   argsfn	shortnameis_voidrN   )rG   rK   r   r	   r   s   `    rH   
visit_callzIRPrettyPrintVisitor.visit_call   sq    yyCCCC27CCCCCU_
##D###z 	-GR((1,ArJ   r,   c                     d                      fd|j        D                       }                     d|j        |j        |          }|j        s                     d|          |z   }|S )Nrm   c              3  D   K   | ]}                     d |          V  dS ro   rp   r   s     rH   rt   z9IRPrettyPrintVisitor.visit_method_call.<locals>.<genexpr>   r   rJ   z	%r.%s(%s)r   )ru   r   rN   r   methodr   )rG   rK   r   r   s   `   rH   visit_method_callz&IRPrettyPrintVisitor.visit_method_call   sm    yyCCCC27CCCCCKKRVRY==z 	-GR((1,ArJ   r   c                n    |                      d||                     |          |j        |j                  S )Nz%r = %scast(%s, %r))rN   r   rx   rj   rP   s     rH   
visit_castzIRPrettyPrintVisitor.visit_cast   s1    {{0"d6H6H6L6LbgWYW]^^^rJ   r   c                P    |                      d||j        j        |j                  S )Nz%r = box(%s, %r)rN   rj   rx   rP   s     rH   	visit_boxzIRPrettyPrintVisitor.visit_box   s!    {{-r26;GGGrJ   r9   c                F    |                      d||j        |j                  S )Nz%r = unbox(%s, %r))rN   rx   rj   rP   s     rH   visit_unboxz IRPrettyPrintVisitor.visit_unbox   s    {{/RWbfEEErJ   r0   c                f   |j         t          |j         t                    r/|                     d||j        t          |j                             S t          |j         t                    r"|                     d||j        |j                   S J d            |                     d||j                  S )Nz%r = raise %s(%s)z%r = raise %s(%r)Fz&value type must be either str or Valuez%r = raise %s)rY   r   rL   rN   
class_namer|   r;   rP   s     rH   visit_raise_standard_errorz/IRPrettyPrintVisitor.visit_raise_standard_error   s    8"(C(( G{{#6BM4PRPX>>ZZZBHe,, G{{#6BM28TTTFFFFF;;BMBBBrJ   r   c                     d                      fd|j        D                       }|j        r                     d|j        |          S                      d||j        |          S )Nrm   c              3  D   K   | ]}                     d |          V  dS ro   rp   r   s     rH   rt   z4IRPrettyPrintVisitor.visit_call_c.<locals>.<genexpr>   s1      GGT[[s33GGGGGGrJ   z%s(%s)z%r = %s(%s))ru   r   r   rN   function_name)rG   rK   args_strs   `  rH   visit_call_cz!IRPrettyPrintVisitor.visit_call_c   sj    99GGGGrwGGGGG: 	N;;x)98DDD;;}b"2BHMMMrJ   r/   c                    g }d}d}t          |j        j                  D ]}|r:|                    |                     d|j        |                              |dz  }>|j        sJ |                    |                     d|j        |                              |dz  }d                    |          }|j        r!|                     d|j        j	        |          S |                     d||j        j	        |          S )Nr   rR      rm   z%s %sz
%r = %s %s)
zipdesc	arg_typesappendrN   r   	type_argsru   r   r   )rG   rK   r   	arg_indextype_arg_indexarg_typer   s          rH   visit_primitive_opz'IRPrettyPrintVisitor.visit_primitive_op   s    	BG-.. 	$ 	$H $DKKbgi.@AABBBQ		|###DKKbl>.JKKLLL!#99T??: 	I;;wh???;;|RxHHHrJ   r5   c                R    |                      d||j        |j        |j                  S )Nz%r = truncate %r: %t to %t)rN   rj   src_typerx   rP   s     rH   visit_truncatez#IRPrettyPrintVisitor.visit_truncate   s%    {{7RVR[RTRYZZZrJ   r   c                l    |j         rd}nd}|                     d|||j        |j        |j                  S )Nz signedrT   z%r = extend%s %r: %t to %t)signedrN   rj   r   rx   )rG   rK   extras      rH   visit_extendz!IRPrettyPrintVisitor.visit_extend   s=    9 	EEE{{7UBFBKY[Y`aaarJ   r(   c                ~    |j         rdt          |j                    dnd}|                     d||j        |          S )Nr   r   rT   z%r = load_global %s :: static%s)r   r|   rN   r   )rG   rK   r   s      rH   visit_load_globalz&IRPrettyPrintVisitor.visit_load_global   sC    ')v5#DLL####2{{<b"-QTUUUrJ   r$   c                r    |                      d||j        t          j        |j                 |j                  S Nz%r = %r %s %r)rN   lhsr$   op_strrK   rhsrP   s     rH   visit_int_opz!IRPrettyPrintVisitor.visit_int_op   s)    {{?BRU8KRVTTTrJ   r   c                X   |j         t          j        t          j        t          j        t          j        fv rd}n:|j         t          j        t          j        t          j        t          j	        fv rd}nd}| 
                    d||j        t          j        |j                  |j        |          S )Nz
 :: signedz :: unsignedrT   z%r = %r %s %r%s)rK   r   SLTSGTSLESGEULTUGTULEUGErN   r   r   r   )rG   rK   sign_formats      rH   visit_comparison_opz(IRPrettyPrintVisitor.visit_comparison_op  s    5\%|'79I<K[\\\&KKU|')9<;K\M]^^^(KKK{{r26<+>ru+Erv{
 
 	
rJ   r   c                r    |                      d||j        t          j        |j                 |j                  S r   )rN   r   r   r   rK   r   rP   s     rH   visit_float_opz#IRPrettyPrintVisitor.visit_float_op  s)    {{?Bru8MrvVVVrJ   r   c                :    |                      d||j                  S )Nz%r = -%rrN   rj   rP   s     rH   visit_float_negz$IRPrettyPrintVisitor.visit_float_neg  s    {{:r26222rJ   r   c                h    |                      d||j        |j        |j                 |j                  S r   )rN   r   r   rK   r   rP   s     rH   visit_float_comparison_opz.IRPrettyPrintVisitor.visit_float_comparison_op  s)    {{?B	"%8H"&QQQrJ   r*   c                F    |                      d||j        |j                  S )Nz%r = load_mem %r :: %t*r   rP   s     rH   visit_load_memz#IRPrettyPrintVisitor.visit_load_mem  s    {{4b"&"'JJJrJ   r4   c                P    |                      d|j        |j        |j                  S )Nzset_mem %r, %r :: %t*)rN   ri   rj   	dest_typerP   s     rH   visit_set_memz"IRPrettyPrintVisitor.visit_set_mem  s!    {{2BGRVR\RRRrJ   r   c                R    |                      d||j        |j        |j                  S )Nz %r = get_element_ptr %r %s :: %t)rN   rj   fieldr   rP   s     rH   visit_get_element_ptrz*IRPrettyPrintVisitor.visit_get_element_ptr  s%    {{=r2628UWU`aaarJ   r&   c                p   t          |j        t                    r|                     d||j                  S t          |j        t                    rK|j        j        }|j        j        |j        j         d| }|                     d|||j        j                  S |                     d||j                  S )Nz%r = load_address %rr   z%r = load_address %s :: %sz%r = load_address %s)r   rj   r1   rN   r+   r   r   r   r   s      rH   visit_load_addressz'IRPrettyPrintVisitor.visit_load_address  s    bfh'' 	C;;5r26BBB
++ 	C6$Dv!-&,55t55;;;RrvGWXXX;;5r26BBBrJ   r%   c           	          |j         rd}nd}                     d                    |d                     fd|j        D                                           S )Nzsteal rT   zkeep_alive {}{}rm   c              3  D   K   | ]}                     d |          V  dS ro   rp   rq   s     rH   rt   z8IRPrettyPrintVisitor.visit_keep_alive.<locals>.<genexpr>0  s1      5[5[qdkk$6J6J5[5[5[5[5[5[rJ   )stealrN   ru   rj   )rG   rK   r  s   `  rH   visit_keep_alivez%IRPrettyPrintVisitor.visit_keep_alive*  sg    8 	EEE{{$$UDII5[5[5[5[TVTZ5[5[5[,[,[\\
 
 	
rJ   r8   c                :    |                      d||j                  S )Nz%r = unborrow %rr   rP   s     rH   visit_unborrowz#IRPrettyPrintVisitor.visit_unborrow3  s    {{-r26:::rJ   r]   r   r   c                   g }d}t          |          }|t          |          k     r>|                    d|          }|dk     rt          |          }|                    |||                    |t          |          k     r||dz            }|                    d          }|dk    rt          |t                    sJ t          |t                    r)|                    t          |j	                             nKt          |t                    r)|                    t          |j	                             n|                    | j        |                    n|dk    r|                    d|z             n|dk    r|                    d|z             n|d	k    r5t          |t                    sJ |                    d
|j        z             ns|dk    r2t          |t                    sJ |                    |j                   n;|dk    r#|                    t          |                     nt#          d|           |dz   }n|}|t          |          k     >d                    |          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   %r   rdz%dfz%flzL%str   zInvalid format sequence %   rT   )listlenfindr   popr   r;   r#   rL   rY   r   r|   rA   r   rO   r<   r   
ValueErrorru   )	rG   r]   r   resultr}   arglistntypespecr   s	            rH   rN   zIRPrettyPrintVisitor.format8  sQ    t**#c((lla  A1uuHHMM#ac(###3s88||q1u:kk!nns??%c511111!#w// 7c#)nn5555#C// 7d39oo6666djo6666__MM$*----__MM$*----__%c:66666MM%#)"34444__%c511111MM#(++++__MM#c((++++$%K%K%KLLLEM #c((llN wwvrJ   N)rA   rB   rC   rD   )rK   r    rC   rL   )rK   r   rC   rL   )rK   r2   rC   rL   )rK   r:   rC   rL   )rK   r   rC   rL   )rK   r   rC   rL   )rK   r'   rC   rL   )rK   r)   rC   rL   )rK   r   rC   rL   )rK   r-   rC   rL   )rK   r3   rC   rL   )rK   r+   rC   rL   )rK   r"   rC   rL   )rK   r6   rC   rL   )rK   r7   rC   rL   )rK   r!   rC   rL   )rK   r   rC   rL   )rK   r   rC   rL   )rK   r,   rC   rL   )rK   r   rC   rL   )rK   r   rC   rL   )rK   r9   rC   rL   )rK   r0   rC   rL   )rK   r   rC   rL   )rK   r/   rC   rL   )rK   r5   rC   rL   )rK   r   rC   rL   )rK   r(   rC   rL   )rK   r$   rC   rL   )rK   r   rC   rL   )rK   r   rC   rL   )rK   r   rC   rL   )rK   r   rC   rL   )rK   r*   rC   rL   )rK   r4   rC   rL   )rK   r   rC   rL   )rK   r&   rC   rL   )rK   r%   rC   rL   )rK   r8   rC   rL   )r]   rL   r   r   rC   rL   )2__name__
__module____qualname____doc__rI   rQ   r   BOOLIS_ERRORrU   __annotations__ra   rc   rg   rk   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  rN   rf   rJ   rH   r@   r@   B   s        22   0 0 0 0 %k>6?L`aOaaaa3 3 3 32 2 2 2   7 7 7 7b b b b> > > >< < < <&X X X X   
Y Y Y YK K K KJ J J JZ Z Z Z6 6 6 6            _ _ _ _H H H HF F F F	C 	C 	C 	CN N N NI I I I&[ [ [ [b b b bV V V VU U U U	
 	
 	
 	
W W W W3 3 3 3R R R RK K K KS S S Sb b b b	C 	C 	C 	C
 
 
 
; ; ; ;
6 6 6 6 6 6rJ   r@   func_irr
   rA   rB   rC   	list[str]c                l   g }d}t          | j        | j                  }|t          |          k     r|}|||                  g}|dz   t          |          k     rz||dz            j        ||         j        k    r[|dz  }|                    |||                             |dz   t          |          k     r||dz            j        ||         j        k    [|dz  }|                    d                    d                    |          ||         j                             |t          |          k     |S )Nr   r   z{} :: {}rm   )r   arg_regsblocksr  rx   r   rN   ru   )r$  rA   r  r}   regsi0groups          rH   format_registersr,  q  s    F	A7+W^<<D
c$ii--tBx!!ec$iiDQK$4R$E$EFALLtAw((( !ec$iiDQK$4R$E$E 	
Qj''		%(8(8$r(-HHIII c$ii-- MrJ   r(  list[BasicBlock]source_to_errordict[ErrorSource, list[str]]c                ^   t          |           D ]\  }}||_        i }| D ]7}|j        r.|                    |j        g                               |           8t          |          }g }t          |           D ]\  }}d}	||v rGt          d ||         D                       }
d                    d                    |
                    }	|                    d|j        |	fz             ||v r#||         D ]}|                    d|            |j	        }t          |d         t                    rV|dz   t          |           k     r@|d         j        | |dz            k    r&|                    |d         g           s
|d	d         }|D ]V}d
|                    |          z   }|                    |           ||v r#||         D ]}|                    d|            Wt          |j	        d         t          t          t           t"          f          s|                    d           |S )z<Format a list of IR basic blocks into a human-readable form.rT   c              3  *   K   | ]}d |j         z  V  dS )zL%dN)rO   )rr   bs     rH   rt   z format_blocks.<locals>.<genexpr>  s(      HHEAGOHHHHHHrJ   z (handler for {})rm   zL%d:%sz  ERR: r   N    z    [MISSING BLOCK EXIT OPCODE])	enumeraterO   error_handler
setdefaultr   r@   r   rN   ru   opsr   r    r  getacceptr   r2   r:   )r(  rA   r.  r}   blockhandler_mapr2  visitorlineshandler_msglabelserrorr8  rK   lines                  rH   format_blocksrC    sm    f%%  568K B B? 	B""1?B77>>qAAA"5))GEf%% < <5KHH[5GHHHHHF-44TYYv5F5FGGKXk ::;;;O##(/ 0 0.u..////is2w%%	AF##BA..#''B44 /
 crc(C 	4 	4BBIIg...DLL_$$,R0 4 4ELL!25!2!23333%)B-$)LMM 	<LL:;;;LrJ   rf   r   errors!Sequence[tuple[ErrorSource, str]]c           
         g }| j         r
| j         dz   nd}|                    d                    || j        d                    d | j        D                                            t          | j        | j                  }t          | |          D ]}|                    d|z              t          t                    }|D ] \  }}||                             |           !t          | j        ||          }	|                    |	           |S )Nr   rT   zdef {}{}({}):rm   c              3  $   K   | ]}|j         V  d S rF   )r   )rr   r   s     rH   rt   zformat_func.<locals>.<genexpr>  s$      =Z=Z3ch=Z=Z=Z=Z=Z=ZrJ   r4  )r   r   rN   r   ru   r   generate_names_for_irr'  r(  r,  r   r  rC  extend)
r   rD  r>  
cls_prefixrA   rB  r.  sourcerA  codes
             rH   format_funcrM    s   E(*=$$2J	LLz27DII=Z=ZRTRY=Z=Z=Z4Z4Z[[   ""+ry99E U++ $ $Vd]####!$''O . .&&u----E?;;D	LLLrJ   modulesr   c                    g }|                                  D ]C}|j        D ]9}|                    t          |                     |                    d           :D|S )NrT   )values	functionsrI  rM  r   )rN  r8  moduler   s       rH   format_modulesrS    sg    
C..""  " 	 	BJJ{2'''JJrNNNN	 JrJ   r   list[Register]c                   i }t                      }d}| D ]&}|j        ||<   |                    |j                   '|D ]8}|j        D ],}g }|                                D ]}	|	|vr|                    |	           t          |t          t          f          r|                    |j	                   n6t          |t                    s|j        r||vr|                    |           |D ]}
|
|v rt          |
t                    r|
j        r|
j        }n't          |
t          t          f          rHd|z  }|dz  }||v rd}	 d||fz  }||vr|}n|dz  }|||
<   |                    |           .:|S )zGenerate 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  Tz%s_%d)setr   addr8  sourcesr   r   r   r   ri   r   r   r1   r#   r   )r   r(  rA   
used_names
temp_indexr   r;  rK   rP  rK  rY   r   r  	candidates                 rH   rH  rH    s    !EJJ ! !Xc
sx     %% %%) $	% $	%BF**,, * *&&MM&)))"v{344 "bg&&&&B	** "bj "5b!!! % %E>>eX.. $5: $ :DD'788 $ :-D!OJ :%%A$+tQi$7	$J66#,D!Q  $et$$$$-%$	%L LrJ   N)r$  r
   rA   rB   rC   r%  )r(  r-  rA   rB   r.  r/  rC   r%  )rf   )r   r
   rD  rE  rC   r%  )rN  r   rC   r%  )r   rT  r(  r-  rC   rB   )Nr   
__future__r   collectionsr   collections.abcr   typingr   r   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   mypyc.ir.rtypesr<   r=   r>   ErrorSourcerL   r@   r,  rC  rM  rS  rH  rf   rJ   rH   <module>rf     s`   @ @ " " " " " " # # # # # # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ # # # # # # 4 4 4 4 4 4 4 4 ( ( ( ( ( (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0b I H H H H H H H H HJN#l l l l l9S> l l l^	   0 0 0 0f    &   6 6 6 6 6 6rJ   