File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -716,12 +716,15 @@ rb_func_proc_dup(VALUE src_obj)
716716 VALUE proc_obj = TypedData_Make_Struct (rb_obj_class (src_obj ), cfunc_proc_t , & proc_data_type , proc );
717717
718718 memcpy (& proc -> basic , src_proc , sizeof (rb_proc_t ));
719+ RB_OBJ_WRITTEN (proc_obj , Qundef , proc -> basic .block .as .captured .self );
720+ RB_OBJ_WRITTEN (proc_obj , Qundef , proc -> basic .block .as .captured .code .val );
719721
722+ const VALUE * src_ep = src_proc -> block .as .captured .ep ;
720723 VALUE * ep = * (VALUE * * )& proc -> basic .block .as .captured .ep = proc -> env + VM_ENV_DATA_SIZE - 1 ;
721- ep [VM_ENV_DATA_INDEX_FLAGS ] = src_proc -> block . as . captured . ep [VM_ENV_DATA_INDEX_FLAGS ];
722- ep [VM_ENV_DATA_INDEX_ME_CREF ] = src_proc -> block . as . captured . ep [VM_ENV_DATA_INDEX_ME_CREF ];
723- ep [VM_ENV_DATA_INDEX_SPECVAL ] = src_proc -> block . as . captured . ep [VM_ENV_DATA_INDEX_SPECVAL ];
724- ep [VM_ENV_DATA_INDEX_ENV ] = src_proc -> block . as . captured . ep [VM_ENV_DATA_INDEX_ENV ];
724+ ep [VM_ENV_DATA_INDEX_FLAGS ] = src_ep [VM_ENV_DATA_INDEX_FLAGS ];
725+ ep [VM_ENV_DATA_INDEX_ME_CREF ] = src_ep [VM_ENV_DATA_INDEX_ME_CREF ];
726+ ep [VM_ENV_DATA_INDEX_SPECVAL ] = src_ep [VM_ENV_DATA_INDEX_SPECVAL ];
727+ RB_OBJ_WRITE ( proc_obj , & ep [VM_ENV_DATA_INDEX_ENV ], src_ep [VM_ENV_DATA_INDEX_ENV ]) ;
725728
726729 return proc_obj ;
727730}
You can’t perform that action at this time.
0 commit comments