diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-01-18 00:09:26 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-01-18 00:09:26 +0900 |
| commit | c8536d977d477c87b61398d376339760ef1c77b1 (patch) | |
| tree | 322dd098b7a4704d20d0ed0afb26267fa5cbab07 /src | |
| parent | c83069860a4b5f3aa2c64621e52f7877fe2a453a (diff) | |
| parent | a68b568911f5dbf762d26ba21e4171bc7a2473e5 (diff) | |
| download | mruby-c8536d977d477c87b61398d376339760ef1c77b1.tar.gz mruby-c8536d977d477c87b61398d376339760ef1c77b1.zip | |
Merge pull request #3362 from ksss/proc
Proc shouldn't have `initialize` method
Diffstat (limited to 'src')
| -rw-r--r-- | src/proc.c | 15 |
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()); |
