
    X-Phߔ                    v   d Z ddlmZ ddlZddl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'm(Z(m)Z) ddl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> ddl?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZG dd	lHmIZImJZJ dd
lKmLZLmMZMmNZN ddlOmPZP ddlQmRZR ddlSmTZTmUZUmVZV ddlWmXZXmYZYmZZZm[Z[m\Z\ ddl]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZe ddlfmgZgmhZhmiZi ddljmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZs ddltmuZu eg df         Zveg e>f         ZwddZxddZyddZzdd!Z{dd%Z|dd'Z}dd-Z~dd0Zdd2Zdd4Zdd6Zdd9Zdd;Zdd=Zdd?ZddAZddJZddMZddTZddXZdd\Zdd`ZddaZddbZdddZddhZddkZddnZddpZddrZddtZddvZddwZddyZdd{Zdd}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)Sequence)Callable) 	ARG_NAMEDARG_POS
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TypeAliasStmt	WhileStmtWithStmt	YieldExprYieldFromExpr)NAMESPACE_MODULENO_TRACEBACK_LINE_NOAssign
BasicBlockBranch
InitStaticIntegerLoadAddressLoadErrorValueLoadLiteral
LoadStatic
MethodCallPrimitiveDescription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create_type_params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	import_opsend_op"set_type_alias_compute_function_optype_opyield_from_except_op   )MatchVisitorbuilderrD   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addr3   RUNTIME_ERRORliner8   )rg   rh   stmts      W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypyc/irbuild/statement.pytransform_blockrx   ~   s     #%,,T222J 	 	DNN4   04  	%))+++++ 
 #"02WY^Yc 	
 	
 	

 	KMM"""""# #    rv   r   c                    t          |j        t                    rd S |j                            | j                   |                                  d S N)
isinstanceexprr   rq   visitorflush_keep_alives)rg   rv   s     rw   transform_expression_stmtr      sM    $)W%%  	IW_%%%ry   r   c                   |j         r|                     |j                   }n| j                                        }|                     || j        d         |j                  }| j        d                             | ||j                   d S Nrl   )	r}   rq   rg   nonecoerce	ret_typesru   nonlocal_control
gen_return)rg   rv   retvals      rw   transform_return_stmtr      s{    y (	**%%''^^FG$5b$949EEFR ++GVTYGGGGGry   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          rjt	          j        t,                    rOt          j        j                  t          |j                  k    rt          |          dk    rt          d |j        D                       rt1          d j        j        D                       rt          |j                  }
 fdt3          |
          D             } j                            gd           t#          |j        |          D ]Q\  }}                     t;          |                    }                                          |          ||	           R                                  d S |D ]B}                     |          }                     ||	                                             Cd S )	Nr   c              3  4   K   | ]}t          |          V  d S r{   is_simple_lvalue.0items     rw   	<genexpr>z,transform_assignment_stmt.<locals>.<genexpr>   +      FF4 &&FFFFFFry   re   c              3  4   K   | ]}t          |          V  d S r{   r   r   s     rw   r   z,transform_assignment_stmt.<locals>.<genexpr>   r   ry   c              3  $   K   | ]}|j         V  d S r{   )is_refcounted)r   ts     rw   r   z,transform_assignment_stmt.<locals>.<genexpr>   s$      ??A??????ry   c           	     Z    g | ]'}                     t          |d                     (S )T)borrowrs   r6   )r   irg   
rvalue_regs     rw   
<listcomp>z-transform_assignment_stmt.<locals>.<listcomp>   s4    WWW7;;x
AdCCCDDWWWry   T)steal)lvaluesdisallow_class_assignmentsru   typer|   rvaluer   get_assignment_targetr    r   lenitemsallrq   r4   assignro   zipr   non_function_scopeis_final_definit_final_staticr;   typesanyrangerg   
keep_alivers   r7   )rg   rv   r   first_lvaluetempsrighttempleftassignment_targetru   nborrowslvalue_itemrvalue_itemlvaluetargetr   s   `               @rw   transform_assignment_stmtr      s   lGNNN&&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 ??)>?????  "##WWWWWeTUhhWWW""J<t"<<<(+L,>(H(H 	Z 	Z$K!++h{&;&;<<KNN788EE{TXYYYY!!### $ $..v66vz4000!!####$ $ry   r}   r   boolc                H    t          | t          t          t          f           S r{   )r|   r   r   r    )r}   s    rw   r   r      s    $8Y ?@@@@ry   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   ru   r>   	node_typer   oprF   rB   r   readrq   	binary_opr   r   )rg   rv   r   r   target_valuerregr   ress           rw   "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)))ry   	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       rw   import_globals_id_and_namer     s>      <
$-OOC$8$8$;;
\|##ry   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_typeru   	namespace)is_mypy_onlyis_top_levelload_globals_dictids
gen_importru   r   gen_method_callload_str
get_modulemodule_import_groupsimportsro   r0   rA   r&   rs   r-   r@   r,   r<   rg   setup_rarraycall_cr_   r/   tuplemodule_pathfn_infonamer'   )rg   r   globalsmod_idr   r   r   modulesstatic_ptrs	mod_linesimport_node
mod_staticstatic_array_ptrimport_line_ptrs                 rw   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	
 	    ry   r   c                B   |j         rd S | j        | j                 }| j                            d          r| j        }n|j        |j        r|j        d         }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 )Nz__init__.pyr    r   c                    g | ]\  }}|S  r   )r   r   _s      rw   r   z)transform_import_from.<locals>.<listcomp>i  s    ,,,gdAT,,,ry   c                    g | ]	\  }}|p|
S r   r   )r   r   r   s      rw   r   z)transform_import_from.<locals>.<listcomp>j  s     @@@MD'4@@@ry   r   )r   graphmodule_namer   endswith	ancestors	importlibutilresolve_namerelativeidr   namesrs   r/   r   rA   r   r^   r   r   ru   r+   r&   )
rg   r   module_statemodule_packager  r  as_namesnames_literalas_names_literalmodules
             rw   transform_import_fromr  Z  s    =!45L##M22  ,			+0F	+%/2		$	$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Cry   r   c                X    |j         rd S |                     |j        |j                   d S r{   )r   r   r  ru   rg   r   s     rw   transform_import_allr  |  s2     tw	*****ry   r   c                .   t                      t                      }}|j        rt                      n|}t          |j                  dk    sJ t	          | |j        d         ||           |                     |           |                     |j        d                    |                     |           |j        rD|                     |           |                     |j                   |                     |           |                     |           d S )Nre   r   )	r)   	else_bodyr   r}   rC   activate_blockrq   rp   goto)rg   rv   if_bodynextr  s        rw   transform_if_stmtr    s    LL*,,TG $8
DI ty>>Q1w	BBB7###NN49Q<   LL~ y)))t~&&&T4     ry   sr"   c                   t                      t                      t                      t                      f\  }}}}|j        |n|}|                     ||           |                     |           t	          | |j        ||           |                     |           |                     |j                   | 	                    |           | 
                                 |j        D|                     |           |                     |j                   | 	                    |           |                     |           d S r{   )r)   r  push_loop_stackgoto_and_activaterC   r}   r  rq   rp   r  pop_loop_stack)rg   r  rp   r  top
else_blocknormal_loop_exits          rw   transform_while_stmtr    s%   ",,,
jllJLL"XD$Z%&[%<zz$C&&& c"""/?@@@4   NN16LL{z***q{###T4     ry   r   c           	          d fd}d fd}t           j        j        |j        r|nd j        j                   d S )Nri   rj   c                 <                          j                   d S r{   rq   rp   rg   r  s   rw   rp   z transform_for_stmt.<locals>.body      qvry   c                 N    j         J                      j                    d S r{   )r  rq   r"  s   rw   r  z&transform_for_stmt.<locals>.else_block  s+    {&&&q{#####ry   ri   rj   )rG   indexr}   r  is_asyncru   )rg   r  rp   r  s   ``  rw   transform_for_stmtr(    s          $ $ $ $ $ $ $ !&$ak(K

tQZYZY_    ry   r   c                R    | j         d                             | |j                   d S r   )r   	gen_breakru   r  s     rw   transform_break_stmtr+    s(    R **7DI>>>>>ry   r   c                R    | j         d                             | |j                   d S r   )r   gen_continueru   r  s     rw   transform_continue_stmtr.    s(    R --gtyAAAAAry   r   c                V   |j         D|                     t          g t                     |                     t                                 d S |                     |j                   }|                     t          |g|j                   |                     t                                 d S r{   )	r}   r   rW   r'   rs   r8   rq   rV   ru   )rg   r  excs      rw   transform_raise_stmtr1    s    v~+R1EFFFKMM"""
..
 
 CNN%uaf555KKry   rp   GenFunchandlersLSequence[tuple[tuple[ValueGenFunc, int] | None, Expression | None, GenFunc]]r  GenFunc | Noneru   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 exceptrl   N)r)   rg   push_error_handlerr  r  pop_error_handlerr  maybe_spillr   rQ   r   ro   rI   rR   rs   r*   BOOLr   r   rT   ru   rW   r'   r8   rr   rX   r   rU   )rg   rp   r3  r  ru   except_entry
exit_blockcleanup_blockdouble_except_blockr  old_excr   varhandler_body
next_blocktype_f	type_line
body_blockmatchesr   s                       rw   transform_try_exceptrH    s    ''''''.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   :&&&&&ry   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 )Nri   rj   c                 <                          j                   d S r{   r!  rg   r   s   rw   rp   z'transform_try_except_stmt.<locals>.body#  r#  ry   rp   r   r2  c                      fdS )Nc                 .                                    S r{   rq   rp   rg   s   rw   <lambda>zAtransform_try_except_stmt.<locals>.make_handler.<locals>.<lambda>(  s    w~~d++ ry   r   rO  s   `rw   make_handlerz/transform_try_except_stmt.<locals>.make_handler'  s    ++++++ry   r   r   tuple[ValueGenFunc, int]c                       fd j         fS )Nc                 .                                    S r{   rN  )rg   r   s   rw   rP  z?transform_try_except_stmt.<locals>.make_entry.<locals>.<lambda>+  s    t,, ry   )ru   )r   rg   s   `rw   
make_entryz-transform_try_except_stmt.<locals>.make_entry*  s    ,,,,,di88ry   c                N    g | ]!\  }}}|r |          nd | |          f"S r{   r   )r   r   rA  rp   rU  rQ  s       rw   r   z-transform_try_except_stmt.<locals>.<listcomp>-  sT       D#t "	+D			tS,,t2D2DE  ry   c                 8                          j                  S r{   )rq   r  rK  s   rw   rP  z+transform_try_except_stmt.<locals>.<lambda>1  s    44 ry   r%  )rp   r   ri   r2  )r   r   ri   rR  )r   r   varsr3  r  rH  ru   )rg   r   rp   r3  r  rU  rQ  s   ``   @@rw   transform_try_except_stmtrY  "  s          , , , , , ,9 9 9 9 9 9    "17AFAJ??  H :;N444444$I$)QVDDDDDry   err_handlerr)   return_entry
main_entrytry_body"Register | AssignmentTarget | Nonec                z   t          |          }| j                            |           | j                            |           |                     t                                  |             |                     |           | j                                         | j        	                                 |j
        S r{   )rK   rg   r8  r   ro   r  r)   r  rr   r9  ret_reg)rg   rZ  r[  r\  r]  controls         rw   try_finally_tryrb  5  s     (55GO&&{333##G,,,jll+++HJJJLL  """O%%'''?ry   finally_blockr`  r9   c           
     D   t          t                    }|                     |           |rB|                     ||                     t          | j        d                             d           |                     |           |                     |           |                     t          ||                     t          t                                                   |                     |           |                     |           |rB|                     ||                     t          | j        d                             d           |                     t          || 	                    t          g d                               |                     |           |S r   )r4   r=   r  r   rs   r.   r   r  r(   r   rQ   )rg   rZ  r[  r\  rc  r`  r@  s          rw   try_finally_entry_blocksre  J  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Nry   finally_bodyr@  )tuple[BasicBlock, FinallyNonlocalControl]c                4   t                      }| j                            |           t          | j        d         |          }| j                            |           |                     |            |             | j                                         ||fS r   )r)   rg   r8  rJ   r   ro   r  rr   )rg   rc  rf  r@  r>  finally_controls         rw   try_finally_bodyrj  h  s     LLMO&&}555,W-Eb-I7SSO##O444=)))LNNN  """/))ry   r>  ri  rJ   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.
    rl   )r)   rs   r*   IS_ERRORr  r   rW   r'   r8   rg   r9  r   r   r   r  gen_cleanuprU   )	rg   r>  ri  r@  r`  reraiserestreturn_block	out_blocks	            rw   try_finally_resolve_controlrr  w  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ry   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)   rb  re  rj  rr  r  )rg   r]  rf  rZ  r\  r[  rc  r`  r@  r>  ri  rq  s               rw   transform_try_finally_stmtrt    s     		<8K\= g{L*hWWG 'lJw G
 &6g& &"M?
 ,' I 9%%%%%ry   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 yetri   rj   c                 n    j         rt                      d S                      j                   d S r{   )r3  rY  rq   rp   rK  s   rw   transform_try_bodyz.transform_try_stmt.<locals>.transform_try_body  s=    z ')'155555qv&&&&&ry   c                 .                                    S r{   rN  rO  s   rw   rP  z$transform_try_stmt.<locals>.<lambda>  s    W[H\H\ ry   r%  )is_starerrorru   rf  rt  rY  )rg   r   rw  rp   s   `` @rw   transform_try_stmtr{    s     	y UKQVTTT~ .	' 	' 	' 	' 	' 	' 	' ~"7,>@\@\@\@\@\]]]]]!'1-----ry   list[Value]c                v                           t          g d           fdt          d          D             S )Nrl   c           	     X    g | ]&}                     t          |d                     'S )rl   r   )r   r   rg   exc_infos     rw   r   z$get_sys_exc_info.<locals>.<listcomp>  s1    EEEqGKK1b1122EEEry      )r   rS   r   )rg   r  s   `@rw   get_sys_exc_infor    s<    ~~or266HEEEEEE!HHEEEEry   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__)argsru   exit__r  r   ri   r9   c                   | rt                    }n                                }|||g}rSt          j        t                    sJ                                         
          d d|	t                    }nEJ                                                                       
          g|z   	          }rt          |	          S |S )Nr  r  )
arg_valuesru   r   )
r  none_objectr|   r   r:   r   r   r?   py_call
emit_await)r  r  r   exit_valalrg   exit_r'  	is_nativeru   mgrmgr_vs       rw   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Ory   rj   c                 t    r*                                                                             d S r{   )r   r   )rp   rg   ru   r   values   rw   r]  z transform_with.<locals>.try_body  s?     	ONN788@@%NNNry   c                                                                                    t                      t                      }}                      d          | |                               |                               t          g t                                         t                                                     |            d S )NTr  )
r   falser)   add_bool_branchr  r   rW   r'   rs   r8   )rq  reraise_blockrg   r0  ru   r  s     rw   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)))))ry   c                 0   t                      t                      }}                     t                                        || t          j                                                 |            d                               |            d S )NFr  )r)   rs   r*   r   r;  r  r  )rq  r=  rg   r0  r  s     rw   rf  z$transform_with.<locals>.finally_body)  s     *jll:	F7<<,,j)V[QQRRRz***  %0000!!),,,,,ry   c                 2    t           d d fgd           S r{   )rH  )rg   r  ru   r]  s   rw   rP  z transform_with.<locals>.<lambda>3  s$    $Wh$k9R8SUY[_`` ry   )r  r   ri   r9   r%  )rq   r|   r   r:   rs   r1   primitive_oprc   r:  py_get_attrr  maybe_spill_assignabletruer  rt  )rg   r}   r   rp   r'  ru   typrf  r  r0  r  r  r  r  r  r  r]  r  s   ` ````  @@@@@@@@@@rw   transform_withr    sG    	 bBNN4  E5:y11I aJu.>2.>.>.>RdSSSTT""7UGT::##G$7$7_"___d$S$STT 3 3C9Ib9I9I9I4 P PSXRY[_``


e
$
$C

(
(
8
8C 17E400            2         
* * * * * * * * *- - - - - - - - ```````    ry   or#   c                2     d fd d           d S )Nr   r6  ri   rj   c                      t          j                  k    r                    j                   d S t	          j                  j                   fdj        j                   d S )Nc                        dz             S )Nre   r   )generater   s   rw   rP  z7transform_with_stmt.<locals>.generate.<locals>.<lambda>?  s    !a% ry   )r   r}   rq   rp   r  r   r'  ru   )r   rg   r  r  s   `rw   r  z%transform_with_stmt.<locals>.generate:  sy    AFNN16"""""AHQK1H1H1H1H1H!*VWV\    ry   r   )r   r6  ri   rj   r   )rg   r  r  s   ``@rw   transform_with_stmtr  8  s@            HQKKKKKry   r  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_assertsrq   r}   r)   r  r  msgrs   r3   ASSERTION_ERRORru   r|   r   r  load_module_attr_by_fullnamer  r   rV   r8   )rg   r  condok_blockerror_blockmessageexc_typer0  s           rw   transform_assert_stmtr  E  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$$$$$ry   r   c                b    t          | |                     |j                  |j                   d S r{   )transform_del_itemr   r}   ru   rg   r  s     rw   transform_del_stmtr  \  s,    w = =af E EqvNNNNNry   rL   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)r|   rN   r   baser&  rM   obj_typer:   class_iris_deletableattrrz  noter   r  r[   objrO   rs   r(   registerr.   r   rP   r   r  )rg   r   ru   clkey	subtargets         rw   r  r  `  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{++]VZ,=tDDDDD	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 	9ry   valc                   |                      || j        d         |          }| j        j        }t	                      }t          |j                  }|j                            |           |                     |j	        t          |          |           |                     t          ||                     |                     |           t          | |           |j        J |j        S )Nrl   )yield_target)r   r   r   generator_classr)   r   continuation_blocksro   r   next_label_targetr,   rs   r5   r  rH   send_arg_reg)rg   r  ru   r   clsrC  
next_labels          rw   
emit_yieldr    s    ^^C!22!6==F
/
)C JS,--J"":...NN3('**=*=tDDDKKvJ777888:&&&1'4@@@'''ry   is_awaitc                   t          t                    t          t                    t          t                    |rt          nt          }t	          |t
                    r                     ||g          }n                     ||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 )Nri   rj   c            	     z                          t                                                               d S r{   )r   r  r   )rg   ru   received_regto_yield_regs   rw   r]  z*emit_yield_from_or_await.<locals>.try_body  s9    |Zl9S9SUY%Z%Z\`aaaaary   c                    t          t                    }                     t          t          |                     }                    t                                        |g          }t                      t                      }}                    t          |||t          j
                                                 |                               	|            j        d                                                            |                               |            j        d                                        d S r   )r4   rA   rs   r-   r@   r   rd   r   r)   r*   r;  r  r   r   r-  r*  )
r  val_addressto_stopokstoprg   iter_regru   resultr  s
        rw   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=====ry   c                                         t                                                                      g          } t                      t                      }}                    t          | ||t
          j                                                 |                               |            j	        d         
                                                   |                                                    t          g                      j	        d                                        d S r   )r   ra   r   r)   rs   r*   rl  r  r   r   r-  r\   r*  )	_yr  r  rg   r  ru   r  r  r  s	      rw   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=====ry   r%  )r4   rA   r]   rY   r|   r2   r  r   r  r)   rZ   r   rs   r*   rl  r  r   r\   r  r  r  rH  r  )rg   r  ru   r  get_opiter_val
stop_block
main_block
done_block_y_init
loop_blockr]  r  r  r  r  r  r  s   ` `           @@@@rw   emit_yield_from_or_awaitr    s    '((F-..L-..L -WWgF&.// 7''t<<>>&3%66--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)))<<ry   c                (    t          | ||d          S NTr  )r  )rg   r  ru   s      rw   r  r    s    #GS$FFFFry   r$   c                    | j         j        r|                     d|j                   |j        r|                     |j                  }n| j                                        }t          | ||j                  S )Nz"async generators are unimplemented)	r   is_coroutinerz  ru   r}   rq   rg   r   r  )rg   r}   r   s      rw   transform_yield_exprr    sm    # G:DIFFFy (	**%%''gvty111ry   r%   c                b    t          | |                     |j                  |j        d          S )NFr  r  rq   r}   ru   r  s     rw   transform_yield_from_exprr    s*    #GW^^AF-C-CQVV[\\\\ry   r
   c                b    t          | |                     |j                  |j        d          S r  r  r  s     rw   transform_await_exprr    s*    #GW^^AF-C-CQVVZ[[[[ry   mr   c                L    |                     t          | |                     d S r{   )rq   rf   )rg   r  s     rw   transform_match_stmtr    s$    HH\'1%%&&&&&ry   r!   c                <   |j         }|                     t          |                     d          g|          }t	          | ||j        |j                   }|                     |d|          }|                     |j        j                  |                                 g}d d g}t          t          g}|j        rX|
                    |                     ||                     |
                    d           |
                    t                     |                     |||||          }	|j                            | j                  }
| j                            t&          |	|
g|           |                     |j                  }|                     ||	|           d S )N_typingTypeAliasTypetype_params)	arg_names	arg_kinds)ru   r   r`   r   rE   	type_argsr  r   r   r   ro   	new_tupler   r  r  rq   r~   rg   r  rb   r   r   )rg   r  ru   modr  type_alias_typer  r  r  alias
compute_fnr   s               rw   transform_type_alias_stmtr    so   6D ..W%5%5i%@%@$A4
H
HC$Wc1;GGK))#EEOQV[))7<<>>:D#',I'"I{ $G%%k488999'''###OOOT49XaObbE
 00JO  !CeZEXZ^___**1622FNN65$'''''ry   )rg   rD   rh   r   ri   rj   )rg   rD   rv   r   ri   rj   )rg   rD   rv   r   ri   rj   )rg   rD   rv   r	   ri   rj   )r}   r   ri   r   )rg   rD   rv   r   ri   rj   )r   r   r   r   ri   r   )rg   rD   r   r   ri   rj   )rg   rD   r   r   ri   rj   )rg   rD   r   r   ri   rj   )rg   rD   rv   r   ri   rj   )rg   rD   r  r"   ri   rj   )rg   rD   r  r   ri   rj   )rg   rD   r   r   ri   rj   )rg   rD   r   r   ri   rj   )rg   rD   r  r   ri   rj   )rg   rD   rp   r2  r3  r4  r  r5  ru   r6  ri   rj   )rg   rD   r   r   ri   rj   )rg   rD   rZ  r)   r[  r)   r\  r)   r]  r2  ri   r^  )rg   rD   rZ  r)   r[  r)   r\  r)   rc  r)   r`  r^  ri   r9   )
rg   rD   rc  r)   rf  r2  r@  r9   ri   rg  )rg   rD   r>  r)   ri  rJ   r@  r9   r`  r^  ri   r)   )rg   rD   r]  r2  rf  r2  ri   rj   )rg   rD   ri   r|  )rg   rD   r}   r   r   r  rp   r2  r'  r   ru   r6  ri   rj   )rg   rD   r  r#   ri   rj   )rg   rD   r  r   ri   rj   )rg   rD   r  r   ri   rj   )rg   rD   r   rL   ru   r6  ri   rj   )rg   rD   r  r9   ru   r6  ri   r9   )
rg   rD   r  r9   ru   r6  r  r   ri   r9   )rg   rD   r}   r$   ri   r9   )rg   rD   r  r%   ri   r9   )rg   rD   r  r
   ri   r9   )rg   rD   r  r   ri   rj   )rg   rD   r  r!   ri   rj   )__doc__
__future__r   importlib.utilr   collections.abcr   typingr   
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"   r#   r$   r%   mypyc.ir.opsr&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   mypyc.ir.rtypesr:   r;   r<   r=   r>   r?   r@   rA   mypyc.irbuild.ast_helpersrB   rC   mypyc.irbuild.builderrD   rE   rF   mypyc.irbuild.for_helpersrG   mypyc.irbuild.generatorrH   mypyc.irbuild.nonlocalcontrolrI   rJ   rK   mypyc.irbuild.targetsrL   rM   rN   rO   rP   mypyc.primitives.exc_opsrQ   rR   rS   rT   rU   rV   rW   rX   mypyc.primitives.generic_opsrY   rZ   r[   mypyc.primitives.misc_opsr\   r]   r^   r_   r`   ra   rb   rc   rd   matchrf   r2  ValueGenFuncrx   r   r   r   r   r   r   r   r  r  r  r  r(  r+  r.  r1  rH  rY  rb  re  rj  rr  rt  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   ry   rw   <module>r     s#    # " " " " "     $ $ $ $ $ $      ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !D                                           ,	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 S R R R R R R R W W W W W W W W W W 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   (R  R  R  R jG G G G2 2 2 2] ] ] ]\ \ \ \' ' ' '( ( ( ( ( (ry   