
    5 f\                    J   d Z ddlmZ ddlZddlmZmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB ddlCmDZDmEZE dd	lFmGZGmHZH dd
lImJZJ ddlKmLZL ddlMmNZNmOZOmPZP ddlQmRZRmSZSmTZTmUZUmVZV ddlWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_ ddl`maZambZbmcZc ddldmeZemfZfmgZgmhZhmiZimjZjmkZk ddllmmZm eg df         Zneg e9f         ZoddZpddZqddZrdd Zsdd$Ztdd&Zudd,Zvdd/Zwdd1Zxdd3Zydd5Zzdd8Z{dd:Z|dd<Z}dd>Z~dd@ZddIZddLZddSZddWZdd[Zdd_Zdd`ZddaZddcZddgZddjZddmZddoZddqZddsZdduZddvZddxZddzZdd|ZddZdS )a  Transform mypy statement ASTs to mypyc IR (Intermediate Representation).

The top-level AST transformation logic is implemented in mypyc.irbuild.visitor
and mypyc.irbuild.builder.

A few statements are transformed in mypyc.irbuild.function (yield, for example).
    )annotationsN)CallableSequence)
AssertStmtAssignmentStmt	AwaitExprBlock	BreakStmtContinueStmtDelStmt
ExpressionExpressionStmtForStmtIfStmtImport	ImportAll
ImportFromListExprLvalue	MatchStmtOperatorAssignmentStmt	RaiseStmt
ReturnStmtStarExprStrExprTempNodeTryStmt	TupleExpr	WhileStmtWithStmt	YieldExprYieldFromExpr)NAMESPACE_MODULENO_TRACEBACK_LINE_NOAssign
BasicBlockBranch
InitStaticIntegerLoadAddressLoadErrorValueLoadLiteral
LoadStatic
MethodCallRaiseStandardErrorRegisterReturnTupleGetUnborrowUnreachableValue)	RInstanceRTuplec_pyssize_t_rprimitive
exc_rtuple	is_taggednone_rprimitiveobject_pointer_rprimitiveobject_rprimitive)is_borrow_friendly_exprprocess_conditional)	IRBuilderint_borrow_friendly_op)for_loop_helper)-add_raise_exception_blocks_to_generator_class)ExceptNonlocalControlFinallyNonlocalControlTryFinallyNonlocalControl)AssignmentTargetAssignmentTargetAttrAssignmentTargetIndexAssignmentTargetRegisterAssignmentTargetTuple)error_catch_opexc_matches_opget_exc_info_opget_exc_value_opkeep_propagating_opraise_exception_opreraise_exception_oprestore_exc_info_op)iter_opnext_raw_oppy_delattr_op)check_stop_opcoro_opimport_from_many_opimport_many_opsend_optype_opyield_from_except_op   )MatchVisitorbuilderr@   blockr	   returnNonec                   |j         sc| j                            d           |j        D ]&}|                     |           | j        d         s n'| j                                         d S |j        rV|                     t          t          j        d|j	                             |                     t                                 d S d S )NTz#Reached allegedly unreachable code!)is_unreachableblock_reachable_stackappendbodyacceptpopaddr/   RUNTIME_ERRORliner4   )r`   ra   stmts      M/var/www/equiseq/venv/lib/python3.11/site-packages/mypyc/irbuild/statement.pytransform_blockrq   w   s     #%,,T222J 	 	DNN4   04  	%))+++++ 
 #"02WY^Yc 	
 	
 	

 	KMM"""""# #    ro   r   c                    t          |j        t                    rd S |j                            | j                   |                                  d S N)
isinstanceexprr   rj   visitorflush_keep_alives)r`   ro   s     rp   transform_expression_stmtry      sM    $)W%%  	IW_%%%rr   r   c                   |j         r|                     |j                   }n| j                                        }|                     || j        d         |j                  }| j        d                             | ||j                   d S Nre   )	rv   rj   r`   nonecoerce	ret_typesrn   nonlocal_control
gen_return)r`   ro   retvals      rp   transform_return_stmtr      s{    y (	**%%''^^FG$5b$949EEFR ++GVTYGGGGGrr   r   c                   |j         }|sJ |                     ||j                   |d         }|j        r7t	          |j        t                    r|                     ||j                   d S t	          |t          t          f          rOt	          |j        t          t          f          r-t          |j                  t          |j        j                  k    rt          d |j        D                       rt          |          dk    rg }|j        j        D ]\}|                     |          }t          |j                  }|                     |||j                   |                    |           ]t#          |j        |          D ]6\  }}|                     |          }	|                     |	||j                   7|                                  d S |j        j        }
|                     |j                  }|                                 r|j        r|                     ||           t	          |t          t          f          rwt	          |j        t,                    r\t          |j        j                  t          |j                  k    r,t          |          dk    rt          d |j        D                       rt1          d |j        j        D                       rt          |j                  }t3          |          D ]}|                     |j        |                   }|                     t7          ||d                    }|                     t9          |                    }|                     |||
           | j                            |gd           |                                  d S |D ]B}|                     |          }|                     |||
           |                                  Cd S )	Nr   c              3  4   K   | ]}t          |          V  d S rt   is_simple_lvalue.0items     rp   	<genexpr>z,transform_assignment_stmt.<locals>.<genexpr>   +      FF4 &&FFFFFFrr   r^   c              3  4   K   | ]}t          |          V  d S rt   r   r   s     rp   r   z,transform_assignment_stmt.<locals>.<genexpr>   r   rr   c              3  $   K   | ]}|j         V  d S rt   )is_refcounted)r   ts     rp   r   z,transform_assignment_stmt.<locals>.<genexpr>   s$      ??A??????rr   T)borrow)steal)lvaluesdisallow_class_assignmentsrn   typeru   rvaluer   get_assignment_targetr   r   lenitemsallrj   r0   assignrh   ziprx   non_function_scopeis_final_definit_final_staticr7   typesanyrangerl   r2   r3   r`   
keep_alive)r`   ro   r   first_lvaluetempsright
rvalue_regtempleftassignment_targetrn   nitargetrvalue_itemlvalues                   rp   transform_assignment_stmtr      s   lGNN7&&w	:::1:Ly ZX66  	%%lDI>>> 	<)X!677t{Y$9:: "##s4;+<'='===FF<3EFFFFF >LLA[& 	 	E ..JJO,,DNN4TY777LLl0%88 	? 	?JD$ ' = =d C CNN,dDI>>>>!!###;D,,J!!## <(9 <!!,
;;; 	<)X!677z// 
%&&#l.@*A*AAALLAFF<3EFFFFF ??)>?????  "##q 	6 	6A22<3Ea3HIIF!++hz1T&J&J&JKKK!++h{&;&;<<KNN6;5555""J<t"<<<!!### $ $..v66vz4000!!####$ $rr   rv   r   boolc                H    t          | t          t          t          f           S rt   )ru   r   r   r   )rv   s    rp   r   r      s    $8Y ?@@@@rr   r   c                   |                      |j        g|j                   t          |                     |j                            r`t          |                     |j                            r9|j        t          v r+t          | |j                  ot          | |j                  }nd}| 	                    |j                  }| 
                    ||j        |          }|                     |j        |          }|j        dz   }|                     ||||j                  }|                     |||j                   |                                  dS )z,Operator assignment statement such as x += 1F)
can_borrow=N)r   r   rn   r:   	node_typer   oprA   r>   r   readrj   	binary_opr   rx   )r`   ro   r   r   target_valuerregr   ress           rp   "transform_operator_assignment_stmtr      s@   &&}di@@@'##DK0011	g''4455	 G---,WdkBB 
G^T[H
 H


 
**4;77F<<	j<IIL>>$+*>==D	3B


L$DI
>
>C NN63)))rr   	module_idstras_name
str | Nonetuple[str, str]c                R    |r| }|}n|                      d          d         x}}||fS )a  Compute names for updating the globals dict with the appropriate module.

    * For 'import foo.bar as baz' we add 'foo.bar' with the name 'baz'
    * For 'import foo.bar' we add 'foo' with the name 'foo'

    Typically we then ignore these entries and access things directly
    via the module static, but we will use the globals version for
    modules that mypy couldn't find, since it doesn't analyze module
    references from those properly..r   )split)r   r   
globals_idglobals_names       rp   import_globals_id_and_namer      s>      <
$-OOC$8$8$;;
\|##rr   noder   c           
        |j         rd S |j        s|                                 }|j        D ]\  }}|                     ||j                   t          ||          \  }}|                     |d|                     |          | 	                    ||j                  gd |j                   d S || j
        vrd S g }g }g }	| j
        |         D ]}
|
j        D ]\  }}d | j        |<   |                    |gt          ||          R            t          t          |t                    }|                    |                     t#          t$          |                               |	                    t'          |
j        t(                               | j                            t$          |          }| j                            t(          |	          }|                     t0          |                     t3          t5          |          t                              ||                                 |                     | j                  |                     | j        j                  |gt<                     d S )N__setitem__result_typern   	namespace)is_mypy_onlyis_top_levelload_globals_dictids
gen_importrn   r   gen_method_callload_str
get_modulemodule_import_groupsimportsrh   r-   r=   r#   rl   r*   r<   r)   r8   r`   setup_rarraycall_crZ   r,   tuplemodule_pathfn_infonamer$   )r`   r   globalsmod_idr   r   r   modulesstatic_ptrs	mod_linesimport_node
mod_staticstatic_array_ptrimport_line_ptrs                 rp   transform_importr     s    &   ++--#x 		 		OFGvty111'A&''R'R$J##!!,//1C1CJPTPY1Z1Z[ Y $     	7///GK I3D9 P P* 	P 	POFG&*GOF#NNFQ%?%P%PQQRRR#$5vIYZZZJw{{;7PR\+]+]^^___W[%57MNNOOOO	P 334M{[[o223I9UUONNKKE'NN4EFFGG%%''W011W_122	
 	    rr   r   c                B   |j         rd S | j        | j                 }|j        |j        r|j        d         }n$| j                            d          r| j        }nd}t          j                            d|j	        z  |j
        z   |          }d | j        |<   d |j        D             }d |j        D             }|                     t          t          |          t                               }||k    r|}n5|                     t          t          |          t                               }|                     t$          |                     |          |||                                 g|j                  }	|                     t-          |	|t.                               d S )Nr   z__init__.py r   c                    g | ]\  }}|S  r   )r   r   _s      rp   
<listcomp>z)transform_import_from.<locals>.<listcomp>c  s    ,,,gdAT,,,rr   c                    g | ]	\  }}|p|
S r   r   )r   r   r   s      rp   r   z)transform_import_from.<locals>.<listcomp>d  s     @@@MD'4@@@rr   r   )r   graphmodule_name	ancestorsr   endswith	importlibutilresolve_namerelativeidr   namesrl   r,   r   r=   r   rY   r   r   rn   r(   r#   )
r`   r   module_statemodule_packager   r   as_namesnames_literalas_names_literalmodules
             rp   transform_import_fromr   T  s    =!45L)l.D)%/2			%	%m	4	4  ,		$	$S4=%847%BN	S	SBGOB,,,,,E@@TZ@@@HKKE%LL:K L LMMM5(";;{5??DU'V'VWW ^^			"		}.>@Y@Y@[@[\	 F
 KK
621ABBBCCCCCrr   r   c                X    |j         rd S |                     |j        |j                   d S rt   )r   r   r   rn   r`   r   s     rp   transform_import_allr  v  s2     tw	*****rr   r   c                .   t                      t                      }}|j        rt                      n|}t          |j                  dk    sJ t	          | |j        d         ||           |                     |           |                     |j        d                    |                     |           |j        rD|                     |           |                     |j                   |                     |           |                     |           d S )Nr^   r   )	r&   	else_bodyr   rv   r?   activate_blockrj   ri   goto)r`   ro   if_bodynextr  s        rp   transform_if_stmtr
  |  s    LL*,,TG $8
DI ty>>Q1w	BBB7###NN49Q<   LL~ y)))t~&&&T4     rr   sr   c                   t                      t                      t                      t                      f\  }}}}|j        |n|}|                     ||           |                     |           t	          | |j        ||           |                     |           |                     |j                   | 	                    |           | 
                                 |j        D|                     |           |                     |j                   | 	                    |           |                     |           d S rt   )r&   r  push_loop_stackgoto_and_activater?   rv   r  rj   ri   r  pop_loop_stack)r`   r  ri   r	  top
else_blocknormal_loop_exits          rp   transform_while_stmtr    s%   ",,,
jllJLL"XD$Z%&[%<zz$C&&& c"""/?@@@4   NN16LL{z***q{###T4     rr   r   c           	          d fd}d fd}t           j        j        |j        r|nd j        j                   d S )Nrb   rc   c                 <                          j                   d S rt   rj   ri   r`   r  s   rp   ri   z transform_for_stmt.<locals>.body      qvrr   c                 N    j         J                      j                    d S rt   )r  rj   r  s   rp   r  z&transform_for_stmt.<locals>.else_block  s+    {&&&q{#####rr   rb   rc   )rB   indexrv   r  is_asyncrn   )r`   r  ri   r  s   ``  rp   transform_for_stmtr    s          $ $ $ $ $ $ $ !&$ak(K

tQZYZY_    rr   r
   c                R    | j         d                             | |j                   d S r{   )r   	gen_breakrn   r  s     rp   transform_break_stmtr     s(    R **7DI>>>>>rr   r   c                R    | j         d                             | |j                   d S r{   )r   gen_continuern   r  s     rp   transform_continue_stmtr#    s(    R --gtyAAAAArr   r   c                V   |j         D|                     t          g t                     |                     t                                 d S |                     |j                   }|                     t          |g|j                   |                     t                                 d S rt   )	rv   r   rR   r$   rl   r4   rj   rQ   rn   )r`   r  excs      rp   transform_raise_stmtr&    s    v~+R1EFFFKMM"""
..
 
 CNN%uaf555KKrr   ri   GenFunchandlersLSequence[tuple[tuple[ValueGenFunc, int] | None, Expression | None, GenFunc]]r  GenFunc | Nonern   intc           	     @   |s
J d            t                      t                      t                      }}}t                      }|rt                      n|}	| j                            |           |                     t                                  |             |                     |	           | j                                         | j                            |           |                     |           |                     |                     t          g |                    }
| j
                            t          | j
        d         |
                     |D ]\  }}}d}|r|\  }}t                      t                      }}|                     t           |            g|          }|                     t          |||t          j                             |                     |           |rP|                     |          }|                     ||                     t&          g |j                  |j                    |             |                     |           |r|                     |           |rB|                     t*          g t,                     |                     t/                                 | j
                                         | j                                         |                     |           |                     t2          |                     |
          g|           |                     |           |                     |           |                     t2          |                     |
          g|           |                     t6          g t,                     |                     t/                                 |r4|                     |	            |             |                     |           |                     |           dS )zGeneralized try/except/else handling that takes functions to gen the bodies.

    The point of this is to also be able to support with.ztry needs exceptre   N)r&   r`   push_error_handlerr  r  pop_error_handlerr  maybe_spillr   rL   r   rh   rD   rM   rl   r'   BOOLr   r   rO   rn   rR   r$   r4   rk   rS   r   rP   )r`   ri   r(  r  rn   except_entry
exit_blockcleanup_blockdouble_except_blockr  old_excr   varhandler_body
next_blocktype_f	type_line
body_blockmatchesr   s                       rp   transform_try_exceptr=    s    '''''8.8llJLL*,,m*L$,,!*:
J O&&|444jll+++DFFFLLO%%''' O&&':;;;<(((!!'..T"J"JKKG##$9':RSU:VX_$`$`aaa $, / /c<
 	/ $FI%/\\:<<
Jnn^ffhhZKKGKKw
JLLMMM"":... 	]22377FNN67>>2BB#Q#QSVS[\\\]### 	/"":...  #+R1EFFFKMM"""  """O%%'''
 =)))NN&g)>)>(?FFFLL
 .///NN&g)>)>(?FFFNN&,@AAAKK  !z***	Z   :&&&&&rr   r   r   c                     d fd}d fdd fdfdt          j        j        j                  D             }j        r fdnd }t           |||j                   d S )Nrb   rc   c                 <                          j                   d S rt   r  r`   r   s   rp   ri   z'transform_try_except_stmt.<locals>.body  r  rr   ri   r	   r'  c                      fdS )Nc                 .                                    S rt   rj   ri   r`   s   rp   <lambda>zAtransform_try_except_stmt.<locals>.make_handler.<locals>.<lambda>"  s    w~~d++ rr   r   rD  s   `rp   make_handlerz/transform_try_except_stmt.<locals>.make_handler!  s    ++++++rr   r   r   tuple[ValueGenFunc, int]c                       fd j         fS )Nc                 .                                    S rt   rC  )r`   r   s   rp   rE  z?transform_try_except_stmt.<locals>.make_entry.<locals>.<lambda>%  s    t,, rr   )rn   )r   r`   s   `rp   
make_entryz-transform_try_except_stmt.<locals>.make_entry$  s    ,,,,,di88rr   c                N    g | ]!\  }}}|r |          nd | |          f"S rt   r   )r   r   r6  ri   rJ  rF  s       rp   r   z-transform_try_except_stmt.<locals>.<listcomp>'  sT       D#t "	+D			tS,,t2D2DE  rr   c                 8                          j                  S rt   )rj   r  r@  s   rp   rE  z+transform_try_except_stmt.<locals>.<lambda>+  s    44 rr   r  )ri   r	   rb   r'  )r   r   rb   rG  )r   r   varsr(  r  r=  rn   )r`   r   ri   r(  r  rJ  rF  s   ``   @@rp   transform_try_except_stmtrN    s          , , , , , ,9 9 9 9 9 9    "17AFAJ??  H :;N444444$I$)QVDDDDDrr   err_handlerr&   return_entry
main_entrytry_body"Register | AssignmentTarget | Nonec                z   t          |          }| j                            |           | j                            |           |                     t                                  |             |                     |           | j                                         | j        	                                 |j
        S rt   )rF   r`   r-  r   rh   r  r&   r  rk   r.  ret_reg)r`   rO  rP  rQ  rR  controls         rp   try_finally_tryrW  /  s     (55GO&&{333##G,,,jll+++HJJJLL  """O%%'''?rr   finally_blockrU  r5   c           
     D   t          t                    }|                     |           |rB|                     ||                     t          | j        d                             d           |                     |           |                     |           |                     t          ||                     t          t                                                   |                     |           |                     |           |rB|                     ||                     t          | j        d                             d           |                     t          || 	                    t          g d                               |                     |           |S r{   )r0   r9   r  r   rl   r+   r~   r  r%   r   rL   )r`   rO  rP  rQ  rX  rU  r5  s          rp   try_finally_entry_blocksrZ  D  s`    z""G :&&& XwN7;LR;P,Q,Q R RTVWWWLL<(((KKwN:,F,F G GHHIIILL ;''' XwN7;LR;P,Q,Q R RTVWWWKKw~r2 F FGGHHHLLNrr   finally_bodyr5  )tuple[BasicBlock, FinallyNonlocalControl]c                4   t                      }| j                            |           t          | j        d         |          }| j                            |           |                     |            |             | j                                         ||fS r{   )r&   r`   r-  rE   r   rh   r  rk   )r`   rX  r[  r5  r3  finally_controls         rp   try_finally_bodyr_  b  s     LLMO&&}555,W-Eb-I7SSO##O444=)))LNNN  """/))rr   r3  r^  rE   c                D   t                      t                      }}|                     t          |||t          j                             |                     |           |                     t          g t                     |                     t                                 | j	        
                                 |r|                     |           t                      t                      }}|                     t          |                     |          ||t          j                             |                     |           | j        d                             | |                     |          d           |                     |           t                      }|                     |           |                     |           |                    | d           |                     t           g t                     |                     t                                 |S )zResolve the control flow out of a finally block.

    This means returning if there was a return, propagating
    exceptions, break/continue (soon), or just continuing on.
    re   )r&   rl   r'   IS_ERRORr  r   rR   r$   r4   r`   r.  r   r   r   r  gen_cleanuprP   )	r`   r3  r^  r5  rU  reraiserestreturn_block	out_blocks	            rp   try_finally_resolve_controlrg  q  s    LL*,,TGKKwgv??@@@ 7###NN'-ABBBKKO%%'''  Tt$$$'\\:<<dF7<<00$foVVWWW|,,, $//g9N9NPRSSS 4   ILL =))),,,NN&,@AAAKKrr   c                D   t                      t                      t                      t                      f\  }}}}t          | ||||          }t          | |||||          }t          | |||          \  }	}
t	          | |	|
||          }|                     |           dS )zGeneralized try/finally handling that takes functions to gen the bodies.

    The point of this is to also be able to support with.N)r&   rW  rZ  r_  rg  r  )r`   rR  r[  rO  rQ  rP  rX  rU  r5  r3  r^  rf  s               rp   transform_try_finally_stmtri    s     		<8K\= g{L*hWWG 'lJw G
 &6g& &"M?
 ,' I 9%%%%%rr   c                     j         r                     dj                   j        r%d fd}j        t	           | fd           d S t                      d S )Nz3Exception groups and except* cannot be compiled yetrb   rc   c                 n    j         rt                      d S                      j                   d S rt   )r(  rN  rj   ri   r@  s   rp   transform_try_bodyz.transform_try_stmt.<locals>.transform_try_body  s=    z ')'155555qv&&&&&rr   c                 .                                    S rt   rC  rD  s   rp   rE  z$transform_try_stmt.<locals>.<lambda>  s    W[H\H\ rr   r  )is_starerrorrn   r[  ri  rN  )r`   r   rl  ri   s   `` @rp   transform_try_stmtrp    s     	y UKQVTTT~ .	' 	' 	' 	' 	' 	' 	' ~"7,>@\@\@\@\@\]]]]]!'1-----rr   list[Value]c                v                           t          g d           fdt          d          D             S )Nre   c           	     X    g | ]&}                     t          |d                     'S )re   )rl   r2   )r   r   r`   exc_infos     rp   r   z$get_sys_exc_info.<locals>.<listcomp>  s1    EEEqGKK1b1122EEErr      )r   rN   r   )r`   rt  s   `@rp   get_sys_exc_inforv    s<    ~~or266HEEEEEE!HHEEEErr   r   Lvalue | Noner  c           	         	
 rdnd                      |          t          j        t                    r-                     t          d dg                     d n|                     t          g          }                      	                    |d d                     
                     	                    |d d          g                                                                                                         	rt                     d fdd fdd 	fd
d 	fd}t            
fd|           d S )Nar   __enter__)argsrn   exit__rt  r   rb   r5   c                   | rt                    }n                                }|||g}rSt          j        t                    sJ                                         
          d d|	t                    }nEJ                                                                       
          g|z   	          }rt          |	          S |S )Nrz  r}  )
arg_valuesrn   r   )
rv  none_objectru   r   r6   r   r   r;   py_call
emit_await)rt  r|  r|   exit_valalr`   exit_r  	is_nativern   mgrmgr_vs       rp   maybe_natively_call_exitz0transform_with.<locals>.maybe_natively_call_exit  s     	&#G,,DD&&((D$%D 	^ej)44444..S!!R+ /  HH $$$w||E':':W\\#=N=N<ORV<VX\]]H 	gx666Orr   rc   c                 t    r*                                                                             d S rt   )r   r   )ri   r`   rn   r   values   rp   rR  z transform_with.<locals>.try_body  s?     	ONN788@@%NNNrr   c                                                                                    t                      t                      }}                      d          | |                               |                               t          g t                                         t                                                     |            d S )NTrt  )
r   falser&   add_bool_branchr  r   rR   r$   rl   r4   )rf  reraise_blockr`   r%  rn   r  s     rp   except_bodyz#transform_with.<locals>.except_body  s    sGMMOOT222#-<<=	 8 8$ G G GTabbb}---+R1EFFFKMM"""y)))))rr   c                 0   t                      t                      }}                     t                                        || t          j                                                 |            d                               |            d S )NFr  )r&   rl   r'   r   r0  r  r  )rf  r2  r`   r%  r  s     rp   r[  z$transform_with.<locals>.finally_body#  s     *jll:	F7<<,,j)V[QQRRRz***  %0000!!),,,,,rr   c                 2    t           d d fgd           S rt   )r=  )r`   r  rn   rR  s   rp   rE  z transform_with.<locals>.<lambda>-  s$    $Wh$k9R8SUY[_`` rr   )rt  r   rb   r5   r  )rj   ru   r   r6   rl   r.   r   r\   r/  py_get_attrr  maybe_spill_assignabletruer  ri  )r`   rv   r   ri   r  rn   typr[  r  r%  r  r  r  r  r  r  rR  r  s   ` ````  @@@@@@@@@@rp   transform_withr    sE    	 bBNN4  E5:y11I aJu.>2.>.>.>RdSSSTTnnWugt44##G$7$7_"___d$S$STT 3 3C9Ib9I9I9I4 P PSXRY[_``


e
$
$C

(
(
8
8C 17E400            2         
* * * * * * * * *- - - - - - - - ```````    rr   or    c                2     d fd d           d S )Nr   r+  rb   rc   c                      t          j                  k    r                    j                   d S t	          j                  j                   fdj        j                   d S )Nc                        dz             S )Nr^   r   )generater   s   rp   rE  z7transform_with_stmt.<locals>.generate.<locals>.<lambda>9  s    !a% rr   )r   rv   rj   ri   r  r   r  rn   )r   r`   r  r  s   `rp   r  z%transform_with_stmt.<locals>.generate4  sy    AFNN16"""""AHQK1H1H1H1H1H!*VWV\    rr   r   )r   r+  rb   rc   r   )r`   r  r  s   ``@rp   transform_with_stmtr  2  s@            HQKKKKKrr   ry  r   c                `   | j         j        rd S |                     |j                  }t	                      t	                      }}|                     |||           |                     |           |j        4|                     t          t          j
        d |j                             nt          |j        t                    r>|                     t          t          j
        |j        j        |j                             nt|                     |j                  }|                     d|j                  }|                     ||g|j                  }|                     t$          |g|j                   |                     t'                                 |                     |           d S )Nzbuiltins.AssertionError)optionsstrip_assertsrj   rv   r&   r  r  msgrl   r/   ASSERTION_ERRORrn   ru   r   r  load_module_attr_by_fullnamer  r   rQ   r4   )r`   ry  condok_blockerror_blockmessageexc_typer%  s           rp   transform_assert_stmtr  ?  sj   $ >>!&!!D&LL*,,kHD(K888;'''u}&'9'I4QRQWXXYYYY	AE7	#	# :&'9'I15;XYX^__```` ..''778QSTSYZZooh	16::)C5!&999KK8$$$$$rr   r   c                b    t          | |                     |j                  |j                   d S rt   )transform_del_itemr   rv   rn   r`   r  s     rp   transform_del_stmtr  V  s,    w = =af E EqvNNNNNrr   rG   c                @   t          |t                    r'|                     |j        d|j        gd |           d S t          |t
                    rt          |j        t                    r[|j        j        }|	                    |j
                  s5|                     d|j
         d|           |                     d|           |                     |j
                  }|                     t          |j        |g|           d S t          |t"                    rQ|                     t'          |j        |                     t+          |j        d                                         d S t          |t.                    r|j        D ]}t3          | ||           d S d S )N__delitem__r   "z" cannot be deletedzMUsing "__deletable__ = ['<attr>']" in the class body enables "del obj.<attr>"T)	undefines)ru   rI   r   baser  rH   obj_typer6   class_iris_deletableattrro  noter   r   rV   objrJ   rl   r%   registerr+   r   rK   r   r  )r`   r   rn   clkey	subtargets         rp   r  r  Z  s   &/00 9KDt 	  	
 	
 	
 	
 	
 
F0	1	1 9foy11 	)B??6;// B&+BBBDIIIQ  
 v{++}vz3&7>>>>>	F4	5	5 9 	6?GKKv{VZ0[0[0[$\$\]]	
 	
 	
 	
 	
 
F1	2	2 9 	9 	9Iw	488889 9	9 	9rr   valc                   |                      || j        d         |          }| j        j        }t	                      }t          |j                  }|j                            |           |                     |j	        t          |          |           |                     t          |                     |                     |           t          | |           |j        J |j        S r{   )r}   r~   r   generator_classr&   r   continuation_blocksrh   r   next_label_targetr)   rl   r1   r  rC   send_arg_reg)r`   r  rn   r   clsr8  
next_labels          rp   
emit_yieldr  {  s    ^^C!22!6==F
/
)C JS,--J"":...NN3('**=*=tDDDKKv:&&&1'4@@@'''rr   is_awaitc               x    t          t                    t          t                    t          t                    |rt          nt          }                     ||g          }                     |          t                      t                      t                      }}}                     t                                         g          }	 	                    t          |	||t          j                                                  |                                                     t          g                                           |                                |                                |	           t                      }
                     |
           d fd}d fd}d fd}                     |
|           t%           |d d |fg|                                                                  |                                          S )Nrb   rc   c            	     z                          t                                                               d S rt   )r   r  r   )r`   rn   received_regto_yield_regs   rp   rR  z*emit_yield_from_or_await.<locals>.try_body  s9    |Zl9S9SUY%Z%Z\`aaaaarr   c                    t          t                    }                     t          t          |                     }                    t                                        |g          }t                      t                      }}                    t          |||t          j
                                                 |                               	|            j        d                                                            |                               |            j        d                                        d S r{   )r0   r=   rl   r*   r<   r   r]   r   r&   r'   r0  r  r   r   r"  r  )
r  val_addressto_stopokstopr`   iter_regrn   resultr  s
        rp   r  z-emit_yield_from_or_await.<locals>.except_body  s%    ())kk+.G"M"MNN..!5X8N8NP[7\^bcc<<DF7D"fk::;;; 	r"""|S$/// $11'4@@@ 	t$$$vsD))) $..w=====rr   c                                         t                                                                      g          } t                      t                      }}                    t          | ||t
          j                                                 |                               |            j	        d         
                                                   |                                                    t          g                      j	        d                                        d S r{   )r   r[   r   r&   rl   r'   ra  r  r   r   r"  rW   r  )	_yr  r  r`   r  rn   r  r  r  s	      rp   r  z+emit_yield_from_or_await.<locals>.else_body  s    ^^Ggll8&<&<gll<>X>X%Y[_``<<DF2tR99::: 	r"""|R... $11'4@@@ 	t$$$vw~~mRFFMMM $..w=====rr   r  )r0   r=   rX   rT   r   r  r&   rU   r   rl   r'   ra  r  r   rW   r  r  r  r=  r  )r`   r  rn   r  get_opiter_val
stop_block
main_block
done_block_y_init
loop_blockrR  r  r  r  r  r  r  s   ` `           @@@@rp   emit_yield_from_or_awaitr    sr    '((F-..L-..L -WWgF~~fseT22H--h77H)3z||Z\\J
Jnn[7<<+A+A*BDIIGKKw
JHHIII :&&&NN67>>-TBBDIIILL:&&&NN<$/// Jj)))b b b b b b b b b> > > > > > > > > >*> > > > > > > > > > >$ J
333(dD+-F,GTXYYYj)))<<rr   c                (    t          | ||d          S NTr  )r  )r`   r  rn   s      rp   r  r    s    #GS$FFFFrr   r!   c                    | j         j        r|                     d|j                   |j        r|                     |j                  }n| j                                        }t          | ||j                  S )Nz"async generators are unimplemented)	r   is_coroutinero  rn   rv   rj   r`   r|   r  )r`   rv   r   s      rp   transform_yield_exprr    sm    # G:DIFFFy (	**%%''gvty111rr   r"   c                b    t          | |                     |j                  |j        d          S )NFr  r  rj   rv   rn   r  s     rp   transform_yield_from_exprr    s*    #GW^^AF-C-CQVV[\\\\rr   r   c                b    t          | |                     |j                  |j        d          S r  r  r  s     rp   transform_await_exprr    s*    #GW^^AF-C-CQVVZ[[[[rr   mr   c                L    |                     t          | |                     d S rt   )rj   r_   )r`   r  s     rp   transform_match_stmtr    s$    HH\'1%%&&&&&rr   )r`   r@   ra   r	   rb   rc   )r`   r@   ro   r   rb   rc   )r`   r@   ro   r   rb   rc   )r`   r@   ro   r   rb   rc   )rv   r   rb   r   )r`   r@   ro   r   rb   rc   )r   r   r   r   rb   r   )r`   r@   r   r   rb   rc   )r`   r@   r   r   rb   rc   )r`   r@   r   r   rb   rc   )r`   r@   ro   r   rb   rc   )r`   r@   r  r   rb   rc   )r`   r@   r  r   rb   rc   )r`   r@   r   r
   rb   rc   )r`   r@   r   r   rb   rc   )r`   r@   r  r   rb   rc   )r`   r@   ri   r'  r(  r)  r  r*  rn   r+  rb   rc   )r`   r@   r   r   rb   rc   )r`   r@   rO  r&   rP  r&   rQ  r&   rR  r'  rb   rS  )r`   r@   rO  r&   rP  r&   rQ  r&   rX  r&   rU  rS  rb   r5   )
r`   r@   rX  r&   r[  r'  r5  r5   rb   r\  )r`   r@   r3  r&   r^  rE   r5  r5   rU  rS  rb   r&   )r`   r@   rR  r'  r[  r'  rb   rc   )r`   r@   rb   rq  )r`   r@   rv   r   r   rw  ri   r'  r  r   rn   r+  rb   rc   )r`   r@   r  r    rb   rc   )r`   r@   ry  r   rb   rc   )r`   r@   r  r   rb   rc   )r`   r@   r   rG   rn   r+  rb   rc   )r`   r@   r  r5   rn   r+  rb   r5   )
r`   r@   r  r5   rn   r+  r  r   rb   r5   )r`   r@   rv   r!   rb   r5   )r`   r@   r  r"   rb   r5   )r`   r@   r  r   rb   r5   )r`   r@   r  r   rb   rc   )__doc__
__future__r   importlib.utilr   typingr   r   
mypy.nodesr   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"   mypyc.ir.opsr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   mypyc.ir.rtypesr6   r7   r8   r9   r:   r;   r<   r=   mypyc.irbuild.ast_helpersr>   r?   mypyc.irbuild.builderr@   rA   mypyc.irbuild.for_helpersrB   mypyc.irbuild.generatorrC   mypyc.irbuild.nonlocalcontrolrD   rE   rF   mypyc.irbuild.targetsrG   rH   rI   rJ   rK   mypyc.primitives.exc_opsrL   rM   rN   rO   rP   rQ   rR   rS   mypyc.primitives.generic_opsrT   rU   rV   mypyc.primitives.misc_opsrW   rX   rY   rZ   r[   r\   r]   matchr_   r'  ValueGenFuncrq   ry   r   r   r   r   r   r   r   r  r
  r  r  r   r#  r&  r=  rN  rW  rZ  r_  rg  ri  rp  rv  r  r  r  r  r  r  r  r  r  r  r  r  r   rr   rp   <module>r     s    # " " " " "     % % % % % % % %                                                             >                                         *	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 S R R R R R R R C C C C C C C C 5 5 5 5 5 5 Q Q Q Q Q Q         
             	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 M L L L L L L L L L                        
2t8
E	"# # # #*       H H H H<$ <$ <$ <$~A A A A       2$ $ $ $&C C C CLD D D DD+ + + +! ! ! !$! ! ! !2
 
 
 
? ? ? ?B B B B   R' R' R' R'jE E E E&   *   <* * * *) ) ) )X"& "& "& "&J. . . ..F F F F
Q Q Q Qh
 
 
 
% % % %.O O O O9 9 9 9B   (O  O  O  O dG G G G2 2 2 2] ] ] ]\ \ \ \' ' ' ' ' 'rr   