Ë
    pPêjZ  ã                  óð   — d Z ddlmZ ddlmZmZ ddlmZ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	„Zdd
„Zdd„Zdd„Z dd„Z!dd„Z"dd„Z#	 	 	 	 	 	 	 	 	 	 dd„Z$dd„Z%y)zJMove generator registers that survive suspension onto the generator frame.é    )Úannotations)Ú&analyze_live_regs_with_exception_edgesÚcleanup_cfg)ÚTEMP_ATTR_NAMEÚ generator_frame_attribute_prefix)ÚClassIR)ÚFuncIR)ÚNO_TRACEBACK_LINE_NOÚAssignÚAssignMultiÚ
BaseAssignÚ
BasicBlockÚBranchÚGetAttrÚLoadAddressÚLoadErrorValueÚOpÚRegisterÚSetAttrÚValue)Úexported_namec                ó¦  ‡— t        | j                  «       t        | «      }|syt        | j                  «      }t	        ||«      Št        | j                  | j                  d   ‰|«       | j                  D ]X  }|j                  D ]G  }t        ˆfd„|j                  «       D «       «      rJ ‚t        |t        «      sŒ8|j                  ‰v sŒGJ ‚ ŒZ y)z•Replace registers live across a suspension with frame attributes.

    This runs before uninitialized-value, exception, and refcount transforms.
    Nr   c              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­w)N© )Ú.0ÚsourceÚslotss     €úe/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypyc/transform/generator_spills.pyú	<genexpr>z.promote_generator_registers.<locals>.<genexpr>-   s   øè ø€ ÒF¨v˜6 Uœ?ÑFùs   ƒ)r   ÚblocksÚregisters_live_across_yieldÚnullable_registersÚallocate_slotsÚrewrite_registersÚarg_regsÚopsÚanyÚsourcesÚ
isinstancer   Údest)ÚirÚframeÚ	registersÚnullableÚblockÚopr   s         @r   Úpromote_generator_registersr1      s¶   ø€ ô
 �—	‘	ÔÜ+¨BÓ/€IÙØä! "§)¡)Ó,€HÜ˜5 )Ó,€EÜ�b—i‘i §¡¨Q¡°¸ÔAð —‘ò IˆØ—)‘)ò 	IˆBÜÓF¸¿¹»ÔFÔFÐFÐFÜ" 2¤zÕ2°r·w±wÀ%Ò7GÐHÐHñ	IñIó    c                ó
  — t        | j                  «      }t        | j                  «      }|| j                  d      D �cg c]$  }t        |t        «      r|j
                  s||vr|‘Œ& }}t        || j                  «      S c c}w )z;Return promotable registers live at generator-helper entry.r   )r   r    Úunpromotable_registersr)   r   Úis_argÚorder_registers)r+   Úlive_inÚexcludedÚvaluer-   s        r   r!   r!   1   sy   € ä4°R·Y±YÓ?€GÜ% b§i¡iÓ0€Hð ˜RŸY™Y q™\Ñ*öàÜ�eœXÔ&¨u¯|ª|ÀÈXÑ@Uò 	ð€Ið ô
 ˜9 b§i¡iÓ0Ð0ùòs   ¿)B c                ó0  — t        «       }| D �]  }|j                  D ]ó  }t        |t        «      r6t        |j                  t
        «      r|j                  |j                  «       ŒIt        |t        «      r|j                  |j                  «       Œut        |t        «      sŒ†t        |j                  t        «      sŒ¡|j                  j                  sŒ¸|j                  j                  j                  sŒÙ|j                  |j                  «       Œõ �Œ |S )z<Find registers whose representation requires a real C local.)Úsetr&   r)   r   Úsrcr   Úaddr   r*   r   r   Ú	undefinesÚtypeÚerror_overlap©r    Úresultr/   r0   s       r   r4   r4   =   s¹   € ä›E€FØó $ˆØ—)‘)ò 	$ˆBÜ˜"œkÔ*¬z¸"¿&¹&Ä(Ô/KØ—
‘
˜2Ÿ6™6Õ"Ü˜B¤Ô,Ø—
‘
˜2Ÿ7™7Õ#ä˜2œvÕ&Ü˜rŸv™v¤~Õ6Ø—F‘F×$Ó$Ø—G‘G—L‘L×.Ó.à—
‘
˜2Ÿ7™7Õ#ò	$ð$ð €Mr2   c                óÌ  — t        «       }| D ]Ô  }|j                  D ]Ã  }t        |t        «      rS|j                  t        j
                  k(  r6t        |j                  t        «      r|j                  |j                  «       Œft        |t        «      sŒwt        |j                  t        «      sŒ’|j                  j                  rŒ©|j                  |j                  «       ŒÅ ŒÖ |S )z>Find registers for which the error value is an ordinary state.)r;   r&   r)   r   r0   ÚIS_ERRORr9   r   r=   r   r<   r   r>   r*   rA   s       r   r"   r"   P   sŸ   € ä›E€FØò $ˆØ—)‘)ò 	$ˆBä˜2œvÔ&Ø—E‘EœVŸ_™_Ò,Ü˜rŸx™x¬Ô2à—
‘
˜2Ÿ8™8Õ$ä˜2œvÕ&Ü˜rŸv™v¤~Õ6ØŸ™×(Ó(à—
‘
˜2Ÿ7™7Õ#ñ	$ð$ð €Mr2   c                ó  — i }|D ]m  }|j                   D ]\  }|j                  «       }t        |t        «      r|j                  g|¢}|D ]&  }t        |t
        «      sŒ||vsŒt        |«      ||<   Œ( Œ^ Œo t        | |j                  ¬«      S )zDOrder registers by first appearance for deterministic frame layouts.)Úkey)	r&   r(   r)   r   r*   r   ÚlenÚsortedÚ__getitem__)r-   r    Ú	positionsr/   r0   Úvaluesr9   s          r   r6   r6   d   s’   € à%'€IØò 6ˆØ—)‘)ò 	6ˆBØ—Z‘Z“\ˆFÜ˜"œjÔ)ØŸ'™'Ð+ FÐ+�Øò 6�Ü˜e¤XÕ.°5À	Ò3IÜ'*¨9£~�I˜eÒ$ñ6ñ		6ð6ô �) ×!6Ñ!6Ô7Ð7r2   c                ó¢  — i }t        | j                  «      }t        | j                  | j                  ¬«      }t	        |«      D ]ˆ  \  }}|j
                  rt        | ||j
                  z   «      }n?t        › d|› d|› �}|j                  j                  r| j                  j                  |«       |j                  | j                  |<   |||<   ŒŠ |S )N)Úis_final_classÚ3_Ú_)r   Úfullnamer   rM   Ú	enumerateÚnameÚavailable_attr_namer   r?   r@   Úattrs_with_defaultsr=   Ú
attributes)r,   r-   r   ÚownerÚsource_prefixÚindexÚregisterrR   s           r   r#   r#   r   sÂ   € Ø!#€EÜ˜%Ÿ.™.Ó)€EÜ4Ø�‰ u×';Ñ';ô€Mô % YÓ/ò 
‰ˆˆxØ�=Š=Ü& u¨m¸h¿m¹mÑ.KÓL‰Dä$Ð% R¨ w¨a°¨wÐ7ˆDØ�}‰}×*Ò*ð ×)Ñ)×-Ñ-¨dÔ3Ø!)§¡ˆ×Ñ˜ÑØˆˆhŠð
ð €Lr2   c                óž   — | j                  |«      s|S d}| j                  |› d|› �«      r|dz  }| j                  |› d|› �«      rŒ|› d|› �S )Né   Ú__é   )Úhas_attr)r,   ÚbaseÚsuffixs      r   rS   rS   †   sb   € Ø�>‰>˜$ÔØˆØ€FØ
�.‰.˜D˜6  F 8Ð,Ô
-Ø�!‰ˆð �.‰.˜D˜6  F 8Ð,Õ
-àˆV�2�f�XÐÐr2   c                óÌ  — | D �]^  }|j                   }g |_         |D �]B  }i }g }|j                  «       D ]Š  }	t        |	t        «      rg|	|v rc|j	                  |	«      }
|
€>t        |||	   t        ||	«      |	|v ¬«      }
|j                   j                  |
«       |
||	<   |j                  |
«       Œz|j                  |	«       ŒŒ |j                  |«       t        |t        «      rb|j                  |v rT|j                   j                  t        |||j                     |j                  t        ||j                  «      «      «       �Œ(|j                   j                  |«       �ŒE �Œa y)zKReplace promoted register accesses with generator frame attribute accesses.N)Úallow_error_value)r&   r(   r)   r   Úgetr   Úsource_lineÚappendÚset_sourcesr   r*   r   r<   )r    Ú	frame_regr   r.   r/   Úold_opsr0   ÚreplacementsÚnew_sourcesr   Úreads              r   r$   r$   �   sD  € ð ó %ˆØ—)‘)ˆØˆŒ	Øó 	%ˆBØ46ˆLØ')ˆKØŸ*™*›,ò /�Ü˜f¤hÔ/°F¸e±OØ'×+Ñ+¨FÓ3�DØ�|Ü&Ø%Ø! &™MÜ'¨¨FÓ3Ø.4¸Ð.@ô	 ˜ð Ÿ	™	×(Ñ(¨Ô.Ø/3˜ VÑ,Ø×&Ñ& tÕ,à×&Ñ& vÕ.ð/ð �N‰N˜;Ô'ä˜"œfÔ%¨"¯'©'°UÑ*:Ø—	‘	× Ñ Ü˜I u¨R¯W©W¡~°r·v±v¼{È2ÈrÏwÉwÓ?WÓXöð —	‘	× Ñ  Ö$ò3	%ñ%r2   c                ó    — | j                   dk\  s| j                   t        k(  r| j                   S |j                   dk\  r|j                   S t        S )Nr   )Úliner
   )r0   rY   s     r   rd   rd   ·   s>   € Ø	‡w�w�!‚|�r—w‘wÔ"6Ò6Ø�w‰wˆØ‡}�}˜ÒØ�}‰}ÐÜÐr2   N)r+   r	   r,   r   ÚreturnÚNone)r+   r	   rn   úlist[Register])r    úlist[BasicBlock]rn   úset[Register])r-   rp   r    rq   rn   rp   )r,   r   r-   rp   rn   údict[Register, str])r,   r   r_   Ústrrn   rt   )
r    rq   rg   r   r   rs   r.   rr   rn   ro   )r0   r   rY   r   rn   Úint)&Ú__doc__Ú
__future__r   Úmypyc.analysis.dataflowr   r   Úmypyc.commonr   r   Úmypyc.ir.class_irr   Úmypyc.ir.func_irr	   Úmypyc.ir.opsr
   r   r   r   r   r   r   r   r   r   r   r   r   Úmypyc.namegenr   r1   r!   r4   r"   r6   r#   rS   r$   rd   r   r2   r   ú<module>r~      s�   ðÙ På "ç Wß IÝ %Ý #÷÷ ÷ õ õ (óIó,	1óó&ó(8óó(ð%%Øð%%àð%%ð ð%%ð ð	%%ð
 
ó%%ôP r2   