Add extra parameter to Obj_To_Host This parameter will be used to pass the conversion cache around.
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/f3eea9b2 Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/f3eea9b2 Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/f3eea9b2 Branch: refs/heads/master Commit: f3eea9b22fef28df418cc4f71f861d9c7f2ab3d8 Parents: 3e0546f Author: Nick Wellnhofer <wellnho...@aevum.de> Authored: Tue Mar 8 11:54:47 2016 +0100 Committer: Nick Wellnhofer <wellnho...@aevum.de> Committed: Thu Mar 10 14:47:23 2016 +0100 ---------------------------------------------------------------------- compiler/src/CFCPerlMethod.c | 2 +- compiler/src/CFCPerlTypeMap.c | 2 +- runtime/c/src/clownfish.c | 35 +++++++-------- runtime/core/Clownfish/Blob.cfh | 2 +- runtime/core/Clownfish/Boolean.cfh | 2 +- runtime/core/Clownfish/ByteBuf.cfh | 2 +- runtime/core/Clownfish/Hash.cfh | 2 +- runtime/core/Clownfish/Num.cfh | 4 +- runtime/core/Clownfish/Obj.cfh | 2 +- runtime/core/Clownfish/String.cfh | 2 +- runtime/core/Clownfish/Vector.cfh | 2 +- runtime/example-lang/src/Clownfish/Obj.c | 2 +- runtime/go/ext/clownfish.c | 38 +++++++++-------- .../perl/buildlib/Clownfish/Build/Binding.pm | 11 +++-- runtime/perl/xs/XSBind.c | 45 ++++++++++++-------- runtime/perl/xs/XSBind.h | 2 +- runtime/python/cfext/CFBind.c | 27 ++++++++---- runtime/python/cfext/CFBind.h | 4 +- 18 files changed, 103 insertions(+), 83 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/compiler/src/CFCPerlMethod.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCPerlMethod.c b/compiler/src/CFCPerlMethod.c index 911d51d..08d32e2 100644 --- a/compiler/src/CFCPerlMethod.c +++ b/compiler/src/CFCPerlMethod.c @@ -456,7 +456,7 @@ S_callback_start(CFCMethod *method) { " ENTER;\n" " SAVETMPS;\n" " PUSHMARK(SP);\n" - " mPUSHs((SV*)CFISH_Obj_To_Host((cfish_Obj*)self));\n"; + " mPUSHs((SV*)CFISH_Obj_To_Host((cfish_Obj*)self, NULL));\n"; int num_args = (int)CFCParamList_num_vars(param_list) - 1; int num_to_extend = num_args == 0 ? 1 : num_args == 1 ? 2 http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/compiler/src/CFCPerlTypeMap.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCPerlTypeMap.c b/compiler/src/CFCPerlTypeMap.c index c975c4f..d416284 100644 --- a/compiler/src/CFCPerlTypeMap.c +++ b/compiler/src/CFCPerlTypeMap.c @@ -278,7 +278,7 @@ CFCPerlTypeMap_write_xs_typemap(CFCHierarchy *hierarchy) { class_var, ", ", allocation, ");\n\n", NULL); output = CFCUtil_cat(output, class_var, "_\n" - " $arg = (SV*)CFISH_Obj_To_Host((cfish_Obj*)$var);\n" + " $arg = (SV*)CFISH_Obj_To_Host((cfish_Obj*)$var, NULL);\n" " CFISH_DECREF($var);\n" "\n", NULL); } http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/runtime/c/src/clownfish.c ---------------------------------------------------------------------- diff --git a/runtime/c/src/clownfish.c b/runtime/c/src/clownfish.c index 3566cf9..239a796 100644 --- a/runtime/c/src/clownfish.c +++ b/runtime/c/src/clownfish.c @@ -120,8 +120,9 @@ cfish_dec_refcount(void *vself) { } void* -Obj_To_Host_IMP(Obj *self) { +Obj_To_Host_IMP(Obj *self, void *vcache) { UNUSED_VAR(self); + UNUSED_VAR(vcache); THROW(ERR, "Obj_To_Host not supported in C bindings"); UNREACHABLE_RETURN(void*); } @@ -264,58 +265,58 @@ cfish_TestUtils_destroy_host_runtime(void *runtime) { /**** To_Host methods ******************************************************/ void* -Str_To_Host_IMP(String *self) { +Str_To_Host_IMP(String *self, void *vcache) { Str_To_Host_t super_to_host = SUPER_METHOD_PTR(STRING, CFISH_Str_To_Host); - return super_to_host(self); + return super_to_host(self, vcache); } void* -Blob_To_Host_IMP(Blob *self) { +Blob_To_Host_IMP(Blob *self, void *vcache) { Blob_To_Host_t super_to_host = SUPER_METHOD_PTR(BLOB, CFISH_Blob_To_Host); - return super_to_host(self); + return super_to_host(self, vcache); } void* -BB_To_Host_IMP(ByteBuf *self) { +BB_To_Host_IMP(ByteBuf *self, void *vcache) { BB_To_Host_t super_to_host = SUPER_METHOD_PTR(BYTEBUF, CFISH_BB_To_Host); - return super_to_host(self); + return super_to_host(self, vcache); } void* -Vec_To_Host_IMP(Vector *self) { +Vec_To_Host_IMP(Vector *self, void *vcache) { Vec_To_Host_t super_to_host = SUPER_METHOD_PTR(VECTOR, CFISH_Vec_To_Host); - return super_to_host(self); + return super_to_host(self, vcache); } void* -Hash_To_Host_IMP(Hash *self) { +Hash_To_Host_IMP(Hash *self, void *vcache) { Hash_To_Host_t super_to_host = SUPER_METHOD_PTR(HASH, CFISH_Hash_To_Host); - return super_to_host(self); + return super_to_host(self, vcache); } void* -Float_To_Host_IMP(Float *self) { +Float_To_Host_IMP(Float *self, void *vcache) { Float_To_Host_t super_to_host = SUPER_METHOD_PTR(FLOAT, CFISH_Float_To_Host); - return super_to_host(self); + return super_to_host(self, vcache); } void* -Int_To_Host_IMP(Integer *self) { +Int_To_Host_IMP(Integer *self, void *vcache) { Int_To_Host_t super_to_host = SUPER_METHOD_PTR(INTEGER, CFISH_Int_To_Host); - return super_to_host(self); + return super_to_host(self, vcache); } void* -Bool_To_Host_IMP(Boolean *self) { +Bool_To_Host_IMP(Boolean *self, void *vcache) { Bool_To_Host_t super_to_host = SUPER_METHOD_PTR(BOOLEAN, CFISH_Bool_To_Host); - return super_to_host(self); + return super_to_host(self, vcache); } http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/runtime/core/Clownfish/Blob.cfh ---------------------------------------------------------------------- diff --git a/runtime/core/Clownfish/Blob.cfh b/runtime/core/Clownfish/Blob.cfh index 9d21a31..505d4a4 100644 --- a/runtime/core/Clownfish/Blob.cfh +++ b/runtime/core/Clownfish/Blob.cfh @@ -77,7 +77,7 @@ public final class Clownfish::Blob inherits Clownfish::Obj { init_wrap(Blob *self, const void *bytes, size_t size); void* - To_Host(Blob *self); + To_Host(Blob *self, void *vcache); /** Return the number of bytes held by the Blob. */ http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/runtime/core/Clownfish/Boolean.cfh ---------------------------------------------------------------------- diff --git a/runtime/core/Clownfish/Boolean.cfh b/runtime/core/Clownfish/Boolean.cfh index 36a7d28..318e56d 100644 --- a/runtime/core/Clownfish/Boolean.cfh +++ b/runtime/core/Clownfish/Boolean.cfh @@ -39,7 +39,7 @@ public final class Clownfish::Boolean nickname Bool { singleton(bool value); void* - To_Host(Boolean *self); + To_Host(Boolean *self, void *vcache); /** Return the value of the Boolean. */ http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/runtime/core/Clownfish/ByteBuf.cfh ---------------------------------------------------------------------- diff --git a/runtime/core/Clownfish/ByteBuf.cfh b/runtime/core/Clownfish/ByteBuf.cfh index 5e60ed3..9934520 100644 --- a/runtime/core/Clownfish/ByteBuf.cfh +++ b/runtime/core/Clownfish/ByteBuf.cfh @@ -76,7 +76,7 @@ public final class Clownfish::ByteBuf nickname BB inherits Clownfish::Obj { size_t capacity); void* - To_Host(ByteBuf *self); + To_Host(ByteBuf *self, void *vcache); /** Resize the ByteBuf to `size`. If greater than the object's capacity, * throws an error. http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/runtime/core/Clownfish/Hash.cfh ---------------------------------------------------------------------- diff --git a/runtime/core/Clownfish/Hash.cfh b/runtime/core/Clownfish/Hash.cfh index 590d3c9..d8b695c 100644 --- a/runtime/core/Clownfish/Hash.cfh +++ b/runtime/core/Clownfish/Hash.cfh @@ -51,7 +51,7 @@ public final class Clownfish::Hash inherits Clownfish::Obj { get_tombstone(); void* - To_Host(Hash *self); + To_Host(Hash *self, void *vcache); /** Empty the hash of all key-value pairs. */ http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/runtime/core/Clownfish/Num.cfh ---------------------------------------------------------------------- diff --git a/runtime/core/Clownfish/Num.cfh b/runtime/core/Clownfish/Num.cfh index 07befa4..778bb6a 100644 --- a/runtime/core/Clownfish/Num.cfh +++ b/runtime/core/Clownfish/Num.cfh @@ -37,7 +37,7 @@ public final class Clownfish::Float { init(Float* self, double value); void* - To_Host(Float *self); + To_Host(Float *self, void *vcache); /** Return the value of the Float. */ @@ -101,7 +101,7 @@ public final class Clownfish::Integer nickname Int { init(Integer* self, int64_t value); void* - To_Host(Integer *self); + To_Host(Integer *self, void *vcache); /** Return the value of the Integer. */ http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/runtime/core/Clownfish/Obj.cfh ---------------------------------------------------------------------- diff --git a/runtime/core/Clownfish/Obj.cfh b/runtime/core/Clownfish/Obj.cfh index 30b14e0..5241a16 100644 --- a/runtime/core/Clownfish/Obj.cfh +++ b/runtime/core/Clownfish/Obj.cfh @@ -31,7 +31,7 @@ public abstract class Clownfish::Obj { /** Return a host-language object wrapper for this object. */ void* - To_Host(Obj *self); + To_Host(Obj *self, void *vcache); /** Return a clone of the object. */ http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/runtime/core/Clownfish/String.cfh ---------------------------------------------------------------------- diff --git a/runtime/core/Clownfish/String.cfh b/runtime/core/Clownfish/String.cfh index c279e75..72f60a1 100644 --- a/runtime/core/Clownfish/String.cfh +++ b/runtime/core/Clownfish/String.cfh @@ -142,7 +142,7 @@ public final class Clownfish::String nickname Str newf(const char *pattern, ...); void* - To_Host(String *self); + To_Host(String *self, void *vcache); /** Return the concatenation of the String and `other`. */ http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/runtime/core/Clownfish/Vector.cfh ---------------------------------------------------------------------- diff --git a/runtime/core/Clownfish/Vector.cfh b/runtime/core/Clownfish/Vector.cfh index cacf475..5cfa0da 100644 --- a/runtime/core/Clownfish/Vector.cfh +++ b/runtime/core/Clownfish/Vector.cfh @@ -41,7 +41,7 @@ public final class Clownfish::Vector nickname Vec inherits Clownfish::Obj { init(Vector *self, size_t capacity = 0); void* - To_Host(Vector *self); + To_Host(Vector *self, void *vcache); /** Push an item onto the end of a Vector. */ http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/runtime/example-lang/src/Clownfish/Obj.c ---------------------------------------------------------------------- diff --git a/runtime/example-lang/src/Clownfish/Obj.c b/runtime/example-lang/src/Clownfish/Obj.c index c4a5dce..a0d1055 100644 --- a/runtime/example-lang/src/Clownfish/Obj.c +++ b/runtime/example-lang/src/Clownfish/Obj.c @@ -37,7 +37,7 @@ cfish_dec_refcount(void *vself) { } void* -CFISH_Obj_To_Host_IMP(cfish_Obj *self) { +CFISH_Obj_To_Host_IMP(cfish_Obj *self, void *vcache) { THROW(CFISH_ERR, "TODO"); UNREACHABLE_RETURN(void*); } http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/runtime/go/ext/clownfish.c ---------------------------------------------------------------------- diff --git a/runtime/go/ext/clownfish.c b/runtime/go/ext/clownfish.c index 884fe0e..28f95b5 100644 --- a/runtime/go/ext/clownfish.c +++ b/runtime/go/ext/clownfish.c @@ -124,8 +124,9 @@ cfish_dec_refcount(void *vself) { } void* -Obj_To_Host_IMP(Obj *self) { +Obj_To_Host_IMP(Obj *self, void *vcache) { UNUSED_VAR(self); + UNUSED_VAR(vcache); THROW(ERR, "Unimplemented for Go"); UNREACHABLE_RETURN(void*); } @@ -169,8 +170,9 @@ Class_find_parent_class(String *class_name) { } void* -Class_To_Host_IMP(Class *self) { +Class_To_Host_IMP(Class *self, void *vcache) { UNUSED_VAR(self); + UNUSED_VAR(vcache); THROW(ERR, "Unimplemented for Go"); UNREACHABLE_RETURN(void*); } @@ -251,59 +253,59 @@ Err_trap(Err_Attempt_t routine, void *context) { /***************************** To_Host methods *****************************/ void* -Str_To_Host_IMP(String *self) { +Str_To_Host_IMP(String *self, void *vcache) { Str_To_Host_t super_to_host = SUPER_METHOD_PTR(STRING, CFISH_Str_To_Host); - return super_to_host(self); + return super_to_host(self, vcache); } void* -Blob_To_Host_IMP(Blob *self) { +Blob_To_Host_IMP(Blob *self, void *vcache) { Blob_To_Host_t super_to_host = SUPER_METHOD_PTR(BLOB, CFISH_Blob_To_Host); - return super_to_host(self); + return super_to_host(self, vcache); } void* -BB_To_Host_IMP(ByteBuf *self) { +BB_To_Host_IMP(ByteBuf *self, void *vcache) { BB_To_Host_t super_to_host = SUPER_METHOD_PTR(BYTEBUF, CFISH_BB_To_Host); - return super_to_host(self); + return super_to_host(self, vcache); } void* -Vec_To_Host_IMP(Vector *self) { +Vec_To_Host_IMP(Vector *self, void *vcache) { Vec_To_Host_t super_to_host = SUPER_METHOD_PTR(VECTOR, CFISH_Vec_To_Host); - return super_to_host(self); + return super_to_host(self, vcache); } void* -Hash_To_Host_IMP(Hash *self) { +Hash_To_Host_IMP(Hash *self, void *vcache) { Hash_To_Host_t super_to_host = SUPER_METHOD_PTR(HASH, CFISH_Hash_To_Host); - return super_to_host(self); + return super_to_host(self, vcache); } void* -Float_To_Host_IMP(Float *self) { +Float_To_Host_IMP(Float *self, void *vcache) { Float_To_Host_t super_to_host = SUPER_METHOD_PTR(FLOAT, CFISH_Float_To_Host); - return super_to_host(self); + return super_to_host(self, vcache); } void* -Int_To_Host_IMP(Integer *self) { +Int_To_Host_IMP(Integer *self, void *vcache) { Int_To_Host_t super_to_host = SUPER_METHOD_PTR(INTEGER, CFISH_Int_To_Host); - return super_to_host(self); + return super_to_host(self, vcache); } void* -Bool_To_Host_IMP(Boolean *self) { +Bool_To_Host_IMP(Boolean *self, void *vcache) { Bool_To_Host_t super_to_host = SUPER_METHOD_PTR(BOOLEAN, CFISH_Bool_To_Host); - return super_to_host(self); + return super_to_host(self, vcache); } http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/runtime/perl/buildlib/Clownfish/Build/Binding.pm ---------------------------------------------------------------------- diff --git a/runtime/perl/buildlib/Clownfish/Build/Binding.pm b/runtime/perl/buildlib/Clownfish/Build/Binding.pm index 6d9e87e..ec8ac12 100644 --- a/runtime/perl/buildlib/Clownfish/Build/Binding.pm +++ b/runtime/perl/buildlib/Clownfish/Build/Binding.pm @@ -750,7 +750,6 @@ END_POD $pod_spec->set_synopsis($synopsis); $pod_spec->set_description($description); $pod_spec->add_method( - method => 'To_Host', alias => 'to_perl', pod => $to_perl_pod, ); @@ -768,7 +767,7 @@ get_class(self) cfish_Obj *self CODE: cfish_Class *klass = cfish_Obj_get_class(self); - RETVAL = (SV*)CFISH_Class_To_Host(klass); + RETVAL = (SV*)CFISH_Class_To_Host(klass, NULL); OUTPUT: RETVAL SV* @@ -776,7 +775,7 @@ get_class_name(self) cfish_Obj *self CODE: cfish_String *class_name = cfish_Obj_get_class_name(self); - RETVAL = (SV*)CFISH_Str_To_Host(class_name); + RETVAL = (SV*)CFISH_Str_To_Host(class_name, NULL); OUTPUT: RETVAL bool @@ -801,7 +800,7 @@ SV* to_perl(self) cfish_Obj *self; CODE: - RETVAL = (SV*)CFISH_Obj_To_Host(self); + RETVAL = (SV*)CFISH_Obj_To_Host(self, NULL); OUTPUT: RETVAL END_XS_CODE @@ -921,7 +920,7 @@ CODE: { cfish_Class *klass = cfish_Class_fetch_class(class_name); CFISH_UNUSED_VAR(unused_sv); - RETVAL = klass ? (SV*)CFISH_Class_To_Host(klass) : &PL_sv_undef; + RETVAL = klass ? (SV*)CFISH_Class_To_Host(klass, NULL) : &PL_sv_undef; } OUTPUT: RETVAL @@ -948,7 +947,7 @@ CODE: aTHX_ ST(locations[1]), "parent", CFISH_CLASS, NULL); } singleton = cfish_Class_singleton(class_name, parent); - RETVAL = (SV*)CFISH_Class_To_Host(singleton); + RETVAL = (SV*)CFISH_Class_To_Host(singleton, NULL); } OUTPUT: RETVAL END_XS_CODE http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/runtime/perl/xs/XSBind.c ---------------------------------------------------------------------- diff --git a/runtime/perl/xs/XSBind.c b/runtime/perl/xs/XSBind.c index a4f9046..793d5eb 100644 --- a/runtime/perl/xs/XSBind.c +++ b/runtime/perl/xs/XSBind.c @@ -719,7 +719,8 @@ XSBind_cfish_obj_to_sv_noinc(pTHX_ cfish_Obj *obj) { } void* -CFISH_Obj_To_Host_IMP(cfish_Obj *self) { +CFISH_Obj_To_Host_IMP(cfish_Obj *self, void *vcache) { + CFISH_UNUSED_VAR(vcache); dTHX; return XSBind_cfish_obj_to_sv_inc(aTHX_ self); } @@ -752,8 +753,8 @@ cfish_Class_register_with_host(cfish_Class *singleton, cfish_Class *parent) { SAVETMPS; EXTEND(SP, 2); PUSHMARK(SP); - mPUSHs((SV*)CFISH_Class_To_Host(singleton)); - mPUSHs((SV*)CFISH_Class_To_Host(parent)); + mPUSHs((SV*)CFISH_Class_To_Host(singleton, NULL)); + mPUSHs((SV*)CFISH_Class_To_Host(parent, NULL)); PUTBACK; call_pv("Clownfish::Class::_register", G_VOID | G_DISCARD); FREETMPS; @@ -768,7 +769,7 @@ cfish_Class_fresh_host_methods(cfish_String *class_name) { SAVETMPS; EXTEND(SP, 1); PUSHMARK(SP); - mPUSHs((SV*)CFISH_Str_To_Host(class_name)); + mPUSHs((SV*)CFISH_Str_To_Host(class_name, NULL)); PUTBACK; call_pv("Clownfish::Class::_fresh_host_methods", G_SCALAR); SPAGAIN; @@ -788,7 +789,7 @@ cfish_Class_find_parent_class(cfish_String *class_name) { SAVETMPS; EXTEND(SP, 1); PUSHMARK(SP); - mPUSHs((SV*)CFISH_Str_To_Host(class_name)); + mPUSHs((SV*)CFISH_Str_To_Host(class_name, NULL)); PUTBACK; call_pv("Clownfish::Class::_find_parent_class", G_SCALAR); SPAGAIN; @@ -863,7 +864,7 @@ cfish_Err_set_error(cfish_Err *error) { PUSHMARK(SP); PUSHmortal; if (error) { - mPUSHs((SV*)CFISH_Err_To_Host(error)); + mPUSHs((SV*)CFISH_Err_To_Host(error, NULL)); } else { PUSHmortal; @@ -878,7 +879,7 @@ void cfish_Err_do_throw(cfish_Err *err) { dTHX; dSP; - SV *error_sv = (SV*)CFISH_Err_To_Host(err); + SV *error_sv = (SV*)CFISH_Err_To_Host(err, NULL); CFISH_DECREF(err); ENTER; SAVETMPS; @@ -900,7 +901,7 @@ cfish_Err_throw_mess(cfish_Class *klass, cfish_String *message) { void cfish_Err_warn_mess(cfish_String *message) { dTHX; - SV *error_sv = (SV*)CFISH_Str_To_Host(message); + SV *error_sv = (SV*)CFISH_Str_To_Host(message, NULL); CFISH_DECREF(message); warn("%s", SvPV_nolen(error_sv)); SvREFCNT_dec(error_sv); @@ -955,7 +956,8 @@ cfish_Err_trap(CFISH_Err_Attempt_t routine, void *context) { /**************************** Clownfish::String *****************************/ void* -CFISH_Str_To_Host_IMP(cfish_String *self) { +CFISH_Str_To_Host_IMP(cfish_String *self, void *vcache) { + CFISH_UNUSED_VAR(vcache); dTHX; SV *sv = newSVpvn(CFISH_Str_Get_Ptr8(self), CFISH_Str_Get_Size(self)); SvUTF8_on(sv); @@ -965,7 +967,8 @@ CFISH_Str_To_Host_IMP(cfish_String *self) { /***************************** Clownfish::Blob ******************************/ void* -CFISH_Blob_To_Host_IMP(cfish_Blob *self) { +CFISH_Blob_To_Host_IMP(cfish_Blob *self, void *vcache) { + CFISH_UNUSED_VAR(vcache); dTHX; return newSVpvn(CFISH_Blob_Get_Buf(self), CFISH_Blob_Get_Size(self)); } @@ -973,7 +976,8 @@ CFISH_Blob_To_Host_IMP(cfish_Blob *self) { /**************************** Clownfish::ByteBuf ****************************/ void* -CFISH_BB_To_Host_IMP(cfish_ByteBuf *self) { +CFISH_BB_To_Host_IMP(cfish_ByteBuf *self, void *vcache) { + CFISH_UNUSED_VAR(vcache); dTHX; return newSVpvn(CFISH_BB_Get_Buf(self), CFISH_BB_Get_Size(self)); } @@ -981,7 +985,7 @@ CFISH_BB_To_Host_IMP(cfish_ByteBuf *self) { /**************************** Clownfish::Vector *****************************/ void* -CFISH_Vec_To_Host_IMP(cfish_Vector *self) { +CFISH_Vec_To_Host_IMP(cfish_Vector *self, void *vcache) { dTHX; AV *perl_array = newAV(); uint32_t num_elems = CFISH_Vec_Get_Size(self); @@ -996,7 +1000,7 @@ CFISH_Vec_To_Host_IMP(cfish_Vector *self) { } else { // Recurse for each value. - SV *const val_sv = (SV*)CFISH_Obj_To_Host(val); + SV *const val_sv = (SV*)CFISH_Obj_To_Host(val, vcache); av_store(perl_array, i, val_sv); } } @@ -1008,7 +1012,7 @@ CFISH_Vec_To_Host_IMP(cfish_Vector *self) { /***************************** Clownfish::Hash ******************************/ void* -CFISH_Hash_To_Host_IMP(cfish_Hash *self) { +CFISH_Hash_To_Host_IMP(cfish_Hash *self, void *vcache) { dTHX; HV *perl_hash = newHV(); cfish_HashIterator *iter = cfish_HashIter_new(self); @@ -1021,7 +1025,9 @@ CFISH_Hash_To_Host_IMP(cfish_Hash *self) { // Recurse for each value. cfish_Obj *val = CFISH_HashIter_Get_Value(iter); - SV *val_sv = XSBind_cfish_to_perl(aTHX_ val); + SV *val_sv = val + ? (SV*)CFISH_Obj_To_Host(val, vcache) + : newSV(0); // Using a negative `klen` argument to signal UTF-8 is undocumented // in older Perl versions but works since 5.8.0. @@ -1035,13 +1041,15 @@ CFISH_Hash_To_Host_IMP(cfish_Hash *self) { /****************************** Clownfish::Num ******************************/ void* -CFISH_Float_To_Host_IMP(cfish_Float *self) { +CFISH_Float_To_Host_IMP(cfish_Float *self, void *vcache) { + CFISH_UNUSED_VAR(vcache); dTHX; return newSVnv(self->value); } void* -CFISH_Int_To_Host_IMP(cfish_Integer *self) { +CFISH_Int_To_Host_IMP(cfish_Integer *self, void *vcache) { + CFISH_UNUSED_VAR(vcache); dTHX; SV *sv = NULL; @@ -1056,7 +1064,8 @@ CFISH_Int_To_Host_IMP(cfish_Integer *self) { } void* -CFISH_Bool_To_Host_IMP(cfish_Boolean *self) { +CFISH_Bool_To_Host_IMP(cfish_Boolean *self, void *vcache) { + CFISH_UNUSED_VAR(vcache); dTHX; return newSViv((IV)self->value); } http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/runtime/perl/xs/XSBind.h ---------------------------------------------------------------------- diff --git a/runtime/perl/xs/XSBind.h b/runtime/perl/xs/XSBind.h index 98e48c7..03ee676 100644 --- a/runtime/perl/xs/XSBind.h +++ b/runtime/perl/xs/XSBind.h @@ -104,7 +104,7 @@ cfish_XSBind_cfish_obj_to_sv_noinc(pTHX_ cfish_Obj *obj); */ static CFISH_INLINE SV* cfish_XSBind_cfish_to_perl(pTHX_ cfish_Obj *obj) { - return obj ? (SV*)CFISH_Obj_To_Host(obj) : newSV(0); + return obj ? (SV*)CFISH_Obj_To_Host(obj, NULL) : newSV(0); } /** Convert a Perl SV to a Clownfish object of class `klass`. http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/runtime/python/cfext/CFBind.c ---------------------------------------------------------------------- diff --git a/runtime/python/cfext/CFBind.c b/runtime/python/cfext/CFBind.c index cd77078..4c5780e 100644 --- a/runtime/python/cfext/CFBind.c +++ b/runtime/python/cfext/CFBind.c @@ -852,7 +852,8 @@ cfish_dec_refcount(void *vself) { /**** Obj ******************************************************************/ void* -CFISH_Obj_To_Host_IMP(cfish_Obj *self) { +CFISH_Obj_To_Host_IMP(cfish_Obj *self, void *vcache) { + CFISH_UNUSED_VAR(vcache); return CFISH_INCREF(self); } @@ -1103,28 +1104,32 @@ cfish_TestUtils_destroy_host_runtime(void *runtime) { /**** To_Host methods ******************************************************/ void* -CFISH_Str_To_Host_IMP(cfish_String *self) { +CFISH_Str_To_Host_IMP(cfish_String *self, void *vcache) { + CFISH_UNUSED_VAR(vcache); const char *ptr = CFISH_Str_Get_Ptr8(self); size_t size = CFISH_Str_Get_Size(self); return PyUnicode_FromStringAndSize(ptr, size); } void* -CFISH_Blob_To_Host_IMP(cfish_Blob *self) { +CFISH_Blob_To_Host_IMP(cfish_Blob *self, void *vcache) { + CFISH_UNUSED_VAR(vcache); const char *buf = CFISH_Blob_Get_Buf(self); size_t size = CFISH_Blob_Get_Size(self); return PyBytes_FromStringAndSize(buf, size); } void* -CFISH_BB_To_Host_IMP(cfish_ByteBuf *self) { +CFISH_BB_To_Host_IMP(cfish_ByteBuf *self, void *vcache) { + CFISH_UNUSED_VAR(vcache); CFISH_BB_To_Host_t super_to_host = CFISH_SUPER_METHOD_PTR(CFISH_BYTEBUF, CFISH_BB_To_Host); return super_to_host(self); } void* -CFISH_Vec_To_Host_IMP(cfish_Vector *self) { +CFISH_Vec_To_Host_IMP(cfish_Vector *self, void *vcache) { + CFISH_UNUSED_VAR(vcache); uint32_t num_elems = CFISH_Vec_Get_Size(self); PyObject *list = PyList_New(num_elems); @@ -1139,7 +1144,8 @@ CFISH_Vec_To_Host_IMP(cfish_Vector *self) { } void* -CFISH_Hash_To_Host_IMP(cfish_Hash *self) { +CFISH_Hash_To_Host_IMP(cfish_Hash *self, void *vcache) { + CFISH_UNUSED_VAR(vcache); PyObject *dict = PyDict_New(); // Iterate over key-value pairs. @@ -1164,18 +1170,21 @@ CFISH_Hash_To_Host_IMP(cfish_Hash *self) { } void* -CFISH_Float_To_Host_IMP(cfish_Float *self) { +CFISH_Float_To_Host_IMP(cfish_Float *self, void *vcache) { + CFISH_UNUSED_VAR(vcache); return PyFloat_FromDouble(CFISH_Float_Get_Value(self)); } void* -CFISH_Int_To_Host_IMP(cfish_Integer *self) { +CFISH_Int_To_Host_IMP(cfish_Integer *self, void *vcache) { + CFISH_UNUSED_VAR(vcache); int64_t num = CFISH_Int_Get_Value(self); return PyLong_FromLongLong(num); } void* -CFISH_Bool_To_Host_IMP(cfish_Boolean *self) { +CFISH_Bool_To_Host_IMP(cfish_Boolean *self, void *vcache) { + CFISH_UNUSED_VAR(vcache); if (self == CFISH_TRUE) { Py_INCREF(Py_True); return Py_True; http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f3eea9b2/runtime/python/cfext/CFBind.h ---------------------------------------------------------------------- diff --git a/runtime/python/cfext/CFBind.h b/runtime/python/cfext/CFBind.h index 9c8d53f..5d385fb 100644 --- a/runtime/python/cfext/CFBind.h +++ b/runtime/python/cfext/CFBind.h @@ -55,7 +55,7 @@ CFBind_migrate_cferr(void); static CFISH_INLINE PyObject* CFBind_cfish_to_py(struct cfish_Obj *obj) { if (obj != NULL) { - return (PyObject*)CFISH_Obj_To_Host(obj); + return (PyObject*)CFISH_Obj_To_Host(obj, NULL); } else { Py_RETURN_NONE; @@ -69,7 +69,7 @@ CFBind_cfish_to_py(struct cfish_Obj *obj) { static CFISH_INLINE PyObject* CFBind_cfish_to_py_zeroref(struct cfish_Obj *obj) { if (obj != NULL) { - PyObject *result = (PyObject*)CFISH_Obj_To_Host(obj); + PyObject *result = (PyObject*)CFISH_Obj_To_Host(obj, NULL); CFISH_DECREF(obj); return result; }