cfish_Obj* LUCY_Doc_Extract_IMP(lucy_Doc *self, cfish_String *field) { lucy_DocIVARS *const ivars = lucy_Doc_IVARS(self); cfish_Obj *retval = NULL; SV **sv_ptr = hv_fetch((HV*)ivars->fields, CFISH_Str_Get_Ptr8(field), CFISH_Str_Get_Size(field), 0); if (sv_ptr && XSBind_sv_defined(*sv_ptr)) { SV *const sv = *sv_ptr; if (sv_isobject(sv) && sv_derived_from(sv, "Clownfish::Obj")) { IV tmp = SvIV(SvRV(sv)); retval = CFISH_INCREF(INT2PTR(cfish_Obj*, tmp)); }
lucy_Obj* lucy_Doc_extract(lucy_Doc *self, lucy_CharBuf *field, lucy_ViewCharBuf *target) { lucy_Obj *retval = NULL; SV **sv_ptr = hv_fetch((HV*)self->fields, (char*)Lucy_CB_Get_Ptr8(field), Lucy_CB_Get_Size(field), 0); if (sv_ptr && XSBind_sv_defined(*sv_ptr)) { SV *const sv = *sv_ptr; if (sv_isobject(sv) && sv_derived_from(sv, "Clownfish::Obj")) { IV tmp = SvIV(SvRV(sv)); retval = INT2PTR(lucy_Obj*, tmp); }
kino_CharBuf* kino_Host_callback_str(void *vobj, char *method, uint32_t num_args, ...) { va_list args; SV *temp_retval; kino_CharBuf *retval = NULL; va_start(args, num_args); temp_retval = S_do_callback_sv(vobj, method, num_args, args); va_end(args); // Make a stringified copy. if (temp_retval && XSBind_sv_defined(temp_retval)) { STRLEN len; char *ptr = SvPVutf8(temp_retval, len); retval = kino_CB_new_from_trusted_utf8(ptr, len); } FREETMPS; LEAVE; return retval; }