diff options
author | Jean Boussier <jean.boussier@gmail.com> | 2022-08-25 09:28:07 +0200 |
---|---|---|
committer | Jean Boussier <jean.boussier@gmail.com> | 2022-08-25 17:49:50 +0200 |
commit | b2d0f788694c680d2abf695358e42d819b11b2ec (patch) | |
tree | 2a619ef569573044f02492213f0e41d08ce44a6a | |
parent | c2daa056934185641469e27713daf1fbe27552c4 (diff) | |
download | ruby-b2d0f788694c680d2abf695358e42d819b11b2ec.tar.gz |
Fix private methods reported as protected when called via Symbol#to_proc
Ref: bfa6a8ddc84fffe0aef5a0f91b417167e124dbbf
Ref: [Bug #18826]
-rw-r--r-- | spec/ruby/core/symbol/to_proc_spec.rb | 8 | ||||
-rw-r--r-- | vm_insnhelper.c | 1 |
2 files changed, 5 insertions, 4 deletions
diff --git a/spec/ruby/core/symbol/to_proc_spec.rb b/spec/ruby/core/symbol/to_proc_spec.rb index 81939e0046..6d9c4bc622 100644 --- a/spec/ruby/core/symbol/to_proc_spec.rb +++ b/spec/ruby/core/symbol/to_proc_spec.rb @@ -58,8 +58,8 @@ describe "Symbol#to_proc" do @a = [] singleton_class.class_eval(&body) tap(&:pub) - proc{tap(&:pro)}.should raise_error(NoMethodError) - proc{tap(&:pri)}.should raise_error(NoMethodError) + proc{tap(&:pro)}.should raise_error(NoMethodError, /protected method `pro' called/) + proc{tap(&:pri)}.should raise_error(NoMethodError, /private method `pri' called/) @a.should == [:pub] @a = [] @@ -67,8 +67,8 @@ describe "Symbol#to_proc" do o = c.new o.instance_variable_set(:@a, []) o.tap(&:pub) - proc{tap(&:pro)}.should raise_error(NoMethodError) - proc{o.tap(&:pri)}.should raise_error(NoMethodError) + proc{tap(&:pro)}.should raise_error(NoMethodError, /protected method `pro' called/) + proc{o.tap(&:pri)}.should raise_error(NoMethodError, /private method `pri' called/) o.a.should == [:pub] end end diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 68362ddf60..3c41adcdc9 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -3256,6 +3256,7 @@ vm_call_symbol(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, return vm_call_method_each_type(ec, reg_cfp, calling); case METHOD_VISI_PRIVATE: vm_cc_method_missing_reason_set(cc, MISSING_PRIVATE); + break; case METHOD_VISI_PROTECTED: vm_cc_method_missing_reason_set(cc, MISSING_PROTECTED); break; |