o
    tBh|                     @  s6  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$ ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z:m;Z; dd	l<m=Z=m>Z> dd
l?m@Z@ ddlAmBZB ddlCmDZDmEZEmFZF ddlGmHZHmIZImJZJmKZKmLZL ddlMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZU ddlVmWZWmXZXmYZY ddlZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z` eg df Zaeg e2f ZbdddZcdddZddddZedd!d"Zfdd&d'Zgdd)d*Zhdd-d.Zidd0d1Zjdd3d4Zkdd6d7Zldd:d;Zmdd=d>Zndd@dAZoddCdDZpddFdGZqddPdQZrddTdUZsdd\d]ZtddadbZuddfdgZvddkdlZwddmdnZxddodpZyddrdsZzddwdxZ{dd{d|Z|dddZ}dddZ~dddZdddZdddZdddZdddZdddZddd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OperatorAssignmentStmt	RaiseStmt
ReturnStmtStarExprStrExprTempNodeTryStmt	TupleExpr	WhileStmtWithStmt	YieldExprYieldFromExpr)NO_TRACEBACK_LINE_NOAssign
BasicBlockBranchIntegerLoadAddressLoadErrorValueRaiseStandardErrorRegisterReturnTupleGetUnreachableValue)	RInstance
exc_rtuple	is_tagged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_opsend_optype_opyield_from_except_opbuilderr5   blockr   returnNonec                 C  sP   |j s|jD ]}| | qd S |jr&| ttjd|j | t  d S d S )Nz#Reached allegedly unreachable code!)is_unreachablebodyacceptaddr(   RUNTIME_ERRORliner,   )rR   rS   stmt r]   n/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypyc/irbuild/statement.pytransform_blockj   s   

r_   r\   r   c                 C  s*   t |jtrd S |j| j |   d S N)
isinstanceexprr   rX   visitorflush_keep_alives)rR   r\   r]   r]   r^   transform_expression_stmtz   s   re   r   c                 C  sN   |j r
| |j }n| j }| || jd |j}| jd | ||j d S N)	rb   rX   rR   nonecoerce	ret_typesr[   nonlocal_control
gen_return)rR   r\   retvalr]   r]   r^   transform_return_stmt   s
   
rn   r   c                 C  s|  |j }t|dksJ | ||j |d }|jr(t|jtr(| ||j d S t|t	t
frt|jt	t
frt|jt|jjkrtdd |jD rt|dkrg }|jjD ]}| |}t|j}| |||j || qXt|j|D ]\}}| |}	| |	||j qx|   d S |jj}
| |j}|  r|jr| || |D ]}| |}| |||
 |   qd S )N   r   c                 s  s    | ]}t |V  qd S r`   )is_simple_lvalue).0itemr]   r]   r^   	<genexpr>   s    z,transform_assignment_stmt.<locals>.<genexpr>)lvalueslendisallow_class_assignmentsr[   typera   rvaluer   get_assignment_targetr   r   itemsallrX   r)   assignappendziprd   non_function_scopeis_final_definit_final_static)rR   r\   rt   first_lvaluetempsright
rvalue_regtempleftassignment_targetr[   lvaluetargetr]   r]   r^   transform_assignment_stmt   sF   




r   rb   r   boolc                 C  s   t | tttf S r`   )ra   r   r   r   )rb   r]   r]   r^   rp      s   rp   r   c                 C  s   |  |jg|j t| |jr+t| |jr+|jtv r+t| |jo)t| |j}nd}| 	|j}| j
||j|d}| j|j|d}|jd }| ||||j}| |||j |   dS )z,Operator assignment statement such as x += 1F)
can_borrow=N)rv   r   r[   r0   	node_typerx   opr6   r3   ry   readrX   	binary_opr|   rd   )rR   r\   r   r   target_valuerregr   resr]   r]   r^   "transform_operator_assignment_stmt   s"   

r   noder   c                 C  s   |j rd S |  }|jD ]2\}}| ||j |r|}|}n	|dd  }}| ||j}| j|d| ||gd |jd qd S )N.r   __setitem__result_typer[   )	is_mypy_onlyload_globals_dictids
gen_importr[   split
get_modulegen_method_callload_str)rR   r   globalsnode_idas_namenamebaseobjr]   r]   r^   transform_import   s   r   r   c              
   C  s   |j rd S | j| j }|jd ur|jr|jd }n| jdr#| j}nd}tjd|j	 |j
 |}|  }dd |jD }| ||||j}|jD ]-\}}	|	pQ|}
| t|| || || |
g|j}| j|d| |
|gd |jd qJd S )	Nr   z__init__.py r   c                 S  s   g | ]\}}|qS r]   r]   )rq   r   _r]   r]   r^   
<listcomp>  s    z)transform_import_from.<locals>.<listcomp>r   r   )r   graphmodule_name	ancestorsmodule_pathendswith	importlibutilresolve_namerelativeidr   namesgen_import_fromr[   call_crN   r   r   )rR   r   module_statemodule_packager   r   imported_namesmoduler   maybe_as_namer   r   r]   r]   r^   transform_import_from   s6   r   r   c                 C  s   |j rd S | |j|j d S r`   )r   r   r   r[   rR   r   r]   r]   r^   transform_import_all  s   r   r   c                 C  s   t  t  }}|jrt  n|}t|jdksJ t| |jd || | | | |jd  | | |jrG| | | |j | | | | d S )Nro   r   )	r#   	else_bodyru   rb   r4   activate_blockrX   rW   goto)rR   r\   if_bodynextr   r]   r]   r^   transform_if_stmt  s   



r   sr   c                 C  s   t  t  t  t  f\}}}}|jd ur|n|}| || | | t| |j|| | | | |j | 	| | 
  |jd urS| | | |j | 	| | | d S r`   )r#   r   push_loop_stackgoto_and_activater4   rb   r   rX   rW   r   pop_loop_stack)rR   r   rW   r   top
else_blocknormal_loop_exitr]   r]   r^   transform_while_stmt1  s   





r   r   c                   sJ   d fdd}d fdd}t  jj|jr|nd jj d S )NrT   rU   c                          j d S r`   rX   rW   r]   rR   r   r]   r^   rW   K     z transform_for_stmt.<locals>.bodyc                     s   j d usJ  j  d S r`   )r   rX   r]   r   r]   r^   r   N  s   z&transform_for_stmt.<locals>.else_blockrT   rU   )r7   indexrb   r   is_asyncr[   )rR   r   rW   r   r]   r   r^   transform_for_stmtJ  s
    r   r	   c                 C     | j d | |j d S rf   )rk   	gen_breakr[   r   r]   r]   r^   transform_break_stmtW     r   r
   c                 C  r   rf   )rk   gen_continuer[   r   r]   r]   r^   transform_continue_stmt[  r   r   r   c                 C  sV   |j d u r| tg t | t  d S | |j }| t|g|j | t  d S r`   )	rb   r   rG   r!   rY   r,   rX   rF   r[   )rR   r   excr]   r]   r^   transform_raise_stmt_  s   
r   rW   GenFunchandlersLSequence[tuple[tuple[ValueGenFunc, int] | None, Expression | None, GenFunc]]r   GenFunc | Noner[   intc              	   C  s  |sJ dt  t  t  }}}t  }|rt  n|}	| j| | t   |  | |	 | j  | j| | | | | t	g |}
| j
t| j
d |
 |D ]Q\}}}d}|r|\}}t  t  }}| t| g|}| t|||tj | | |r| |}| || tg |j|j |  | | |r| | qW|r| tg t | t  | j
  | j  | | | t| |
g| | | | | | t| |
g| | tg t | t  |r| |	 |  | | | | 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 exceptrg   N)r#   rR   push_error_handlerr   r   pop_error_handlerr   maybe_spillr   rA   rk   r}   r9   rB   rY   r$   BOOLry   r|   rD   r[   rG   r!   r,   poprH   r   rE   )rR   rW   r   r   r[   except_entry
exit_blockcleanup_blockdouble_except_blockr   old_excrw   varhandler_body
next_blocktype_f	type_line
body_blockmatchesr   r]   r]   r^   transform_try_exceptj  s\   














r   tr   c                   s|   d fdd}d fdd	d fddfddt jjjD }jr1 fddnd }t |||j d S )NrT   rU   c                     r   r`   r   r]   rR   r   r]   r^   rW     r   z'transform_try_except_stmt.<locals>.bodyrW   r   r   c                   s    fddS )Nc                     
     S r`   rX   r]   rW   rR   r]   r^   <lambda>     
 zAtransform_try_except_stmt.<locals>.make_handler.<locals>.<lambda>r]   rW   rR   r   r^   make_handler  s   z/transform_try_except_stmt.<locals>.make_handlerrw   r   tuple[ValueGenFunc, int]c                   s    fdd j fS )Nc                     s
     S r`   r   r]   )rR   rw   r]   r^   r     r   z?transform_try_except_stmt.<locals>.make_entry.<locals>.<lambda>)r[   rw   r   r  r^   
make_entry  s   z-transform_try_except_stmt.<locals>.make_entryc                   s,   g | ]\}}}|r |nd ||fqS r`   r]   )rq   rw   r   rW   )r  r  r]   r^   r     s    z-transform_try_except_stmt.<locals>.<listcomp>c                     s     jS r`   )rX   r   r]   r   r]   r^   r         z+transform_try_except_stmt.<locals>.<lambda>r   )rW   r   rT   r   )rw   r   rT   r  )r~   typesvarsr   r   r   r[   )rR   r   rW   r   r   r]   )rR   r  r  r   r^   transform_try_except_stmt  s   r  err_handlerr#   return_entry
main_entrytry_body"Register | AssignmentTarget | Nonec                 C  sV   t |}| j| | j| | t  |  | | | j  | j	  |j
S r`   )r;   rR   r   rk   r}   r   r#   r   r   r   ret_reg)rR   r	  r
  r  r  controlr]   r]   r^   try_finally_try  s   


r  finally_blockr  r-   c              	   C  s   t t}| | |r| || t| jd d | | | | | t|| tt | | | | |rL| || t| jd d | t|| 	t
g d | | |S rf   )r)   r/   r   r|   rY   r'   rj   r   r"   r   rA   )rR   r	  r
  r  r  r  r   r]   r]   r^   try_finally_entry_blocks  s   





r  finally_bodyr   )tuple[BasicBlock, FinallyNonlocalControl]c                 C  sP   t  }| j| t| jd |}| j| | | |  | j  ||fS rf   )r#   rR   r   r:   rk   r}   r   r   )rR   r  r  r   r   finally_controlr]   r]   r^   try_finally_body  s   

r  r   r  r:   c           	      C  s   t  t  }}| t|||tj | | | tg t | t  | j	
  |rW| | 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.
    rg   )r#   rY   r$   IS_ERRORr   r   rG   r!   r,   rR   r   r   rk   rl   r   gen_cleanuprE   )	rR   r   r  r   r  reraiserestreturn_block	out_blockr]   r]   r^   try_finally_resolve_control  s(   






r  c                 C  sn   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#   r  r  r  r  r   )rR   r  r  r	  r  r
  r  r  r   r   r  r  r]   r]   r^   transform_try_finally_stmt@  s    

r  c                   sD   j rdfdd}j  t| fdd d S t d S )NrT   rU   c                     s$   j r
t  d S  j d S r`   )r   r  rX   rW   r]   r   r]   r^   transform_try_bodym  s   z.transform_try_stmt.<locals>.transform_try_bodyc                     r   r`   r   r]   r   r]   r^   r   u  r   z$transform_try_stmt.<locals>.<lambda>r   )r  r  r  )rR   r   r  r]   )rW   rR   r   r^   transform_try_stmte  s
   r   list[Value]c                   s&     tg d fddtdD S )Nrg   c                   s   g | ]}  t|d qS )rg   )rY   r+   )rq   irR   exc_infor]   r^   r   |  s    z$get_sys_exc_info.<locals>.<listcomp>   )r   rC   ranger   r]   r#  r^   get_sys_exc_infoz  s   r'  r   Lvalue | Noner   c           
        s   rdnd} |}t|g}|d| d|d| d|g
| rFt

d 
fdd		dfd
ddfdd}	t		fdd|	 d S )Nar   __exit__enter__rT   rU   c                     s"   r     d S r`   )r|   ry   r]   )rW   rR   r[   r   valuer]   r^   r    s   
z transform_with.<locals>.try_bodyc                    s        t t } }   gt  }r*t |} || |  |  	t
g t  t   |  d S r`   )r|   falser#   py_callr   r'  
emit_awaitadd_bool_branchr   r   rG   r!   rY   r,   )r  reraise_blockexit_valrR   r   exit_r   r[   mgrr]   r^   except_body  s   
z#transform_with.<locals>.except_bodyc                    s|   t  t  } } t || tj  |   }   |||g}r7t |  	|  d S r`   )
r#   rY   r$   r   r   r   none_objectr/  r0  r   )r  r   rh   r3  r4  r]   r^   r    s   
z$transform_with.<locals>.finally_bodyc                     s   t  d d fgd S r`   )r   r]   )rR   r7  r[   r  r]   r^   r     s    z transform_with.<locals>.<lambda>r   )
rX   r   rP   r   py_get_attrr/  maybe_spill_assignabletruer0  r  )
rR   rb   r   rW   r   r[   almgr_vtypr  r]   )rW   rR   r   r7  r5  r   r[   r6  r   r  r-  r^   transform_with  s"   
"
r?  or   c                   s   d fddd d S )	Nr"  r   rT   rU   c                   sN    t jkrj d S tj  j   fddjj d S )Nc                     s    d S )Nro   r]   r]   )generater"  r]   r^   r     r  z7transform_with_stmt.<locals>.generate.<locals>.<lambda>)ru   rb   rX   rW   r?  r   r   r[   r"  rR   rA  r@  rB  r^   rA    s
   &z%transform_with_stmt.<locals>.generater   )r"  r   rT   rU   r]   rR   r@  r]   rC  r^   transform_with_stmt  s   rE  r)  r   c                 C  s   | j jrd S | |j}t t }}| ||| | | |jd u r0| t	t	j
d |j n3t|jtrD| t	t	j
|jj|j n| |j}| d|j}| ||g|j}| t|g|j | t  | | d S )Nzbuiltins.AssertionError)optionsstrip_assertsrX   rb   r#   r1  r   msgrY   r(   ASSERTION_ERRORr[   ra   r   r-  load_module_attr_by_fullnamer/  r   rF   r,   )rR   r)  condok_blockerror_blockmessageexc_typer   r]   r]   r^   transform_assert_stmt  s    

rP  r   c                 C  s   t | | |j|j d S r`   )transform_del_itemry   rb   r[   rD  r]   r]   r^   transform_del_stmt     rR  r<   c              
   C  s   t |tr| j|jd|jgd |d d S t |trLt |jtr:|jj}|	|j
s:| d|j
 d| | d| | |j
}| t|j|g| d S t |trd| t|j| t|jdd d S t |tru|jD ]
}t| || qld S d S )N__delitem__r   "z" cannot be deletedzMUsing "__deletable__ = ['<attr>']" in the class body enables "del obj.<attr>"T)	undefines)ra   r>   r   r   r   r=   obj_typer.   class_iris_deletableattrerrornoter   r   rK   r   r?   rY   r"   registerr'   rw   r@   rz   rQ  )rR   r   r[   clkey	subtargetr]   r]   r^   rQ    s0   





rQ  valc                 C  s   |  || jd |}| jj}t }t|j}|j| | |j	t
|| | t| | | t| | |jd us>J |jS rf   )ri   rj   fn_infogenerator_classr#   ru   continuation_blocksr}   r|   next_label_targetr%   rY   r*   r   r8   send_arg_reg)rR   ra  r[   rm   clsr   
next_labelr]   r]   r^   
emit_yield  s   


ri  is_awaitc                  sV  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}d	 fdd}d	 fdd} |
| t |d d |fg|     |  S )
NrT   rU   c                     s      t   d S r`   )r|   ri  r   r]   )rR   r[   received_regto_yield_regr]   r^   r  <  s    z*emit_yield_from_or_await.<locals>.try_bodyc                    s   t t}  tt| } t |g}t t }} t	|||t	j
  |  |   jd    |  |   jd   d S rf   )r)   r2   rY   r&   r1   r   rQ   r   r#   r$   r   r   r|   rk   r   r   )ra  val_addressto_stopokstop)rR   iter_regr[   resultrl  r]   r^   r7  ?  s   

z-emit_yield_from_or_await.<locals>.except_bodyc                    s     t  g} t t }} t| ||tj  |  |   j	d 
   |    tg   j	d   d S rf   )r   rO   r   r#   rY   r$   r  r   r|   rk   r   rL   r   )_yro  rp  rR   rq  r[   rk  rr  rl  r]   r^   r   T  s   

z+emit_yield_from_or_await.<locals>.else_bodyr   )r)   r2   rM   rI   r   r:  r#   rJ   r   rY   r$   r  r   r|   rL   r   r   r   r   r   )rR   ra  r[   rj  get_opiter_val
stop_block
main_block
done_block_y_init
loop_blockr  r7  r   r]   rt  r^   emit_yield_from_or_await  s0   






r|  c                 C  s   t | ||ddS NTrj  )r|  )rR   ra  r[   r]   r]   r^   r0  n  r   r0  r   c                 C  sB   | j jr| d|j |jr| |j}n| j }t| ||jS )Nz"async generators are unimplemented)	rb  is_coroutiner[  r[   rb   rX   rR   rh   ri  )rR   rb   rm   r]   r]   r^   transform_yield_exprr  s   
r  r    c                 C     t | | |j|jddS )NFr~  r|  rX   rb   r[   rD  r]   r]   r^   transform_yield_from_expr}  rS  r  r   c                 C  r  r}  r  rD  r]   r]   r^   transform_await_expr  rS  r  )rR   r5   rS   r   rT   rU   )rR   r5   r\   r   rT   rU   )rR   r5   r\   r   rT   rU   )rR   r5   r\   r   rT   rU   )rb   r   rT   r   )rR   r5   r\   r   rT   rU   )rR   r5   r   r   rT   rU   )rR   r5   r   r   rT   rU   )rR   r5   r   r   rT   rU   )rR   r5   r\   r   rT   rU   )rR   r5   r   r   rT   rU   )rR   r5   r   r   rT   rU   )rR   r5   r   r	   rT   rU   )rR   r5   r   r
   rT   rU   )rR   r5   r   r   rT   rU   )rR   r5   rW   r   r   r   r   r   r[   r   rT   rU   )rR   r5   r   r   rT   rU   )rR   r5   r	  r#   r
  r#   r  r#   r  r   rT   r  )rR   r5   r	  r#   r
  r#   r  r#   r  r#   r  r  rT   r-   )
rR   r5   r  r#   r  r   r   r-   rT   r  )rR   r5   r   r#   r  r:   r   r-   r  r  rT   r#   )rR   r5   r  r   r  r   rT   rU   )rR   r5   rT   r!  )rR   r5   rb   r   r   r(  rW   r   r   r   r[   r   rT   rU   )rR   r5   r@  r   rT   rU   )rR   r5   r)  r   rT   rU   )rR   r5   r@  r   rT   rU   )rR   r5   r   r<   r[   r   rT   rU   )rR   r5   ra  r-   r[   r   rT   r-   )
rR   r5   ra  r-   r[   r   rj  r   rT   r-   )rR   r5   rb   r   rT   r-   )rR   r5   r@  r    rT   r-   )rR   r5   r@  r   rT   r-   )__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    mypyc.ir.opsr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   mypyc.ir.rtypesr.   r/   r0   r1   r2   mypyc.irbuild.ast_helpersr3   r4   mypyc.irbuild.builderr5   r6   mypyc.irbuild.for_helpersr7   mypyc.irbuild.generatorr8   mypyc.irbuild.nonlocalcontrolr9   r:   r;   mypyc.irbuild.targetsr<   r=   r>   r?   r@   mypyc.primitives.exc_opsrA   rB   rC   rD   rE   rF   rG   rH   mypyc.primitives.generic_opsrI   rJ   rK   mypyc.primitives.misc_opsrL   rM   rN   rO   rP   rQ   r   ValueGenFuncr_   re   rn   r   rp   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r   r'  r?  rE  rP  rR  rQ  ri  r|  r0  r  r  r  r]   r]   r]   r^   <module>   sj    x<(
 	




	
*



&







U




,
%


@



!

R

