@@ -1834,7 +1834,6 @@ mrb_vm_exec(mrb_state *mrb, const struct RProc *begin_proc, const mrb_code *iseq
18341834
18351835 CASE (OP_SSEND , BBB ) {
18361836 regs [a ] = regs [0 ];
1837- insn = OP_SEND ;
18381837 }
18391838 goto L_SENDB ;
18401839
@@ -1886,7 +1885,7 @@ mrb_vm_exec(mrb_state *mrb, const struct RProc *begin_proc, const mrb_code *iseq
18861885 }
18871886
18881887 mrb_assert (bidx < irep -> nregs );
1889- if (insn == OP_SEND ) {
1888+ if (insn == OP_SEND || insn == OP_SSEND ) {
18901889 /* clear block argument */
18911890 SET_NIL_VALUE (regs [new_bidx ]);
18921891 SET_NIL_VALUE (blk );
@@ -1907,6 +1906,16 @@ mrb_vm_exec(mrb_state *mrb, const struct RProc *begin_proc, const mrb_code *iseq
19071906 else {
19081907 ci -> mid = mid ;
19091908 }
1909+ if (insn == OP_SEND || insn == OP_SENDB ) {
1910+ if (m .flags & MRB_METHOD_PRIVATE_FL ) {
1911+ mrb_value args = (ci -> n == 15 ) ? regs [1 ] : mrb_ary_new_from_values (mrb , ci -> n , regs + 1 );
1912+ mrb_no_method_error (mrb , mid , args , "private method '%n' called for %T" , mid , recv );
1913+ }
1914+ else if ((m .flags & MRB_METHOD_PROTECTED_FL ) && mrb_obj_is_kind_of (mrb , recv , ci -> u .target_class )) {
1915+ mrb_value args = (ci -> n == 15 ) ? regs [1 ] : mrb_ary_new_from_values (mrb , ci -> n , regs + 1 );
1916+ mrb_no_method_error (mrb , mid , args , "proteced method '%n' called for %T" , mid , recv );
1917+ }
1918+ }
19101919 ci -> cci = CINFO_NONE ;
19111920
19121921 if (MRB_METHOD_PROC_P (m )) {
0 commit comments