Files | Admin

Notes:

Release Name: 0.3.1 (1.8.2)

Notes:
Patches the ruby source (v1.8.2, may work for other versions) such that defining a method in a module or class using def returns an UnboundMethod object, and defining a singleton method returns a Method. Thanks go to Nobuyoshi Nakada for helping with improving the patch.

irb(main):001:0> def a
irb(main):002:1> end
=> #
irb(main):003:0> class A
irb(main):004:1>   def m
irb(main):005:2>   end
irb(main):006:1> end
=> #
irb(main):007:0> a = "hello"
=> "hello"
irb(main):008:0> def a.m
irb(main):009:1> end
=> #
irb(main):010:0> private def a
irb(main):011:1> end
=> Object
irb(main):012:0> self.class.private_instance_methods(false)
=> ["initialize", "irb_binding", "DelegateClass", "a"]
irb(main):013:0> alias b a
=> nil
irb(main):014:0> self.class.private_instance_methods(false)
=> ["b", "initialize", "irb_binding", "DelegateClass", "a"]
irb(main):015:0> m = self.class.instance_method(:a)
=> #
irb(main):016:0> public m
=> Object
irb(main):017:0> self.class.private_instance_methods(false)
=> ["b", "initialize", "irb_binding", "DelegateClass"]
irb(main):018:0> self.class.public_instance_methods(false)
=> ["a"]
irb(main):019:0> def a
irb(main):020:1> end
=> #
irb(main):021:0> private m
TypeError: method a in Object changed
        from (irb):21:in `private'
        from (irb):21
        from :0
irb(main):022:0> self.class.send(:undef_method, :a)
=> Object
irb(main):023:0> public m
TypeError: method a in Object disappeared
        from (irb):23:in `public'
        from (irb):23
        from :0
irb(main):024:0> m = String.instance_method(:each)
=> #
irb(main):025:0> public m
TypeError: class mismatch - String for Object
        from (irb):25:in `public'
        from (irb):25
        from :0



Changes: * Fixes a segfault in Module#module_method (bug 002887)