More liberal Py to Cfish Obj conversion. When converting a Python argument to Clownfish `Obj*`, allow conversion from Python dict, list, string, integer, and other types -- instead of just checking to confirm that the argument is already a Clownfish Obj.
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/b05965ca Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/b05965ca Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/b05965ca Branch: refs/heads/master Commit: b05965cafb60362badf530872dc81a304b9db761 Parents: 73635f2 Author: Marvin Humphrey <[email protected]> Authored: Sat Feb 6 09:41:59 2016 -0800 Committer: Marvin Humphrey <[email protected]> Committed: Wed Feb 24 15:36:07 2016 -0800 ---------------------------------------------------------------------- compiler/src/CFCPyMethod.c | 3 ++- runtime/python/cfext/CFBind.c | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/b05965ca/compiler/src/CFCPyMethod.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCPyMethod.c b/compiler/src/CFCPyMethod.c index d8128c2..ea97d6a 100644 --- a/compiler/src/CFCPyMethod.c +++ b/compiler/src/CFCPyMethod.c @@ -464,7 +464,8 @@ S_gen_decrefs(CFCParamList *param_list, int first_tick) { const char *micro_sym = CFCVariable_get_name(var); const char *specifier = CFCType_get_specifier(type); - if (strcmp(specifier, "cfish_String") == 0 + if (strcmp(specifier, "cfish_Obj") == 0 + || strcmp(specifier, "cfish_String") == 0 || strcmp(specifier, "cfish_Vector") == 0 || strcmp(specifier, "cfish_Hash") == 0 ) { http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/b05965ca/runtime/python/cfext/CFBind.c ---------------------------------------------------------------------- diff --git a/runtime/python/cfext/CFBind.c b/runtime/python/cfext/CFBind.c index a1e47eb..cd77078 100644 --- a/runtime/python/cfext/CFBind.c +++ b/runtime/python/cfext/CFBind.c @@ -294,12 +294,13 @@ S_convert_obj(PyObject *py_obj, CFBindArg *arg, bool nullable) { return 0; } } - PyTypeObject *py_type = S_get_cached_py_type(arg->klass); - if (!PyObject_TypeCheck(py_obj, py_type)) { + + bool success = S_maybe_py_to_cfish(py_obj, arg->klass, true, nullable, + NULL, arg->ptr); + if (!success) { PyErr_SetString(PyExc_TypeError, "Invalid argument type"); return 0; } - *((PyObject**)arg->ptr) = py_obj; return 1; }
