File tree Expand file tree Collapse file tree 1 file changed +7
-4
lines changed Expand file tree Collapse file tree 1 file changed +7
-4
lines changed Original file line number Diff line number Diff line change @@ -716,12 +716,15 @@ rb_func_proc_dup(VALUE src_obj)
716
716
VALUE proc_obj = TypedData_Make_Struct (rb_obj_class (src_obj ), cfunc_proc_t , & proc_data_type , proc );
717
717
718
718
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 );
719
721
722
+ const VALUE * src_ep = src_proc -> block .as .captured .ep ;
720
723
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 ]) ;
725
728
726
729
return proc_obj ;
727
730
}
You can’t perform that action at this time.
0 commit comments