@@ -1834,7 +1834,6 @@ mrb_vm_exec(mrb_state *mrb, const struct RProc *begin_proc, const mrb_code *iseq
|
1834 | 1834 | |
1835 | 1835 | CASE(OP_SSEND, BBB) { |
1836 | 1836 | regs[a] = regs[0]; |
1837 | | -insn = OP_SEND; |
1838 | 1837 | } |
1839 | 1838 | goto L_SENDB; |
1840 | 1839 | |
@@ -1886,7 +1885,7 @@ mrb_vm_exec(mrb_state *mrb, const struct RProc *begin_proc, const mrb_code *iseq
|
1886 | 1885 | } |
1887 | 1886 | |
1888 | 1887 | mrb_assert(bidx < irep->nregs); |
1889 | | -if (insn == OP_SEND) { |
| 1888 | +if (insn == OP_SEND || insn == OP_SSEND) { |
1890 | 1889 | /* clear block argument */ |
1891 | 1890 | SET_NIL_VALUE(regs[new_bidx]); |
1892 | 1891 | SET_NIL_VALUE(blk); |
@@ -1907,6 +1906,16 @@ mrb_vm_exec(mrb_state *mrb, const struct RProc *begin_proc, const mrb_code *iseq
|
1907 | 1906 | else { |
1908 | 1907 | ci->mid = mid; |
1909 | 1908 | } |
| 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 | + } |
1910 | 1919 | ci->cci = CINFO_NONE; |
1911 | 1920 | |
1912 | 1921 | if (MRB_METHOD_PROC_P(m)) { |
|