@@ -4950,6 +4950,7 @@ rb_vm_cc_general(const struct rb_callcache *cc)
49504950{
49514951 VM_ASSERT (IMEMO_TYPE_P (cc , imemo_callcache ));
49524952 VM_ASSERT (cc != vm_cc_empty ());
4953+ VM_ASSERT (FL_TEST_RAW ((VALUE )cc , VM_CALLCACHE_BLOCK ) == 0 );
49534954
49544955 * (vm_call_handler * )& cc -> call_ = vm_call_general ;
49554956}
@@ -5989,22 +5990,22 @@ vm_invokeblock_fastpath(struct rb_execution_context_struct *ec,
59895990 if (vm_block_handler_type (block_handler ) == block_handler_type_iseq ) {
59905991 // what to do
59915992 const struct rb_captured_block * captured = VM_BH_TO_ISEQ_BLOCK (block_handler );
5992- const rb_iseq_t * iseq = rb_iseq_check (captured -> code .iseq );
5993+ const rb_iseq_t * callee_iseq = rb_iseq_check (captured -> code .iseq );
59935994
59945995 // check cache
5995- if (LIKELY (cd -> cc -> klass == (VALUE )iseq )) {
5996+ if (LIKELY (cd -> cc -> klass == (VALUE )callee_iseq )) {
59965997 ret = cd -> cc ;
59975998 }
59985999 else {
5999- if (rb_simple_iseq_p (iseq ) &&
6000+ if (rb_simple_iseq_p (callee_iseq ) &&
60006001 (vm_ci_flag (ci ) & VM_CALL_ARGS_SIMPLE ) &&
6001- vm_ci_argc (ci ) == (unsigned int )ISEQ_BODY (iseq )-> param .lead_num &&
6002- ISEQ_BODY (iseq )-> param .flags .ambiguous_param0 ) {
6003- if (!ISEQ_BODY (iseq )-> block_ccs ) {
6004- ISEQ_BODY (iseq )-> block_ccs = ZALLOC (struct rb_class_cc_entries );
6002+ vm_ci_argc (ci ) == (unsigned int )ISEQ_BODY (callee_iseq )-> param .lead_num &&
6003+ ISEQ_BODY (callee_iseq )-> param .flags .ambiguous_param0 ) {
6004+ if (!ISEQ_BODY (callee_iseq )-> block_ccs ) {
6005+ ISEQ_BODY (callee_iseq )-> block_ccs = ZALLOC (struct rb_class_cc_entries );
60056006 }
60066007
6007- struct rb_class_cc_entries * ccs = ISEQ_BODY (iseq )-> block_ccs ;
6008+ struct rb_class_cc_entries * ccs = ISEQ_BODY (callee_iseq )-> block_ccs ;
60086009 unsigned int argc = vm_ci_argc (ci );
60096010 unsigned int flag = vm_ci_flag (ci );
60106011
@@ -6013,11 +6014,11 @@ vm_invokeblock_fastpath(struct rb_execution_context_struct *ec,
60136014 return ccs -> entries [i ].cc ;
60146015 }
60156016 }
6016- ret = vm_cc_new ((VALUE )iseq , NULL , vm_invoke_iseq_block_cc , cc_type_block );
6017- vm_ccs_push ((VALUE )iseq , ISEQ_BODY (iseq )-> block_ccs , ci , ret );
6017+ ret = vm_cc_new ((VALUE )callee_iseq , NULL , vm_invoke_iseq_block_cc , cc_type_block );
60186018 cd -> cc = ret ;
6019- RB_OBJ_WRITTEN ((VALUE )iseq , Qundef , ret );
6020- RUBY_ASSERT (ret -> klass == (VALUE )iseq );
6019+ RB_OBJ_WRITTEN (reg_cfp -> iseq , Qundef , ret );
6020+ vm_ccs_push ((VALUE )callee_iseq , ISEQ_BODY (callee_iseq )-> block_ccs , ci , ret );
6021+ RUBY_ASSERT (ret -> klass == (VALUE )callee_iseq );
60216022 }
60226023 }
60236024 }
0 commit comments