U
    ?hU                     @   sX   d Z ddlmZmZmZ ddlmZ edd Zedd Zedd	 Z	ed
d Z
dS )z 
Exception handling intrinsics.
    )typeserrorscgutils)	intrinsicc                 C   s   dd }t j}| |fS )z4An intrinsic to check if an exception is raised
    c                 S   s   | j }||S N)nrtZeh_checkcontextbuilder	signatureargsr    r   F/var/www/html/venv/lib/python3.8/site-packages/numba/core/unsafe/eh.pycodegen   s    z exception_check.<locals>.codegen)r   boolean	typingctxr   restyper   r   r   exception_check	   s    r   c                 C   s   dd }t j}| |fS )z5An intrinsic to mark the start of a *try* block.
    c                 S   s   | j }|| |  S r   )r   Zeh_tryget_dummy_valuer   r   r   r   r      s    
zmark_try_block.<locals>.codegenr   noner   r   r   r   mark_try_block   s    r   c                 C   s   dd }t j}| |fS )z3An intrinsic to mark the end of a *try* block.
    c                 S   s   | j }|| |  S r   )r   Z
eh_end_tryr   r   r   r   r   r   &   s    
zend_try_block.<locals>.codegenr   r   r   r   r   end_try_block"   s    r   c                 C   s:   |j tk	rd}t|tdd }tj}||||fS )zwBasically do ``isinstance(exc_value, exc_class)`` for exception objects.
    Used in ``except Exception:`` syntax.
    z#Exception matching is limited to {}c                 S   s   t jS r   )r   Ztrue_bit)r	   r
   r   r   r   r   r   r   9   s    z exception_match.<locals>.codegen)	exc_class	Exceptionr   ZUnsupportedErrorformatr   r   )r   	exc_valuer   msgr   r   r   r   r   exception_match/   s    
r   N)__doc__Z
numba.corer   r   r   Znumba.core.extendingr   r   r   r   r   r   r   r   r   <module>   s   


