-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
Copy pathllvm_types.py
37 lines (29 loc) · 1.21 KB
/
llvm_types.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
import sys
import ctypes
import struct as struct_
import llvmlite.ir
from llvmlite.ir import Constant
_trace_refs_ = hasattr(sys, 'getobjects')
_plat_bits = struct_.calcsize('@P') * 8
_int8 = llvmlite.ir.IntType(8)
_int32 = llvmlite.ir.IntType(32)
_void_star = llvmlite.ir.PointerType(_int8)
_int8_star = _void_star
_sizeof_py_ssize_t = ctypes.sizeof(getattr(ctypes, 'c_size_t'))
_llvm_py_ssize_t = llvmlite.ir.IntType(_sizeof_py_ssize_t * 8)
if _trace_refs_:
_pyobject_head = llvmlite.ir.LiteralStructType([_void_star, _void_star,
_llvm_py_ssize_t, _void_star])
_pyobject_head_init = Constant.literal_struct([
Constant(_void_star, None), # _ob_next
Constant(_void_star, None), # _ob_prev
Constant(_llvm_py_ssize_t, 1), # ob_refcnt
Constant(_void_star, None), # ob_type
])
else:
_pyobject_head = llvmlite.ir.LiteralStructType([_llvm_py_ssize_t, _void_star])
_pyobject_head_init = Constant.literal_struct([
Constant(_llvm_py_ssize_t, 1), # ob_refcnt
Constant(_void_star, None), # ob_type
])
_pyobject_head_p = llvmlite.ir.PointerType(_pyobject_head)