From 10aab4cc1b3bb055bf1011d6d6b055b16edd6c89 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 28 Sep 2023 11:37:46 +0900 Subject: [PATCH] proc.c: prohibit direct Proc allocation() like CRuby; ref #6065 --- src/proc.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/proc.c b/src/proc.c index ac601a4b8..d0a6c9b88 100644 --- a/src/proc.c +++ b/src/proc.c @@ -490,17 +490,19 @@ void mrb_init_proc(mrb_state *mrb) { mrb_method_t m; + struct RClass *pc = mrb->proc_class; - mrb_define_class_method(mrb, mrb->proc_class, "new", mrb_proc_s_new, MRB_ARGS_NONE()|MRB_ARGS_BLOCK()); - mrb_define_method(mrb, mrb->proc_class, "initialize_copy", mrb_proc_init_copy, MRB_ARGS_REQ(1)); - mrb_define_method(mrb, mrb->proc_class, "arity", proc_arity, MRB_ARGS_NONE()); /* 15.2.17.4.2 */ - mrb_define_method(mrb, mrb->proc_class, "==", proc_eql, MRB_ARGS_REQ(1)); - mrb_define_method(mrb, mrb->proc_class, "eql?", proc_eql, MRB_ARGS_REQ(1)); - mrb_define_method(mrb, mrb->proc_class, "hash", proc_hash, MRB_ARGS_NONE()); /* 15.2.17.4.2 */ + MRB_SET_INSTANCE_TT(pc, MRB_TT_UNDEF); + mrb_define_class_method(mrb, pc, "new", mrb_proc_s_new, MRB_ARGS_NONE()|MRB_ARGS_BLOCK()); + mrb_define_method(mrb, pc, "initialize_copy", mrb_proc_init_copy, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, pc, "arity", proc_arity, MRB_ARGS_NONE()); /* 15.2.17.4.2 */ + mrb_define_method(mrb, pc, "==", proc_eql, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, pc, "eql?", proc_eql, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, pc, "hash", proc_hash, MRB_ARGS_NONE()); /* 15.2.17.4.2 */ MRB_METHOD_FROM_PROC(m, &call_proc); - mrb_define_method_raw(mrb, mrb->proc_class, MRB_SYM(call), m); /* 15.2.17.4.3 */ - mrb_define_method_raw(mrb, mrb->proc_class, MRB_OPSYM(aref), m); /* 15.2.17.4.1 */ + mrb_define_method_raw(mrb, pc, MRB_SYM(call), m); /* 15.2.17.4.3 */ + mrb_define_method_raw(mrb, pc, MRB_OPSYM(aref), m); /* 15.2.17.4.1 */ mrb_define_method(mrb, mrb->kernel_module, "lambda", proc_lambda, MRB_ARGS_NONE()|MRB_ARGS_BLOCK()); /* 15.3.1.3.27 */ }