Add wrappers for `To_Host` in Python bindings. Add NULL-safe wrappers, one of which is refcount neutral.
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/2aab6efe Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/2aab6efe Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/2aab6efe Branch: refs/heads/master Commit: 2aab6efe2533e6e5b526cd6b408e24443c6d0f61 Parents: 991e4a5 Author: Marvin Humphrey <[email protected]> Authored: Mon Jan 25 16:39:02 2016 -0800 Committer: Marvin Humphrey <[email protected]> Committed: Tue Feb 23 18:22:02 2016 -0800 ---------------------------------------------------------------------- runtime/python/cfext/CFBind.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/2aab6efe/runtime/python/cfext/CFBind.h ---------------------------------------------------------------------- diff --git a/runtime/python/cfext/CFBind.h b/runtime/python/cfext/CFBind.h index 85be7af..6637fca 100644 --- a/runtime/python/cfext/CFBind.h +++ b/runtime/python/cfext/CFBind.h @@ -23,6 +23,7 @@ extern "C" { #include "cfish_platform.h" #include "Python.h" +#include "Clownfish/Obj.h" struct cfish_Class; struct cfish_String; @@ -37,6 +38,34 @@ struct cfish_String; void CFBind_reraise_pyerr(struct cfish_Class *err_klass, struct cfish_String *mess); +/** Null-safe invocation of Obj_To_Host. + */ +static CFISH_INLINE PyObject* +CFBind_cfish_to_py(struct cfish_Obj *obj) { + if (obj != NULL) { + return (PyObject*)CFISH_Obj_To_Host(obj); + } + else { + Py_RETURN_NONE; + } +} + +/** Perform the same conversion as `CFBind_cfish_to_py`, but ensure that the + * result is refcount-neutral, decrementing a refcount from `obj` and passing + * it along. + */ +static CFISH_INLINE PyObject* +CFBind_cfish_to_py_zeroref(struct cfish_Obj *obj) { + if (obj != NULL) { + PyObject *result = (PyObject*)CFISH_Obj_To_Host(obj); + CFISH_DECREF(obj); + return result; + } + else { + return Py_None; + } +} + /* ParseTuple conversion routines for primitive numeric types. * * If the value of `input` is out of range for the an integer C type, an
