-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
Copy patheh.py
62 lines (48 loc) · 1.58 KB
/
eh.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
"""
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