mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
Merge a80f1c6c99
into d025bc230c
This commit is contained in:
commit
ac9064c565
1 changed files with 7 additions and 4 deletions
11
proc.c
11
proc.c
|
@ -716,12 +716,15 @@ rb_func_proc_dup(VALUE src_obj)
|
|||
VALUE proc_obj = TypedData_Make_Struct(rb_obj_class(src_obj), cfunc_proc_t, &proc_data_type, proc);
|
||||
|
||||
memcpy(&proc->basic, src_proc, sizeof(rb_proc_t));
|
||||
RB_OBJ_WRITTEN(proc_obj, Qundef, proc->basic.block.as.captured.self);
|
||||
RB_OBJ_WRITTEN(proc_obj, Qundef, proc->basic.block.as.captured.code.val);
|
||||
|
||||
const VALUE *src_ep = src_proc->block.as.captured.ep;
|
||||
VALUE *ep = *(VALUE **)&proc->basic.block.as.captured.ep = proc->env + VM_ENV_DATA_SIZE - 1;
|
||||
ep[VM_ENV_DATA_INDEX_FLAGS] = src_proc->block.as.captured.ep[VM_ENV_DATA_INDEX_FLAGS];
|
||||
ep[VM_ENV_DATA_INDEX_ME_CREF] = src_proc->block.as.captured.ep[VM_ENV_DATA_INDEX_ME_CREF];
|
||||
ep[VM_ENV_DATA_INDEX_SPECVAL] = src_proc->block.as.captured.ep[VM_ENV_DATA_INDEX_SPECVAL];
|
||||
ep[VM_ENV_DATA_INDEX_ENV] = src_proc->block.as.captured.ep[VM_ENV_DATA_INDEX_ENV];
|
||||
ep[VM_ENV_DATA_INDEX_FLAGS] = src_ep[VM_ENV_DATA_INDEX_FLAGS];
|
||||
ep[VM_ENV_DATA_INDEX_ME_CREF] = src_ep[VM_ENV_DATA_INDEX_ME_CREF];
|
||||
ep[VM_ENV_DATA_INDEX_SPECVAL] = src_ep[VM_ENV_DATA_INDEX_SPECVAL];
|
||||
RB_OBJ_WRITE(proc_obj, &ep[VM_ENV_DATA_INDEX_ENV], src_ep[VM_ENV_DATA_INDEX_ENV]);
|
||||
|
||||
return proc_obj;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue