Interface generic w/ generic methods


#1

Hi
I’m observing the following behavior when I try to implement a CLR
interface
with generic method definitions.

So let’s say an interface contains the following method definition

public interface IRubyEngine {
T CreateInstance(RubyClass rubyClass);
}

in ruby
class MyEngine
include IRubyEngine
end

So far so good nothing has actually been created yet.

MyEngine.new => raises

(master) » ir
IronRuby 0.4.0.0 on .NET 2.0.50727.4918
Copyright © Microsoft Corporation. All rights reserved.

require ‘bin/System.Web.Mvc.IronRuby.dll’
=> true

class MyEngine
… include System::Web::Mvc::IronRuby::Core::IRubyEngine
… end
=> MyEngine

MyEngine.new
mscorlib:0:in _TermCreateClass': Method 'ExecuteFile' in type 'IronRuby.Classes.Object$1' from assembly 'Snippets.scripting, Version=0.0.0. 0, Culture=neutral, PublicKeyToken=null' does not have an implementation. (System::TypeLoadException) from mscorlib:0:inCreateTypeNoLock’
from mscorlib:0:in CreateType' from c:\tools\ironruby\ndp\fx\src\core\microsoft\scripting\Actions\DynamicMetaObjectBinder.cs:96:inBind’
from
c:\tools\ironruby\ndp\fx\src\core\microsoft\scripting\Actions\CallSiteBinder.cs:79:in
`BindDelegate’
from :0

exit

in the console output above it complains about a different method but
the
idea is the same. that method def was T ExecuteFile(string path, bool
throwIfNotExist);

Do I put this on codeplex or is that the expected behavior?

Met vriendelijke groeten - Best regards - Salutations
Ivan Porto C.
Blog: http://flanders.co.nz
Twitter: http://twitter.com/casualjim
Author of IronRuby in Action (http://manning.com/carrero)


#2

Two points: 1) We should probably have a clearer error message in this
case. 2) That seems to be a bug since the behavior is different if
IRubyEngine declares non-generic methods.

Please file a bug on CP with both points.

JD

…there is no try

From: removed_email_address@domain.invalid
[mailto:removed_email_address@domain.invalid] On Behalf Of Ivan Porto
Carrero
Sent: Tuesday, May 19, 2009 11:54 PM
To: ironruby-core
Subject: [Ironruby-core] interface generic w/ generic methods

Hi

I’m observing the following behavior when I try to implement a CLR
interface with generic method definitions.

So let’s say an interface contains the following method definition

public interface IRubyEngine {
T CreateInstance(RubyClass rubyClass);
}

in ruby
class MyEngine
include IRubyEngine
end

So far so good nothing has actually been created yet.

MyEngine.new => raises

(master) » ir
IronRuby 0.4.0.0 on .NET 2.0.50727.4918
Copyright © Microsoft Corporation. All rights reserved.

require ‘bin/System.Web.Mvc.IronRuby.dll’
=> true

class MyEngine
… include System::Web::Mvc::IronRuby::Core::IRubyEngine
… end
=> MyEngine

MyEngine.new
mscorlib:0:in _TermCreateClass': Method 'ExecuteFile' in type 'IronRuby.Classes.Object$1' from assembly 'Snippets.scripting, Version=0.0.0. 0, Culture=neutral, PublicKeyToken=null' does not have an implementation. (System::TypeLoadException) from mscorlib:0:inCreateTypeNoLock’
from mscorlib:0:in CreateType' from c:\tools\ironruby\ndp\fx\src\core\microsoft\scripting\Actions\DynamicMetaObjectBinder.cs:96:inBind’
from
c:\tools\ironruby\ndp\fx\src\core\microsoft\scripting\Actions\CallSiteBinder.cs:79:in
`BindDelegate’
from :0

exit

in the console output above it complains about a different method but
the idea is the same. that method def was T ExecuteFile(string path,
bool throwIfNotExist);

Do I put this on codeplex or is that the expected behavior?

Met vriendelijke groeten - Best regards - Salutations
Ivan Porto C.
Blog: http://flanders.co.nz
Twitter: http://twitter.com/casualjim
Author of IronRuby in Action (http://manning.com/carrero)