diff options
| author | ksss <[email protected]> | 2016-12-21 15:17:05 +0900 |
|---|---|---|
| committer | ksss <[email protected]> | 2016-12-21 15:17:05 +0900 |
| commit | 3cba13c249457cfb318c9d7d4456d99003442139 (patch) | |
| tree | 147f9912382cc1ccf5dcba8c1b5e3ae19919cc56 /src | |
| parent | 987daa64e387810e6871b9573bed97ae37d89a72 (diff) | |
| download | mruby-3cba13c249457cfb318c9d7d4456d99003442139.tar.gz mruby-3cba13c249457cfb318c9d7d4456d99003442139.zip | |
Proc shouldn't have `initialize` method
Fix #3356
Diffstat (limited to 'src')
| -rw-r--r-- | src/proc.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/proc.c b/src/proc.c index 470547094..0fb38359f 100644 --- a/src/proc.c +++ b/src/proc.c @@ -148,19 +148,19 @@ 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; + 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)); + return mrb_obj_value(p); } static mrb_value @@ -268,7 +268,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()); |
