Skip to content
Permalink
 
 
Cannot retrieve contributors at this time
62 lines (48 sloc) 1.58 KB
"""
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
You can’t perform that action at this time.