aboutsummaryrefslogtreecommitdiffstats
path: root/vm_args.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-10-06 06:38:08 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-10-06 06:38:08 +0000
commit629f69c9628c697b98788d83483525cc2d02d6b9 (patch)
tree37c5bf178da5201c97caf0ebbba9421bced68e2e /vm_args.c
parent59f8fa1098b647664f4ac0e3e645b8ee5ed6e065 (diff)
downloadruby-629f69c9628c697b98788d83483525cc2d02d6b9.tar.gz
vm_args.c: wrap symbol ifunc
* vm_args.c (args_setup_block_parameter): wrap a symbol in ifunc by a proc as a block parameter. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52056 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_args.c')
-rw-r--r--vm_args.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/vm_args.c b/vm_args.c
index 18911b4a5d..b031c0dc64 100644
--- a/vm_args.c
+++ b/vm_args.c
@@ -478,6 +478,10 @@ args_setup_block_parameter(rb_thread_t *th, struct rb_calling_info *calling, VAL
GetProcPtr(blockval, proc);
calling->blockptr = &proc->block;
}
+ else if (RUBY_VM_IFUNC_P(blockptr->proc)) {
+ const ID mid = (ID)((struct vm_ifunc *)blockptr->proc)->data;
+ blockval = rb_sym_to_proc(ID2SYM(mid));
+ }
else {
blockval = blockptr->proc;
}