Projects

Ticket #37 (closed defect: fixed)

Opened 2 years ago

Last modified 2 years ago

Loss of respondsToSelector after singleton class assignment

Reported by: z@… Owned by: lsansonetti@…
Priority: major Milestone: MacRuby 0.2
Component: MacRuby Keywords:
Cc:

Description

annyong:MacRuby-0.1 wzph$ macirb
irb(main):001:0> s = "programming is fun"
=> "programming is fun"
irb(main):002:0> s.respond_to?( :upcase )
=> true
irb(main):003:0> s.respondsToSelector( :upcase )
=> 1
irb(main):004:0> s.class
=> String
irb(main):005:0> s.class.ancestors
=> [String, Comparable, NSMutableString, NSString, Object, NSObject, Kernel]
irb(main):006:0> def s.crazy ; puts "I'm crazy!" ; end
=> nil
irb(main):007:0> s.respond_to?( :upcase )
=> true
irb(main):008:0> s.respondsToSelector( :upcase )
NoMethodError: undefined method `respondsToSelector' for "programming is fun":String
    from (irb):8
    from /Library/Frameworks/MacRuby.framework/Versions/0.1/usr/lib/ruby/1.9.0/irb.rb:149:in `block (2 levels) in eval_input'
    from /Library/Frameworks/MacRuby.framework/Versions/0.1/usr/lib/ruby/1.9.0/irb.rb:262:in `signal_status'
    from /Library/Frameworks/MacRuby.framework/Versions/0.1/usr/lib/ruby/1.9.0/irb.rb:146:in `block in eval_input'
    from /Library/Frameworks/MacRuby.framework/Versions/0.1/usr/lib/ruby/1.9.0/irb.rb:145:in `eval_input'
    from /Library/Frameworks/MacRuby.framework/Versions/0.1/usr/lib/ruby/1.9.0/irb.rb:69:in `block in start'
    from /Library/Frameworks/MacRuby.framework/Versions/0.1/usr/lib/ruby/1.9.0/irb.rb:68:in `catch'
    from /Library/Frameworks/MacRuby.framework/Versions/0.1/usr/lib/ruby/1.9.0/irb.rb:68:in `start'
    from /usr/local/bin/macirb:12:in `<main>'
irb(main):009:0> s.class
=> String
irb(main):010:0> s.class.ancestors
=> [String, Comparable, NSMutableString, NSString, Object, NSObject, Kernel]

Change History

Changed 2 years ago by lsansonetti@…

  • status changed from new to closed
  • resolution set to fixed
  • milestone changed from MacRuby 0.1 to MacRuby 0.2

I fixed the metaclass support in trunk. Apparently your code snippet works fine.

$ macruby -v
MacRuby version 0.2 (ruby 1.9.0 2008-03-01) [universal-darwin9.0]
$ macirb
irb(main):001:0> s = "foo"
=> "foo"
irb(main):002:0> def s.foo; 42; end
=> nil
irb(main):003:0> s.foo
=> 42
irb(main):004:0> s.upcase
=> "FOO"
irb(main):005:0> s.respondsToSelector(:upcase)
=> 1
irb(main):006:0> s.performSelector(:upcase)
=> "FOO"
irb(main):007:0> "another string".foo
NoMethodError: undefined method `foo' for "another string":String
	from (irb):7
	from /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:149:in `block (2 levels) in eval_input'
[...]

Changed 2 years ago by z@…

Cheers. Should have thought of that. Just recompiled from trunk, and all is well.

Note: See TracTickets for help on using tickets.