From 7f887f1928293c6281af51e699d806338ff643ae Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 26 May 2023 12:48:34 +0900 Subject: [PATCH] class.c (mrb_class_initialize): check duplicated initialization --- src/class.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/class.c b/src/class.c index 21f512147..46ce0c547 100644 --- a/src/class.c +++ b/src/class.c @@ -1999,15 +1999,19 @@ mrb_obj_new(mrb_state *mrb, struct RClass *c, mrb_int argc, const mrb_value *arg } static mrb_value -mrb_class_initialize(mrb_state *mrb, mrb_value c) +mrb_class_initialize(mrb_state *mrb, mrb_value obj) { mrb_value a, b; + struct RClass *c = mrb_class_ptr(obj); + if (c->iv) { + mrb_raise(mrb, E_TYPE_ERROR, "already initialized class"); + } mrb_get_args(mrb, "|C&", &a, &b); if (!mrb_nil_p(b)) { - mrb_yield_with_class(mrb, b, 1, &c, c, mrb_class_ptr(c)); + mrb_yield_with_class(mrb, b, 1, &obj, obj, c); } - return c; + return obj; } static mrb_value