lucy_Doc* LUCY_Doc_Load_IMP(lucy_Doc *self, cfish_Obj *dump) { dTHX; cfish_Hash *source = (cfish_Hash*)CFISH_CERTIFY(dump, CFISH_HASH); cfish_String *class_name = (cfish_String*)CFISH_CERTIFY( CFISH_Hash_Fetch_Utf8(source, "_class", 6), CFISH_STRING); cfish_Class *klass = cfish_Class_singleton(class_name, NULL); lucy_Doc *loaded = (lucy_Doc*)CFISH_Class_Make_Obj(klass); cfish_Obj *doc_id = CFISH_CERTIFY( CFISH_Hash_Fetch_Utf8(source, "doc_id", 7), CFISH_OBJ); cfish_Hash *fields = (cfish_Hash*)CFISH_CERTIFY( CFISH_Hash_Fetch_Utf8(source, "fields", 6), CFISH_HASH); SV *fields_sv = XSBind_cfish_to_perl(aTHX_ (cfish_Obj*)fields); CFISH_UNUSED_VAR(self); lucy_DocIVARS *const loaded_ivars = lucy_Doc_IVARS(loaded); loaded_ivars->doc_id = (int32_t)lucy_Json_obj_to_i64(doc_id); loaded_ivars->fields = SvREFCNT_inc(SvRV(fields_sv)); SvREFCNT_dec(fields_sv); return loaded; }
void lucy_Err_throw_mess(lucy_VTable *vtable, lucy_CharBuf *message) { Lucy_Err_Make_t make = CFISH_METHOD_PTR(CFISH_CERTIFY(vtable, LUCY_VTABLE), Lucy_Err_Make); lucy_Err *err = (lucy_Err*)CFISH_CERTIFY(make(NULL), LUCY_ERR); Lucy_Err_Cat_Mess(err, message); CFISH_DECREF(message); lucy_Err_do_throw(err); }