Skip to content
Permalink
 
 
Cannot retrieve contributors at this time
"""
Exception handling intrinsics.
"""
from numba.core import types, errors, cgutils
from numba.core.extending import intrinsic
@intrinsic
def exception_check(typingctx):
"""An intrinsic to check if an exception is raised
"""
def codegen(context, builder, signature, args):
nrt = context.nrt
return nrt.eh_check(builder)
restype = types.boolean
return restype(), codegen
@intrinsic
def mark_try_block(typingctx):
"""An intrinsic to mark the start of a *try* block.
"""
def codegen(context, builder, signature, args):
nrt = context.nrt
nrt.eh_try(builder)
return context.get_dummy_value()
restype = types.none
return restype(), codegen
@intrinsic
def end_try_block(typingctx):
"""An intrinsic to mark the end of a *try* block.
"""
def codegen(context, builder, signature, args):
nrt = context.nrt
nrt.eh_end_try(builder)
return context.get_dummy_value()
restype = types.none
return restype(), codegen
@intrinsic
def exception_match(typingctx, exc_value, exc_class):
"""Basically do ``isinstance(exc_value, exc_class)`` for exception objects.
Used in ``except Exception:`` syntax.
"""
# Check for our limitation
if exc_class.exc_class is not Exception:
msg = "Exception matching is limited to {}"
raise errors.UnsupportedError(msg.format(Exception))
def codegen(context, builder, signature, args):
# Intentionally always True.
return cgutils.true_bit
restype = types.boolean
return restype(exc_value, exc_class), codegen