Charles Strahan
2010-Jul-31 22:34 UTC
[Ironruby-core] Can''t subclass IronRuby libraries ("super" doesn''t resolve correctly)
I could use some help with Issue #4957 (http://ironruby.codeplex.com/workitem/4957). Does anyone know where super class ctors are resolved?? I haven''t been able to spot where they are resolved in the code. -Charles
Tomas Matousek
2010-Aug-01 05:10 UTC
[Ironruby-core] Can''t subclass IronRuby libraries ("super" doesn''t resolve correctly)
Place breakpoint in file SuperCallAction.cs after the call to method = targetClass.ResolveSuperMethodNoLock(currentMethodName, currentDeclaringModule).InvalidateSitesOnOverride().Info; this finds the method. You can see that it is a RubyLibraryMethodInfo (i.e. a Ruby method defined in C# library) and has two overloads (MethodBases property) {IronRuby.Builtins.RubyIO Reinitialize(IronRuby.Builtins.RubyIO, Int32, IronRuby.Builtins.MutableString)} {IronRuby.Builtins.RubyIO Reinitialize(IronRuby.Builtins.RubyIO, Int32, Int32)} This method is defined in IOOps and expects the first argument to be a file descriptor. If we look at File''s private instance methods in MRI we see: irb(main):004:0> File.private_instance_methods(false).sort => ["initialize"] While in IronRuby we get a different result:>>> File.private_instance_methods(false).sort=> ["blockdev?", "chardev?", "directory?", "executable?", "executable_real?", "exist?", "exists?", "file?", "grpowned?", "identical?", "owned?", "pipe?", "readable?", "readable_real?", "setgid?", "setuid?", "size", "size?", "socket?", "stic ky?", "symlink?", "writable?", "writable_real?", "zero?"] This means there are two bugs: 1) initialize is missing from File 2) bunch of private methods shouldn''t be there Have a fix almost ready. Tomas -----Original Message----- From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Charles Strahan Sent: Saturday, July 31, 2010 3:35 PM To: ironruby-core at rubyforge.org Subject: [Ironruby-core] Can''t subclass IronRuby libraries ("super" doesn''t resolve correctly) I could use some help with Issue #4957 (http://ironruby.codeplex.com/workitem/4957). Does anyone know where super class ctors are resolved?? I haven''t been able to spot where they are resolved in the code. -Charles _______________________________________________ Ironruby-core mailing list Ironruby-core at rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core
Charles Strahan
2010-Aug-01 17:32 UTC
[Ironruby-core] Can''t subclass IronRuby libraries ("super" doesn''t resolve correctly)
Awesome - I just saw that this was marked as fixed on codeplex. Thanks for taking the time to walk me through debugging this - I''m going to try it out a little later today. I would have tried it out yesterday, but it was bed time on my side of the planet :) (12:10 AM, CDT). Btw, sorry for spamming the mailing list - I kept getting bounce back notifications, despite the fact that each email I sent to the ML shows up on rubyforge (perhaps because of html formatting?), and I presume everyone received an email too. Arg...>>>>Your message >>>> >>>> To: ironruby-core at rubyforge.org >>>> Subject: [Ironruby-core] Can''t subclass IronRuby libraries ("super" >>>>doesn''tresolve correctly) >>>> Sent: Sat, 31 Jul 2010 15:34:00 -0700 >>>> >>>>did not reach the following recipient(s):-Charles On Sun, Aug 1, 2010 at 12:10 AM, Tomas Matousek <Tomas.Matousek at microsoft.com> wrote:> Place breakpoint in file SuperCallAction.cs after the call to > > method = targetClass.ResolveSuperMethodNoLock(currentMethodName, currentDeclaringModule).InvalidateSitesOnOverride().Info; > > this finds the method. You can see that it is a RubyLibraryMethodInfo (i.e. a Ruby method defined in C# library) and has two overloads (MethodBases property) > {IronRuby.Builtins.RubyIO Reinitialize(IronRuby.Builtins.RubyIO, Int32, IronRuby.Builtins.MutableString)} > {IronRuby.Builtins.RubyIO Reinitialize(IronRuby.Builtins.RubyIO, Int32, Int32)} > > This method is defined in IOOps and expects the first argument to be a file descriptor. > If we look at File''s private instance methods in MRI we see: > > irb(main):004:0> File.private_instance_methods(false).sort > => ["initialize"] > > While in IronRuby we get a different result: > >>>> File.private_instance_methods(false).sort > => ["blockdev?", "chardev?", "directory?", "executable?", "executable_real?", "exist?", "exists?", "file?", "grpowned?", > ?"identical?", "owned?", "pipe?", "readable?", "readable_real?", "setgid?", "setuid?", "size", "size?", "socket?", "stic > ky?", "symlink?", "writable?", "writable_real?", "zero?"] > > This means there are two bugs: > 1) initialize is missing from File > 2) bunch of private methods shouldn''t be there > > Have a fix almost ready. > > Tomas > > -----Original Message----- > From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Charles Strahan > Sent: Saturday, July 31, 2010 3:35 PM > To: ironruby-core at rubyforge.org > Subject: [Ironruby-core] Can''t subclass IronRuby libraries ("super" doesn''t resolve correctly) > > I could use some help with Issue #4957 > (http://ironruby.codeplex.com/workitem/4957). > > Does anyone know where super class ctors are resolved?? I haven''t been able to spot where they are resolved in the code. > > -Charles > _______________________________________________ > Ironruby-core mailing list > Ironruby-core at rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core > > _______________________________________________ > Ironruby-core mailing list > Ironruby-core at rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core >