summaryrefslogtreecommitdiffhomepage
path: root/src/proc.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-01-18 00:09:26 +0900
committerGitHub <[email protected]>2017-01-18 00:09:26 +0900
commitc8536d977d477c87b61398d376339760ef1c77b1 (patch)
tree322dd098b7a4704d20d0ed0afb26267fa5cbab07 /src/proc.c
parentc83069860a4b5f3aa2c64621e52f7877fe2a453a (diff)
parenta68b568911f5dbf762d26ba21e4171bc7a2473e5 (diff)
downloadmruby-c8536d977d477c87b61398d376339760ef1c77b1.tar.gz
mruby-c8536d977d477c87b61398d376339760ef1c77b1.zip
Merge pull request #3362 from ksss/proc
Proc shouldn't have `initialize` method
Diffstat (limited to 'src/proc.c')
-rw-r--r--src/proc.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/proc.c b/src/proc.c
index 470547094..a75774667 100644
--- a/src/proc.c
+++ b/src/proc.c
@@ -148,19 +148,22 @@ mrb_proc_copy(struct RProc *a, struct RProc *b)
}
static mrb_value
-mrb_proc_initialize(mrb_state *mrb, mrb_value self)
+mrb_proc_s_new(mrb_state *mrb, mrb_value proc_class)
{
mrb_value blk;
+ mrb_value proc;
+ struct RProc *p;
mrb_get_args(mrb, "&", &blk);
if (mrb_nil_p(blk)) {
/* Calling Proc.new without a block is not implemented yet */
mrb_raise(mrb, E_ARGUMENT_ERROR, "tried to create Proc object without a block");
}
- else {
- mrb_proc_copy(mrb_proc_ptr(self), mrb_proc_ptr(blk));
- }
- return self;
+ p = (struct RProc *)mrb_obj_alloc(mrb, MRB_TT_PROC, mrb_class_ptr(proc_class));
+ mrb_proc_copy(p, mrb_proc_ptr(blk));
+ proc = mrb_obj_value(p);
+ mrb_funcall_with_block(mrb, proc, mrb_intern_lit(mrb, "initialize"), 0, NULL, blk);
+ return proc;
}
static mrb_value
@@ -268,7 +271,7 @@ mrb_init_proc(mrb_state *mrb)
call_irep->iseq = call_iseq;
call_irep->ilen = 1;
- mrb_define_method(mrb, mrb->proc_class, "initialize", mrb_proc_initialize, MRB_ARGS_NONE());
+ mrb_define_class_method(mrb, mrb->proc_class, "new", mrb_proc_s_new, MRB_ARGS_ANY());
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", mrb_proc_arity, MRB_ARGS_NONE());