proc.c: prohibit direct Proc allocation() like CRuby; ref #6065

This commit is contained in:
Yukihiro "Matz" Matsumoto
2023-09-28 11:37:46 +09:00
parent d298da8e72
commit 10aab4cc1b
+10 -8
View File
@@ -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 */
}