Skip to content

Commit 0ecdd84

Browse files
committed
2 parents 9e78af3 + 4e27746 commit 0ecdd84

1 file changed

Lines changed: 20 additions & 18 deletions

File tree

src/mrb_msgpack.cpp

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

120126
static void mrb_msgpack_pack_value(mrb_state* mrb, mrb_value self, msgpack::packer<mrb_msgpack_sbo_writer>& pk);
121127
static 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
202208
mrb_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
216222
mrb_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

226232
MRB_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
270272
mrb_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
}
281283
MRB_END_DECL
282284
/* ------------------------------------------------------------------------

0 commit comments

Comments
 (0)