Yeah, I don't really like my solution exactly because it is dependent on the underlying type. By the way I already tried to call JSON::ParserError#new from C# to get an instance of the class and it actually worked, but then the exception was getting thrown with an empty stack trace (well I can guess the reason for that and it is not something unexpected).
On Fri, Feb 13, 2009 at 18:55, Shri Borde <[email protected]> wrote: > I don't think your code below will work as multiple Ruby types share the same > underlying CLR type. If you want to do things in a strongly-bound way, you > would need to use the RubyUtils and other runtime helpers to find the method > "new", invoke it, etc. instead of using System.Reflection. > > An alternative is to just do an eval. Something like: > RubyUtils.Evaluate("raise JSONError", scope) > > -----Original Message----- > From: [email protected] > [mailto:[email protected]] On Behalf Of Daniele Alessandri > Sent: Thursday, February 12, 2009 11:59 PM > To: [email protected] > Subject: Re: [Ironruby-core] Throwing Exceptions defined in Ruby from C# > > Yes it is meant to be used primarily from ruby as it is a port of a > rather widespread library, and a dependency for a bunch of other > libraries (see http://json.rubyforge.org/). > > The reason is simply to maintain compatibility with the ruby bits of > the original json library in which exceptions are defined inside a > common.rb file: this is due to the fact that this lib comes in two > flavours, json-pure (everything is ruby) and json-ext (the generator > and parser are implemented in C, the rest is ruby), so there are parts > of the code that are shared between the two and eventually invoked > from within the native code. > > Anyway I'm curious, I haven't found other means to do that in a much > cleaner way :) > > > On Fri, Feb 13, 2009 at 04:33, Tomas Matousek > <[email protected]> wrote: >> Why don't you declare the exceptions in C#? I assume the library is >> primarily to be used from Ruby code, not from C#, right? >> >> Tomas >> >> -----Original Message----- >> From: [email protected] >> [mailto:[email protected]] On Behalf Of Daniele Alessandri >> Sent: Thursday, February 12, 2009 6:31 AM >> To: [email protected] >> Subject: [Ironruby-core] Throwing Exceptions defined in Ruby from C# >> >> Hi, >> >> I'm refactoring and polishing the source code of my port of json/ext >> to IronRuby (it's feature complete by now) but I'm wondering if there >> is a better way to throw an Exception defined in ruby from C# compared >> to the only solution I've came up with so far. Here is the code I'm >> using right now, stripped down of checks and condensed in one method >> just for the sake of brevity: >> >> ----- ruby ----- >> >> module JSON >> class JSONError < StandardError; end >> class ParserError < JSONError; end >> end >> >> ----- C# ----- >> >> public static void RaiseParserError(RubyScope scope, String msg) { >> RubyModule eParserError; >> >> scope.RubyContext.TryGetModule(scope.GlobalScope, >> "JSON::ParserError", >> out eParserError >> ); >> >> RubyClass exceptionClass = eParserError as RubyClass; >> Type underlyingType = exceptionClass.GetUnderlyingSystemType(); >> >> BindingFlags bindingFlags = BindingFlags.NonPublic | >> BindingFlags.Public | >> BindingFlags.Instance; >> >> ConstructorInfo constructor = underlyingType.GetConstructor( >> bindingFlags, >> null, >> new[] { typeof(RubyClass), typeof(String) }, >> null >> ); >> >> Exception exceptionInstance = constructor.Invoke( >> new object[] { exceptionClass, msg } >> ) as Exception; >> >> throw exceptionInstance; >> } >> >> >> -- >> Daniele Alessandri >> http://www.clorophilla.net/blog/ >> _______________________________________________ >> Ironruby-core mailing list >> [email protected] >> http://rubyforge.org/mailman/listinfo/ironruby-core >> >> _______________________________________________ >> Ironruby-core mailing list >> [email protected] >> http://rubyforge.org/mailman/listinfo/ironruby-core >> > > > > -- > Daniele Alessandri > http://www.clorophilla.net/blog/ > _______________________________________________ > Ironruby-core mailing list > [email protected] > http://rubyforge.org/mailman/listinfo/ironruby-core > > _______________________________________________ > Ironruby-core mailing list > [email protected] > http://rubyforge.org/mailman/listinfo/ironruby-core > -- Daniele Alessandri http://www.clorophilla.net/blog/ _______________________________________________ Ironruby-core mailing list [email protected] http://rubyforge.org/mailman/listinfo/ironruby-core
