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 >