Ë
    pPêjN!  ã                  ó^  — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZ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 ddlmZmZ erdd	lmZ  G d
„ d«      Z G d„ de«      Z G d„ de«      Z  G d„ de«      Z!dd„Z"dd„Z# G d„ de«      Z$ G d„ de«      Z% G d„ de$«      Z& G d„ de$«      Z'y)zƒHelpers for dealing with nonlocal control such as 'break' and 'return'.

Model how these behave differently in different contexts.
é    )Úannotations)Úabstractmethod)ÚTYPE_CHECKING)ÚClassIR)Ú	ERR_NEVERÚNO_TRACEBACK_LINE_NOÚAssignÚ
BasicBlockÚBranchÚCallÚGotoÚIntegerÚRegisterÚReturnÚSetMemÚUnreachableÚValue)Úobject_rprimitive)Úrestore_exc_info_opÚset_stop_iteration_value)Ú	IRBuilderc                  óF   — e Zd ZdZedd„«       Zedd„«       Zedd„«       Zy)ÚNonlocalControla  ABC representing a stack frame of constructs that modify nonlocal control flow.

    The nonlocal control flow constructs are break, continue, and
    return, and their behavior is modified by a number of other
    constructs.  The most obvious is loop, which override where break
    and continue jump to, but also `except` (which needs to clear
    exc_info when left) and (eventually) finally blocks (which need to
    ensure that the finally block is always executed when leaving the
    try/except blocks).
    c                 ó   — y ©N© ©ÚselfÚbuilderÚlines      úb/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypyc/irbuild/nonlocalcontrol.pyÚ	gen_breakzNonlocalControl.gen_break.   ó   € àó    c                 ó   — y r   r   r   s      r!   Úgen_continuezNonlocalControl.gen_continue2   r#   r$   c                 ó   — y r   r   ©r   r   Úvaluer    s       r!   Ú
gen_returnzNonlocalControl.gen_return6   r#   r$   N©r   r   r    ÚintÚreturnÚNone©r   r   r)   r   r    r,   r-   r.   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   r&   r*   r   r$   r!   r   r   "   sC   „ ñ	ð òó ðð òó ðð òó ñr$   r   c                  ó(   — e Zd ZdZdd„Zdd„Zdd„Zy)ÚBaseNonlocalControlz?Default nonlocal control outside any statements that affect it.c                ó   — J d«       ‚)Nzbreak outside of loopr   r   s      r!   r"   zBaseNonlocalControl.gen_break>   s   € Ø-Ð-Ó-ˆur$   c                ó   — J d«       ‚)Nzcontinue outside of loopr   r   s      r!   r&   z BaseNonlocalControl.gen_continueA   s   € Ø0Ð0Ó0ˆur$   c                ó:   — |j                  t        ||«      «       y r   )Úaddr   r(   s       r!   r*   zBaseNonlocalControl.gen_returnD   s   € Ø�‰”F˜5 $Ó'Õ(r$   Nr+   r/   )r0   r1   r2   r3   r"   r&   r*   r   r$   r!   r5   r5   ;   s   „ ÙIó.ó1ô)r$   r5   c                  ó@   — e Zd ZdZ	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zd	d„Zy)
ÚLoopNonlocalControlzNonlocal control within a loop.c                ó.   — || _         || _        || _        y r   )ÚouterÚcontinue_blockÚbreak_block)r   r=   r>   r?   s       r!   Ú__init__zLoopNonlocalControl.__init__K   s   € ð ˆŒ
Ø,ˆÔØ&ˆÕr$   c                óL   — |j                  t        | j                  «      «       y r   )r9   r   r?   r   s      r!   r"   zLoopNonlocalControl.gen_breakR   s   € Ø�‰”D˜×)Ñ)Ó*Õ+r$   c                óL   — |j                  t        | j                  «      «       y r   )r9   r   r>   r   s      r!   r&   z LoopNonlocalControl.gen_continueU   s   € Ø�‰”D˜×,Ñ,Ó-Õ.r$   c                ó>   — | j                   j                  |||«       y r   )r=   r*   r(   s       r!   r*   zLoopNonlocalControl.gen_returnX   s   € Ø�
‰
×Ñ˜g u¨dÕ3r$   N)r=   r   r>   r
   r?   r
   r-   r.   r+   r/   ©r0   r1   r2   r3   r@   r"   r&   r*   r   r$   r!   r;   r;   H   s9   „ Ù)ð'Ø$ð'Ø6@ð'ØOYð'à	ó'ó,ó/ô4r$   r;   c                  ó   — e Zd ZdZdd„Zy)ÚGeneratorNonlocalControlzDDefault nonlocal control in a generator function outside statements.c                ó  — t        |j                  «      }|j                  t        |||«      «       t	        ||«       |j
                  j                  d «       |j                  t        «       «       t        «       t        «       }}|j                  j                  j                  }|€J ‚|j                  t        |||t        j                  «      «       |j                  |«       |j                  t         |gt"        «       |j                  t%        «       «       |j
                  j'                  «        |j                  |«       |j                  t)        t*        ||«      «       |j                  t-        t/        dt*        «      «      «       y )Nr   )r   Útyper9   r	   Úgen_generator_func_cleanupr   Úpush_error_handlerÚgoto_and_activater
   Úfn_infoÚgenerator_classÚstop_iter_value_regr   ÚIS_ERRORÚactivate_blockÚcall_cr   r   r   Úpop_error_handlerr   r   r   r   )r   r   r)   r    ÚresultÚtrueÚfalseÚstop_iter_regs           r!   r*   z#GeneratorNonlocalControl.gen_return_   s!  € ô ˜%Ÿ*™*Ó%ˆØ�‰”F˜6 5¨$Ó/Ô0ä" 7¨DÔ1ð 	�‰×*Ñ*¨4Ô0Ø×!Ñ!¤*£,Ô/ô !“l¤J£LˆeˆØŸ™×7Ñ7×KÑKˆØÐ(Ð(Ð(à�‰”F˜=¨$°´v·±ÓGÔHà×Ñ˜tÔ$ð 	�‰Ô/°&°Ô;OÔPØ�‰”K“MÔ"Ø�‰×)Ñ)Ô+à×Ñ˜uÔ%ð 	�‰”FÔ,¨m¸VÓDÔEØ�‰”Fœ7 1Ô&7Ó8Ó9Õ:r$   Nr/   )r0   r1   r2   r3   r*   r   r$   r!   rF   rF   \   s
   „ ÙNô*;r$   rF   c                ól   — t        |j                  |g|«      }t        |_        | j	                  |«       y r   )r   Úclear_on_completionr   Ú
error_kindr9   )r   ÚobjÚclr    Úcalls        r!   Úgen_class_clear_on_completionr]   Œ   s+   € Ü�×&Ñ&¨¨¨tÓ4€DÜ€D„OØ‡K�K�Õr$   c                ó^  — | j                   j                  }| j                  |j                  t	        d«      |«       t        | |j                  | j                   j                  |«       | j                   j                  |j                  ur#t        | |j                  |j                  |«       yy)z<Clear references held by a completed generator or coroutine.éÿÿÿÿN)
rL   rM   ÚassignÚnext_label_targetr   r]   Úcurr_env_regÚ	env_classÚirÚself_reg)r   r    Úclss      r!   rI   rI   ’   s}   € à
�/‰/×
)Ñ
)€Cð ‡N�N�3×(Ñ(¬'°"«+°tÔ<ä! '¨3×+;Ñ+;¸W¿_¹_×=VÑ=VÐX\Ô]Ø‡�× Ñ ¨¯©Ñ.Ü% g¨s¯|©|¸S¿V¹VÀTÕJð /r$   c                  óB   — e Zd ZdZdd„Zed	d„«       Zd	d„Zd	d„Zd
d„Z	y)ÚCleanupNonlocalControlz6Abstract nonlocal control that runs some cleanup code.c                ó   — || _         y r   )r=   )r   r=   s     r!   r@   zCleanupNonlocalControl.__init__¢   s	   € Øˆ�
r$   c                 ó   — y r   r   r   s      r!   Úgen_cleanupz"CleanupNonlocalControl.gen_cleanup¥   s   € ØBEr$   c                ó`   — | j                  ||«       | j                  j                  ||«       y r   )rk   r=   r"   r   s      r!   r"   z CleanupNonlocalControl.gen_break¨   s&   € Ø×Ñ˜ $Ô'Ø�
‰
×Ñ˜W dÕ+r$   c                ó`   — | j                  ||«       | j                  j                  ||«       y r   )rk   r=   r&   r   s      r!   r&   z#CleanupNonlocalControl.gen_continue¬   s&   € Ø×Ñ˜ $Ô'Ø�
‰
×Ñ ¨Õ.r$   c                ób   — | j                  ||«       | j                  j                  |||«       y r   )rk   r=   r*   r(   s       r!   r*   z!CleanupNonlocalControl.gen_return°   s(   € Ø×Ñ˜ $Ô'Ø�
‰
×Ñ˜g u¨dÕ3r$   N)r=   r   r-   r.   r+   r/   )
r0   r1   r2   r3   r@   r   rk   r"   r&   r*   r   r$   r!   rh   rh   Ÿ   s)   „ Ù@óð ÚEó ØEó,ó/ô4r$   rh   c                  ó0   — e Zd ZdZdd„Zdd„Zdd„Zd	d„Zy)
ÚTryFinallyNonlocalControlz$Nonlocal control within try/finally.c                ó    — || _         d | _        y r   )ÚtargetÚret_reg)r   rr   s     r!   r@   z"TryFinallyNonlocalControl.__init__¸   s   € ØˆŒØ(,ˆ�r$   c                ó(   — |j                  d|«       y )Nz/break inside try/finally block is unimplemented©Úerrorr   s      r!   r"   z#TryFinallyNonlocalControl.gen_break¼   s   € Ø�‰ÐGÈÕNr$   c                ó(   — |j                  d|«       y )Nz2continue inside try/finally block is unimplementedru   r   s      r!   r&   z&TryFinallyNonlocalControl.gen_continue¿   s   € Ø�‰ÐJÈDÕQr$   c                óØ   — | j                   €t        |j                  d   «      | _         |j                  | j                   ||«       |j	                  t        | j                  «      «       y )Nr_   )rs   r   Ú	ret_typesr`   r9   r   rr   r(   s       r!   r*   z$TryFinallyNonlocalControl.gen_returnÂ   sL   € Ø�<‰<ÐÜ# G×$5Ñ$5°bÑ$9Ó:ˆDŒLØ�‰�t—|‘| U¨DÔ1à�‰”D˜Ÿ™Ó%Õ&r$   N)rr   r
   r-   r.   r+   r/   rD   r   r$   r!   rp   rp   µ   s   „ Ù.ó-óOóRô'r$   rp   c                  ó,   ‡ — e Zd ZdZdˆ fd„Zdd„Zˆ xZS )ÚExceptNonlocalControlz�Nonlocal control for except blocks.

    Just makes sure that sys.exc_info always gets restored when we leave.
    This is super annoying.
    c                ó2   •— t         ‰| �  |«       || _        y r   ©Úsuperr@   Úsaved©r   r=   r   Ú	__class__s      €r!   r@   zExceptNonlocalControl.__init__Ñ   ó   ø€ Ü‰Ñ˜ÔØˆ�
r$   c                óh   — |j                  t        |j                  | j                  |«      g|«       y r   )rQ   r   Úreadr   r   s      r!   rk   z!ExceptNonlocalControl.gen_cleanupÕ   s%   € Ø�‰Ô*¨W¯\©\¸$¿*¹*ÀdÓ-KÐ,LÈdÕSr$   ©r=   r   r   r   r-   r.   r+   ©r0   r1   r2   r3   r@   rk   Ú__classcell__©r�   s   @r!   r{   r{   Ê   s   ø„ ñõ÷Tr$   r{   c                  ó,   ‡ — e Zd ZdZdˆ fd„Zdd„Zˆ xZS )ÚFinallyNonlocalControlz­Nonlocal control for finally blocks.

    Just makes sure that sys.exc_info always gets restored when we
    leave and the return register is decrefed if it isn't null.
    c                ó2   •— t         ‰| �  |«       || _        y r   r}   r€   s      €r!   r@   zFinallyNonlocalControl.__init__à   r‚   r$   c                ó  — t        «       t        «       }}|j                  t        | j                  ||t        j                  «      «       |j                  |«       |j                  t        | j                  g|«       |j                  |«       y r   )	r
   r9   r   r   rO   rP   rQ   r   rK   )r   r   r    rr   Úcleanups        r!   rk   z"FinallyNonlocalControl.gen_cleanupä   sa   € ä$›,¬
«�ˆØ�‰”F˜4Ÿ:™: v¨w¼¿¹ÓHÔIØ×Ñ˜wÔ'Ø�‰Ô*¨T¯Z©Z¨L¸$Ô?Ø×!Ñ! &Õ)r$   r…   r+   r†   rˆ   s   @r!   rŠ   rŠ   Ù   s   ø„ ñõ÷*r$   rŠ   N)
r   r   rZ   r   r[   r   r    r,   r-   r.   r+   )(r3   Ú
__future__r   Úabcr   Útypingr   Úmypyc.ir.class_irr   Úmypyc.ir.opsr   r   r	   r
   r   r   r   r   r   r   r   r   r   Úmypyc.ir.rtypesr   Úmypyc.primitives.exc_opsr   r   Úmypyc.irbuild.builderr   r   r5   r;   rF   r]   rI   rh   rp   r{   rŠ   r   r$   r!   ú<module>r–      s©   ðñõ
 #å Ý  å %÷÷ ÷ õ õ .ß RáÝ/÷ñ ô2
)˜/ô 
)ô4˜/ô 4ô(-;Ð2ô -;ó`ó
Kô4˜_ô 4ô,' ô 'ô*TÐ2ô Tô*Ð3õ *r$   