o
    tBh                     @  s   d Z ddlmZ ddlmZmZmZ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 dd
dZdddZdS )z'Insert checks for uninitialized values.    )annotations)AnalysisDictanalyze_must_defined_regscleanup_cfgget_cfg)FuncIR
all_values)
Assign
BasicBlockBranchLoadAddressLoadErrorValueOpRaiseStandardErrorRegisterUnreachableValueirr   returnNonec                 C  sH   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_defined r   m/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypyc/transform/uninit.pyinsert_uninit_checks   s   

r   r   list[BasicBlock]pre_must_definedAnalysisDict[Value]c                 C  s  g }g }t  }| D ]}|j}g |_|}|| t|D ]}\}}	|||f }
|	 D ]h}t|tr||
vrt|	tr@|	jtj	kst|	t
st t }}|j |_|_|||g7 }||vrg|| || |jt|||tj	|	jd ttjd|j d|	j}|j| |jt  |}q*|j|	 qq	|rg }|D ]}t|jdd}|| |t|| q||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   r
   error_handleraddr&   r   UNBOUND_LOCAL_ERRORnamer   r   typer	   )r   r!   
new_blocksinit_registersinit_registers_setblockr(   	cur_blockir%   definedsrc	new_blockerror_block	raise_stdnew_opsregerrr   r   r   r   "   sj   
	

	+
r   N)r   r   r   r   )r   r    r!   r"   r   r    )__doc__
__future__r   mypyc.analysis.dataflowr   r   r   r   mypyc.ir.func_irr   r   mypyc.ir.opsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s    0
