[Cython] Exporting inline functions from a pyx.

Stefan Behnel stefan_ml at behnel.de
Sun May 31 07:46:05 CEST 2015

Jesus-Omar Ocegueda-Gonzalez schrieb am 27.05.2015 um 04:17:
> we recently faced an issue exporting
> inline functions defined in a .pyx. According to this:
> http://docs.cython.org/src/tutorial/pxd_files.html
> the full inline definition (not just the declaration) should be in the pxd.
> However, if we put the definition in the .pyx and just its declaration
> header in the .pxd,  Cython declares a pointer to the inline function
> similar to:
> static CYTHON_INLINE double (*__function_name)(...); /*proto*/
> but this causes a compilation error in some platforms (but successfully
> compiles in others) because variables cannot be declare as inline.

Thanks for the report, I agree that this looks like a bug. I'm not entirely
sure what the best fix is. We could make it an error if an external
function declaration in a .pxd file is declared "inline", or we could just
ignore the modifier for external functions on the import side.

The first case would be more correct, but we'd end up with different
declarations in the .pyx and .pxd files. That might be difficult to explain
to users that run into this problem, as they would first have to understand
that they can still declare their function "inline" in the .pyx file, just
not in the .pxd. Just copying the function header over in order to export
it will make your code fail to compile.

But the second case might also not be without surprises ("why doesn't my
'inline' declaration work here?"), and it leaks implementation details into
the .pxd. I'm thus leaning towards the first. I guess it just depends on
coming up with a clear error message. (Well, after detecting this case in
the first place...)


More information about the cython-devel mailing list