[ruby-trunk - Bug #5776] irb のトップレベルで定義したメソッドが public になる

Issue #5776 has been updated by davidbalbert (David Albert).

File 0001-make-top-level-methods-defined-in-IRB-private.patch added

I ran into this bug recently and I did a bit of investigating. This is
due to a change introduced by #3406 (r29578) that made inner method
definitions public regardless of the visibility of the method they were
defined in.

I’ve attached a patch that calls private in the irb_binding method
before returning the binding, which fixes the problem. I also verified
that context mode 3 was the only mode affected by r29578 and that IRB
works correctly when started via the command line and via IRB.start.

Bug #5776: irb のトップレベルで定義したメソッドが public になる

Author: hibariya (hi hibariya)
Status: Assigned
Priority: Normal
Assignee: keiju (Keiju Ishitsuka)
Category: lib
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2011-12-15 trunk 34056) [x86_64-darwin11.2.0]

irb のトップレベルで定義したメソッドの呼び出し制限が private ではなく public になってしまいます。


irb(main):001:0> def greeting
irb(main):002:1> ‘hi’
irb(main):003:1> end
=> nil
irb(main):004:0> val = Object.new
=> #Object:0x007fe6ca05fd80
irb(main):005:0> val.greeting
=> “hi”
irb(main):006:0> val.private_methods.grep /greeting/
=> []
irb(main):007:0> val.public_methods.grep /greeting/
=> [:greeting]