@@ -115,7 +115,13 @@ MRB_CPP_DEFINE_TYPE(mrb_msgpack_ctx, mrb_msgpack_ctx);
115115#define MRB_MSGPACK_DEFAULT_SYMBOL_TYPE 0U
116116#endif
117117
118- #define MRB_MSGPACK_CONTEXT (mrb ) (static_cast <mrb_msgpack_ctx*>(mrb_cptr(mrb_gv_get((mrb), MRB_SYM(__msgpack__ctx)))))
118+ #define MRB_MSGPACK_CONTEXT (mrb ) \
119+ ([mrb]() -> mrb_msgpack_ctx* { \
120+ mrb_value v = mrb_gv_get ((mrb), MRB_SYM (__msgpack__ctx)); \
121+ mrb_assert (mrb_cptr_p (v)); \
122+ return static_cast <mrb_msgpack_ctx*>(mrb_cptr (v)); \
123+ }())
124+
119125
120126static void mrb_msgpack_pack_value (mrb_state* mrb, mrb_value self, msgpack::packer<mrb_msgpack_sbo_writer>& pk);
121127static void mrb_msgpack_pack_array_value (mrb_state* mrb, mrb_value self, msgpack::packer<mrb_msgpack_sbo_writer>& pk);
@@ -202,12 +208,12 @@ MRB_API void
202208mrb_msgpack_register_pack_type_value (mrb_state *mrb, int8_t type, mrb_value klass, mrb_value proc)
203209{
204210 ensure_ext_registry (mrb);
205- if (type < 0 || type > 127 ) mrb_raise (mrb, E_RANGE_ERROR, " ext type out of range" );
206- if (mrb_nil_p (proc) || mrb_type (proc) != MRB_TT_PROC) mrb_raise (mrb, E_TYPE_ERROR, " packer must be a Proc" );
211+ if (unlikely ( type < 0 || type > 127 ) ) mrb_raise (mrb, E_RANGE_ERROR, " ext type out of range" );
212+ if (unlikely ( mrb_type (proc) != MRB_TT_PROC) ) mrb_raise (mrb, E_TYPE_ERROR, " packer must be a Proc" );
207213
208214 mrb_value packers = ext_packers_hash (mrb);
209215 mrb_value cfg = mrb_hash_new_capa (mrb, 2 );
210- mrb_hash_set (mrb, cfg, mrb_symbol_value (MRB_SYM (type)), mrb_int_value (mrb, type));
216+ mrb_hash_set (mrb, cfg, mrb_symbol_value (MRB_SYM (type)), mrb_fixnum_value ( type));
211217 mrb_hash_set (mrb, cfg, mrb_symbol_value (MRB_SYM (packer)), proc);
212218 mrb_hash_set (mrb, packers, klass, cfg);
213219}
@@ -216,11 +222,11 @@ MRB_API void
216222mrb_msgpack_register_unpack_type_value (mrb_state *mrb, int8_t type, mrb_value proc)
217223{
218224 ensure_ext_registry (mrb);
219- if (type < 0 || type > 127 ) mrb_raise (mrb, E_RANGE_ERROR, " ext type out of range" );
220- if (mrb_nil_p (proc) || mrb_type (proc) != MRB_TT_PROC) mrb_raise (mrb, E_TYPE_ERROR, " unpacker must be a Proc" );
225+ if (unlikely ( type < 0 || type > 127 ) ) mrb_raise (mrb, E_RANGE_ERROR, " ext type out of range" );
226+ if (unlikely ( mrb_type (proc) != MRB_TT_PROC) ) mrb_raise (mrb, E_TYPE_ERROR, " unpacker must be a Proc" );
221227
222228 mrb_value unpackers = ext_unpackers_hash (mrb);
223- mrb_hash_set (mrb, unpackers, mrb_int_value (mrb, type), proc);
229+ mrb_hash_set (mrb, unpackers, mrb_fixnum_value ( type), proc);
224230}
225231
226232MRB_API void
@@ -231,11 +237,9 @@ mrb_msgpack_register_pack_type_cfunc(mrb_state *mrb,
231237 mrb_int argc,
232238 const mrb_value *argv)
233239{
240+ if (unlikely (klass == NULL )) mrb_raise (mrb, E_ARGUMENT_ERROR, " klass is NULL" );
241+ if (unlikely (cfunc == NULL )) mrb_raise (mrb, E_ARGUMENT_ERROR, " pack callback cannot be NULL" );
234242 ensure_ext_registry (mrb);
235- if (!klass) mrb_raise (mrb, E_ARGUMENT_ERROR, " klass is NULL" );
236- if (cfunc == NULL ) {
237- mrb_raise (mrb, E_ARGUMENT_ERROR, " pack callback cannot be NULL" );
238- }
239243
240244 struct RProc *rproc =
241245 mrb_proc_new_cfunc_with_env (mrb, cfunc, argc, argv);
@@ -253,9 +257,7 @@ mrb_msgpack_register_unpack_type_cfunc(mrb_state *mrb,
253257 const mrb_value *argv)
254258{
255259 ensure_ext_registry (mrb);
256- if (cfunc == NULL ) {
257- mrb_raise (mrb, E_ARGUMENT_ERROR, " unpack callback cannot be NULL" );
258- }
260+ if (unlikely (cfunc == NULL )) mrb_raise (mrb, E_ARGUMENT_ERROR, " unpack callback cannot be NULL" );
259261
260262 struct RProc *rproc =
261263 mrb_proc_new_cfunc_with_env (mrb, cfunc, argc, argv);
@@ -270,13 +272,13 @@ MRB_API void
270272mrb_msgpack_teardown (mrb_state *mrb)
271273{
272274 mrb_value ctxv = mrb_gv_get (mrb, MRB_SYM (__msgpack__ctx));
273- if (! mrb_nil_p ( ctxv)) {
275+ if (likely ( mrb_cptr_p ( ctxv) )) {
274276 void *p = mrb_cptr (ctxv);
275- if (p) mrb_free (mrb, p);
277+ mrb_free (mrb, p);
276278 }
277279
278- mrb_gv_set (mrb, MRB_SYM (__msgpack_ext_registry__), mrb_nil_value ( ));
279- mrb_gv_set (mrb, MRB_SYM (__msgpack__ctx), mrb_nil_value ( ));
280+ mrb_gv_remove (mrb, MRB_SYM (__msgpack_ext_registry__));
281+ mrb_gv_remove (mrb, MRB_SYM (__msgpack__ctx));
280282}
281283MRB_END_DECL
282284/* ------------------------------------------------------------------------
0 commit comments