Ë
    pPêj‹  ã                  óð   — d Z ddlmZ ddlmZmZmZmZ ddlm	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 ddlmZ dd„Z	 	 	 	 	 	 	 	 dd	„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd
„Z	 	 	 	 	 	 	 	 dd„Z y)z'Insert checks for uninitialized values.é    )Úannotations)ÚAnalysisDictÚanalyze_must_defined_regsÚcleanup_cfgÚget_cfg)ÚBITMAP_BITS)ÚFuncIRÚ
all_values)ÚAssignÚ
BasicBlockÚBranchÚComparisonOpÚIntegerÚIntOpÚLoadAddressÚLoadErrorValueÚOpÚRaiseStandardErrorÚRegisterÚUnreachableÚValue)Úbitmap_rprimitivec           	     ó6  — t        | j                  «       t        | j                  «      }t        | j                  |t	        | j
                  «      t        | j
                  | j                  «      «      }t        | j                  |j                  |«      | _        y ©N)	r   Úblocksr   r   ÚsetÚarg_regsr
   Úsplit_blocks_at_uninitsÚbefore)ÚirÚstrict_traceback_checksÚcfgÚmust_defineds       ú[/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypyc/transform/uninit.pyÚinsert_uninit_checksr%      sj   € ô �—	‘	Ôä
�"—)‘)Ó
€CÜ,Ø
�	‰	�3œ˜BŸK™KÓ(¬*°R·[±[À"Ç)Á)Ó*Ló€Lô (¨¯	©	°<×3FÑ3FÐH_Ó`€B…Ió    c                óî  — g }g }t        «       }g }g }| D �]=  }|j                  }	g |_        |}
|j                  |
«       t        |	«      D �]  \  }}|||f   }|j	                  «       D �]É  }t        |t        «      sŒ||vsŒt        |t        «      r|j                  t        j                  k(  rŒHt        |t        «      rŒY||vr"|j                  |«       |j                  |«       |j                  sŒŒt        «       t        «       }}|
j                  x|_        |_        |||gz  }|j                  j                   sB|
j                  j                  t        |||t        j                  |j"                  ¬«      «       n%t%        |
j                  ||||||j"                  «       |r|j"                  dk\  s
J d|› �«       ‚t'        t&        j(                  d|j                  › d�|j"                  «      }|j                  j                  |«       |j                  j                  t+        «       «       |}
�ŒÌ |
j                  j                  |«       �Œ �Œ@ |rt-        |||«       |rŽg }|D ]E  }t/        |j                  d¬«      }|j                  |«       |j                  t1        ||«      «       ŒG |D ]+  }|j                  t1        |t3        dt4        «      «      «       Œ- ||d   j                  dd |S )N)Ú
true_labelÚfalse_labelÚopÚliner   z9Cannot raise an error with a negative line number for op zlocal variable "z" referenced before assignmentT)Ú	undefines)r   ÚopsÚappendÚ	enumerateÚunique_sourcesÚ
isinstancer   r   r*   ÚIS_ERRORr   ÚaddÚnamer   Úerror_handlerÚtypeÚerror_overlapr+   Úcheck_for_uninit_using_bitmapr   ÚUNBOUND_LOCAL_ERRORr   Ú)update_register_assignments_to_set_bitmapr   r   r   r   )r   Úpre_must_definedr!   Ú
new_blocksÚinit_registersÚinit_registers_setÚbitmap_registersÚbitmap_backedÚblockr-   Ú	cur_blockÚir*   ÚdefinedÚsrcÚ	new_blockÚerror_blockÚ	raise_stdÚnew_opsÚregÚerrs                        r$   r   r   '   sÑ  € ð $&€Jà€NÜ›ÐØ')ÐØ$&€Mð ó E%ˆØ�i‰iˆØˆŒ	Øˆ	Ø×Ñ˜)Ô$ä˜s“^ó ?	%‰EˆAˆrØ& u¨a xÑ0ˆGØ×(Ñ(Ó*ó <*�ô ˜s¤HÕ-Ø 7Ò*Ü'¨¬FÔ3¸¿¹ÄÇÁÓ8PÜ& r¬;Õ7àÐ"4Ñ4Ø&×-Ñ-¨cÔ2Ø*×.Ñ.¨sÔ3ð Ÿ8š8Ø ä-7«\¼:»<˜{�IØJS×JaÑJaÐa�IÔ+¨kÔ.GØ ;°	Ð":Ñ:�JàŸ8™8×1Ò1Ø!Ÿ™×,Ñ,Ü"Ø #Ø+6Ø,5Ü#)§?¡?Ø%'§W¡Wôõô 6Ø%ŸM™MØØ,Ø)Ø'Ø%ØŸG™Gôñ /àŸG™G qšLð\àVÐWYÐVZÐ[ó\Ø(ä 2Ü*×>Ñ>Ø*¨3¯8©8¨*Ð4RÐSØŸ™ó!�Ið
  —O‘O×*Ñ*¨9Ô5Ø—O‘O×*Ñ*¬;«=Ô9Ø )’Iðy<*ðz �M‰M× Ñ  Ö$ò?	%ðE%ñN Ü1°*Ð>NÐP]Ô^áØˆØ!ò 	-ˆCÜ  §¡°TÔ:ˆCØ�N‰N˜3ÔØ�N‰Nœ6 # sÓ+Õ,ð	-ð $ò 	GˆCØ�N‰Nœ6 #¤w¨qÔ2CÓ'DÓEÕFð	Gà!(ˆ
�1‰×Ñ˜!˜AÐàÐr&   c           
     óR  — ||vrV|j                  |«       t        |«      dz
  t        z  }t        |«      |k  r"|j                  t        t        d|› �«      «       |j                  |«      }t        t        ||t        z     t        d|t        dz
  z  z  t        «      t        j                  |«      }	| j                  |	«       t        |	t        dt        «      t        j                  «      }
| j                  |
«       | j                  t        |
||t        j                  «      «       y)zcCheck if src is defined using a bitmap.

    Modifies ops, bitmap_registers and bitmap_backed.
    é   Ú__locals_bitmapr   N)r.   Úlenr   r   r   Úindexr   r   ÚANDr   ÚEQr   ÚBOOL)r-   rE   r?   r@   rG   Úok_blockr+   ÚnrP   ÚmaskedÚchks              r$   r8   r8   ‰   sö   € ð �-Ñà×Ñ˜SÔ!Ü�Ó !Ñ#¬Ñ3ˆÜÐÓ  AÒ%Ø×#Ñ#¤HÔ->À/ÐRSÐQTÐ@UÓ$VÔWà×Ñ Ó$€EÜÜØ˜¤+Ñ-Ñ.Ü��eœ{¨Q™Ñ/Ñ0Ô2CÓDÜ�	‰	Øó€Fð ‡J�JˆvÔÜ
�vœw qÔ*;Ó<¼l¿o¹oÓ
N€CØ‡J�Jˆs„OØ‡J�JŒv�c˜;¨´&·+±+Ó>Õ?r&   c                ó>  ‡— | D �]  }t        ˆfd„|j                  D «       «      sŒ#g }|j                  D ]Ü  }t        |t        «      r¹|j                  ‰v r«‰j                  |j                  «      }|j                  |«       ||t        z     }t        t        |t        d|t        dz
  z  z  t        «      t        j                  |j                  «      }|j                  |«       |j                  t        ||«      «       ŒÌ|j                  |«       ŒÞ ||_        �Œ y)z«Update some assignments to registers to also set a bit in a bitmap.

    The bitmaps are used to track if a local variable has been assigned to.

    Modifies blocks.
    c              3  ó^   •K  — | ]$  }t        |t        «      xr |j                  ‰v –— Œ& y ­wr   )r1   r   Údest)Ú.0r*   r@   s     €r$   ú	<genexpr>z<update_register_assignments_to_set_bitmap.<locals>.<genexpr>µ   s)   øè ø€ ÒWÀrŒz˜"œfÓ%ÒB¨"¯'©'°]Ð*BÓBÑWùs   ƒ*-rM   N)Úanyr-   r1   r   rZ   rP   r.   r   r   r   r   ÚORr+   )	r   r?   r@   rA   rI   r*   rP   rJ   Únews	     `      r$   r:   r:   «   sï   ø€ ð ó  ˆÜÓWÈUÏYÉYÔWÕWØ "ˆGØ—i‘iò '�Ü˜b¤&Ô)¨b¯g©g¸Ñ.FØ)×/Ñ/°·±Ó8�EØ—N‘N 2Ô&Ø*¨5´KÑ+?Ñ@�CÜÜ)ØÜ  e¬{¸Q©Ñ&?Ñ @ÔBSÓTÜŸ™ØŸ™ó�Cð —N‘N 3Ô'Ø—N‘N¤6¨#¨sÓ#3Õ4à—N‘N 2Õ&ð'ð   ˆEŽIñ' r&   N)r    r	   r!   ÚboolÚreturnÚNone)r   úlist[BasicBlock]r;   zAnalysisDict[Value]r!   r`   ra   rc   )r-   zlist[Op]rE   r   r?   úlist[Register]r@   rd   rG   r   rT   r   r+   Úintra   rb   )r   rc   r?   rd   r@   rd   ra   rb   )!Ú__doc__Ú
__future__r   Úmypyc.analysis.dataflowr   r   r   r   Úmypyc.commonr   Úmypyc.ir.func_irr	   r
   Úmypyc.ir.opsr   r   r   r   r   r   r   r   r   r   r   r   r   Úmypyc.ir.rtypesr   r%   r   r8   r:   © r&   r$   ú<module>rn      sá   ðÙ -å "ç aÓ aÝ $ß /÷÷ ÷ õ õ .ó
að_Øð_Ø0Cð_Ø^bð_àó_ðD@Ø	ð@à	ð@ð %ð@ð "ð	@ð
 ð@ð ð@ð ð@ð 
ó@ðD Øð Ø0>ð ØO]ð à	ô r&   