From: Eric Wong <normalperson@...> Date: 2014-09-12T10:22:04+00:00 Subject: [ruby-core:64995] Re: [ruby-trunk - Bug #10212] MRI is not for lambda calculus SASADA Koichi <ko1@atdot.net> wrote: > (2014/09/12 19:03), Eric Wong wrote: > > Yes, I think the following API is OK. rb_proc_t is big. > > The new inline rb_proc_alloc() takes 7(!) parameters. > > Maybe we can drop klass since that is always rb_cProc. > > Nice. > > Additionally, I recommend to move the definition from vm_core.h to vm.c OK, I think I'll move the inline to vm.c > (and expose it) because proc_dup() in proc.c is minor function. But exposing it seems worse, even. In other words: the new rb_proc_alloc is the wrong interface for rb_proc_dup. I like the following much more (still using rb_proc_wrap): --- a/proc.c +++ b/proc.c @@ -106,12 +106,13 @@ rb_obj_is_proc(VALUE proc) static VALUE proc_dup(VALUE self) { - rb_proc_t *src; + rb_proc_t *src, *dst; GetProcPtr(self, src); - return rb_proc_alloc(rb_cProc, &src->block, src->envval, src->blockprocval, - src->safe_level, src->is_from_method, src->is_lambda); + dst = ALLOC(rb_proc_t); + *dst = *src; + return rb_proc_wrap(rb_cProc, dst); } /* :nodoc: */