mirror of
https://github.com/capnproto/pycapnp.git
synced 2025-03-04 08:24:43 +01:00

I'm using Pycapnp in a project, where we compile `.capnp` files directly to Cython instead of using the dynamic interface (for speed). For this, we need access to the `reraise_kj_exception` C function defined by Pycapnp. This is not possible, because Cython does not automatically make this function available to downstream users. My previous solution, in #301, was rather flawed. The file `capabilityHelper.cpp`, where `reraise_kj_exception` is defined, was bundled into the distribution, so that this file could be included in downstream libraries. This turns out to be a terrible idea, because it redefines a bunch of other things like `ReadPromiseAdapter`. For reasons not entirely clear to me, this leads to segmentation faults. This PR revers #301. Instead, in this PR I've made `reraise_kj_exception` a Cython-level function, that can be used by downstream libraries. The C-level variant has been renamed to `c_reraise_kj_exception`.
8 lines
235 B
Cython
8 lines
235 B
Cython
from cpython.ref cimport PyObject
|
|
from libcpp cimport bool
|
|
|
|
cdef extern from "capnp/helpers/capabilityHelper.h":
|
|
void c_reraise_kj_exception()
|
|
cdef cppclass PyRefCounter:
|
|
PyRefCounter(PyObject *)
|
|
PyObject * obj
|