summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorksss <[email protected]>2016-12-21 15:17:05 +0900
committerksss <[email protected]>2016-12-21 15:17:05 +0900
commit3cba13c249457cfb318c9d7d4456d99003442139 (patch)
tree147f9912382cc1ccf5dcba8c1b5e3ae19919cc56 /src
parent987daa64e387810e6871b9573bed97ae37d89a72 (diff)
downloadmruby-3cba13c249457cfb318c9d7d4456d99003442139.tar.gz
mruby-3cba13c249457cfb318c9d7d4456d99003442139.zip
Proc shouldn't have `initialize` method
Fix #3356
Diffstat (limited to 'src')
-rw-r--r--src/proc.c12
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());