Ë
    pPêjz  ã                  óÄ   — d Z ddlmZ ddlmZ ddlmZmZ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 dd	lmZ dd
„Zdd„Z	 	 	 	 	 	 	 	 	 	 	 	 dd„Zy)zuSpill operation results that are live across generator suspension points.

Registers are spilled in an earlier pass.
é    )Úannotations)Ú
Collection)ÚAnalysisResultÚanalyze_live_regsÚget_cfg)ÚTEMP_ATTR_NAME)ÚClassIR)ÚFuncIR)
Ú
BasicBlockÚBranchÚDecRefÚGetAttrÚIncRefÚLoadErrorValueÚOpÚRegisterÚSetAttrÚValue)Úexported_namec                ó6  — t        | j                  d¬«      }t        | j                  |«      }|j                  | j                  d   df   D �ch c]  }t	        |t
        «      sŒ|’Œ }}t        | j                  |||| j                  d   «      | _        y c c}w )NT)Ú
use_yieldsr   )r   Úblocksr   ÚbeforeÚ
isinstancer   Ú
spill_regsÚarg_regs)ÚirÚframeÚcfgÚliveÚvalueÚto_spills         úZ/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypyc/transform/spill.pyÚinsert_spillsr$      s|   € Ü
�"—)‘)¨Ô
-€CÜ˜RŸY™Y¨Ó,€Dð $(§;¡;¨r¯y©y¸©|¸Q¨Ñ#?ÖY˜%Ä:ÈeÔUWÕCX’ÐY€HÐYä˜2Ÿ9™9 e¨X°t¸R¿[¹[È¹^ÓL€B…Iùò Zs   ÁBÁ$Bc                ó¢   ‡— t        | «      dkD  r6i Šd}|D ]  }|j                  D ]  }|‰|<   |dz  }Œ Œ t        | ˆfd„¬«      S t        | «      S )Né   r   c                ó   •— ‰|    S ©N© )ÚvÚorders    €r#   ú<lambda>zsort_values.<locals>.<lambda>2   s   ø€ ¨E°!©H€ ó    )Úkey)ÚlenÚopsÚsortedÚlist)Úvaluesr   ÚiÚblockÚopr+   s        @r#   Úsort_valuesr7   *   sf   ø€ Ü
ˆ6ƒ{�Q‚ØˆØˆØò 	ˆEØ—i‘iò �Ø��b‘	Ø�Q‘‘ñð	ô �fÓ"4Ô5Ð5ä�F‹|Ðr-   c                ó2  ‡— i Št        t        || «      «      D ]›  \  }}t        |t        «      r|j                  r
J d|› �«       ‚t
        › dt        |j                  «      › d|› �}|j                  |j                  |<   |j                  j                  r|j                  j                  |«       |‰|<   Œ� | D �]Ú  }|j                  }	g |_        t        |	«      D �]µ  \  }}
g }t        |
t        «      r|
j                  ‰v rt!        d«      ‚t        |
t"        «      rž|
j                  ‰v r�|
j                  |j$                  ||f   vrr||j$                  ||f   v r_t'        |
j                  j                  «      }|j                  j)                  |t+        |‰|
j                     ||
j,                  «      g«       Œàt/        ˆfd„|
j1                  «       D «       «      rît        |
t2        «      r|
j4                  t2        j6                  k(  sÁg }|
j9                  «       }|
j1                  «       D ]‹  }|‰v rtt        |‰|   |
j,                  «      }|j                  j;                  |«       |j;                  |«       |j                  j<                  sŒd||vsŒi|j;                  |«       Œ{|j;                  |«       Œ� |
j?                  |«       |j                  j;                  |
«       |D ]&  }|j                  j;                  t#        |«      «       Œ( |
‰v s�Œ<|
j                  r:|
j                  j<                  r$|j                  j;                  t        |
«      «       |j                  j;                  t+        |‰|
   |
|
j,                  «      «       �Œ¸ �ŒÝ | S )Nz%cannot spill borrowed attribute read Ú2_Ú_z0not sure what to do with an incref of a spill...c              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­wr(   r)   )Ú.0ÚsrcÚ
spill_locss     €r#   ú	<genexpr>zspill_regs.<locals>.<genexpr>k   s   øè ø€ Ò>¨#�C˜:Ô%Ñ>ùs   ƒ) Ú	enumerater7   r   r   Úis_borrowedr   r   ÚfullnameÚtypeÚ
attributesÚerror_overlapÚ_always_initialized_attrsÚaddr0   r   r=   ÚAssertionErrorr   Úafterr   Úextendr   ÚlineÚanyÚsourcesr   r6   ÚIS_ERRORÚstolenÚappendÚis_refcountedÚset_sources)r   r   r"   r    Ú	frame_regr4   ÚvalÚnamer5   r0   r6   Ú	to_decrefÚnullÚnew_sourcesrO   r=   ÚreadÚdecr>   s                     @r#   r   r   7   s  ø€ ð €JäœK¨°&Ó9Ó:ò ‰ˆˆ3ô
 �sœGÔ$¨¯ªð	9à2°3°%Ð8ó	9ð 
ô !Ð! ¤M°%·.±.Ó$AÐ#BÀ!ÀAÀ3ÐGˆØ!$§¡ˆ×Ñ˜ÑØ�8‰8×!Ò!ð ×+Ñ+×/Ñ/°Ô5Øˆ
�3Šð!ð$ ó 7RˆØ�i‰iˆØˆŒ	ä˜s“^ó 3	R‰EˆAˆrØˆIä˜"œfÔ%¨"¯&©&°JÑ*>Ü$Ð%WÓXÐXÜ˜"œfÔ%¨"¯&©&°JÑ*>ð —6‘6 §¡¨E°1¨HÑ!5Ñ5¸)ÀtÇzÁzÐRWÐYZÐRZÑG[Ñ:[ä)¨"¯&©&¯+©+Ó6�DØ—I‘I×$Ñ$ d¬G°I¸zÈ"Ï&É&Ñ?QÐSWÐY[×Y`ÑY`Ó,aÐ%bÔcØô Ó>°·±³Ô>Ô>ô $ B¬Ô/°B·E±E¼V¿_¹_Ò4Là+-�ØŸ™›�ØŸ:™:›<ò 0�CØ˜jÑ(Ü& y°*¸S±/À2Ç7Á7ÓK˜ØŸ	™	×(Ñ(¨Ô.Ø#×*Ñ*¨4Ô0ØŸ8™8×1Ó1°cÀÒ6GØ%×,Ñ,¨TÕ2à#×*Ñ*¨3Õ/ð0ð —‘˜{Ô+à�I‰I×Ñ˜RÔ à ò .�Ø—	‘	× Ñ ¤¨£Õ-ð.ð �ZÓð —>’> b§g¡g×&;Ò&;Ø—I‘I×$Ñ$¤V¨B£ZÔ0Ø—	‘	× Ñ ¤¨°J¸r±NÀBÈÏÉÓ!PÖQòg3	Rð	7Rðr €Mr-   N)r   r
   r   r	   ÚreturnÚNone)r3   zCollection[Op]r   úlist[BasicBlock]r[   zlist[Op])r   r]   r   r	   r"   zset[Op]r    zAnalysisResult[Value]rS   r   r[   r]   )Ú__doc__Ú
__future__r   Úcollections.abcr   Úmypyc.analysis.dataflowr   r   r   Úmypyc.commonr   Úmypyc.ir.class_irr	   Úmypyc.ir.func_irr
   Úmypyc.ir.opsr   r   r   r   r   r   r   r   r   r   Úmypyc.namegenr   r$   r7   r   r)   r-   r#   ú<module>rg      s„   ðñõ
 #å &ç NÑ NÝ 'Ý %Ý #÷÷ ÷ õ (ó
Mó
ðTØðTàðTð ðTð  ð	Tð
 ðTð ôTr-   