
    X-Ph^                        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 d S )%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_rprimitiveirr	   returnNonec           	        t          | j                   t          | j                  }t          | j        |t	          | j                  t          | j        | j                            }t          | j        |j                  | _        d S N)	r   blocksr   r   setarg_regsr
   split_blocks_at_uninitsbefore)r   cfgmust_defineds      V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypyc/transform/uninit.pyinsert_uninit_checksr&      sq     	
")

C,
	3BK((*R[")*L*L L (	<3FGGBIII    r   list[BasicBlock]pre_must_definedAnalysisDict[Value]c                   g }g }t                      }g }g }| D ]}|j        }g |_        |}	|                    |	           t          |          D ]\  }
}|||
f         }|                                D ]}t          |t                    r||vrt          |t                    r|j        t          j	        k    sTt          |t                    s>||vr*|                    |           |                    |           |j        st                      t                      }}|	j        x|_        |_        |||gz  }|j        j        s<|	j                            t          |||t          j	        |j                             nt%          |	j        ||||||j                   t'          t&          j        d|j         d|j                  }|j                            |           |j                            t+                                 |}	|	j                            |           ߐ|rt-          |||           |rg }|D ]P}t/          |j        d          }|                    |           |                    t1          ||                     Q|D ]8}|                    t1          |t3          dt4                                         9||d         j        dd<   |S )N)
true_labelfalse_labeloplinezlocal variable "z" referenced before assignmentT)	undefinesr   )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   r)   
new_blocksinit_registersinit_registers_setbitmap_registersbitmap_backedblockr1   	cur_blockir.   definedsrc	new_blockerror_block	raise_stdnew_opsregerrs                       r%   r!   r!   '   sB    $&JN')$&M  A% A%i		)$$$s^^ ;	% ;	%EAr&uax0G((** 8* 8* sH--0*7**'F33 +8:8P8P&r;77 9Q "444&--c222*..s333 8 ! -7\\:<<{IJSJaaI+k.G;	"::J81 !,," #+6,5#)?%'W      6%M,)'%G   !3*>S38SSS! !I
  O**9555O**;==999 )IM  $$$$w;	%z  _1*>NP]^^^ )! 	- 	-C T:::CNN3NN6#s++,,,,# 	G 	GCNN6#wq2C'D'DEEFFFF!(
1!A#r'   r1   list[Op]rH   r   rB   list[Register]rC   rJ   r   ok_blockr/   intc           
        ||vrm|                     |           t          |          dz
  t          z  }t          |          |k    r+|                     t          t          d|                      |                    |          }t          t          ||t          z           t          d|t          dz
  z  z  t                    t          j        |          }	|                      |	           t          |	t          dt                    t          j
                  }
|                      |
           |                      t          |
||t          j                             dS )zcCheck if src is defined using a bitmap.

    Modifies ops, bitmap_registers and bitmap_backed.
       __locals_bitmapr   N)r2   lenr   r   r   indexr   r   ANDr   EQr   BOOL)r1   rH   rB   rC   rJ   rQ   r/   nrW   maskedchks              r%   r<   r<      s6    -S!!!!#3  A%%##H->@URS@U@U$V$VWWW$$E+-.e{Q/02CDD	 F JJv
vwq*;<<lo
N
NCJJsOOOJJvc;&+>>?????r'   c                d   | D ]*}t          fd|j        D                       rg }|j        D ]}t          |t                    r|j        v r                    |j                  }|                    |           ||t          z           }t          t          |t          d|t          dz
  z  z  t                    t          j        |j                  }|                    |           |                    t          ||                     |                    |           ||_        ,dS )zUpdate 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  T   K   | ]"}t          |t                    o|j        v V  #d S r   )r5   r   dest).0r.   rC   s     r%   	<genexpr>z<update_register_assignments_to_set_bitmap.<locals>.<genexpr>   s9      WWrz"f%%B"']*BWWWWWWr'   rT   N)anyr1   r5   r   r`   rW   r2   r   r   r   r   ORr/   )	r   rB   rC   rD   rL   r.   rW   rM   news	     `      r%   r>   r>      s:        WWWWUYWWWWW 	  "Gi ' 'b&)) 'bg.F.F)//88ENN2&&&*5K+?@C)e{Q&? @BSTT C NN3'''NN6#s#3#34444NN2&&&&EI'   r'   N)r   r	   r   r   )r   r(   r)   r*   r   r(   )r1   rO   rH   r   rB   rP   rC   rP   rJ   r   rQ   r   r/   rR   r   r   )r   r(   rB   rP   rC   rP   r   r   )!__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!   r<   r>    r'   r%   <module>rn      s}   - - " " " " " " a a a a a a a a a a a a $ $ $ $ $ $ / / / / / / / /                              . - - - - -
H 
H 
H 
H[ [ [ [|@ @ @ @D           r'   