Forum: IronRuby StackOverflowException when accessing object properties

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Benjamin v. (Guest)
on 2008-11-15 08:33
Hello all,

Why does the stack overflow?

class Program
{
    static void Main(string[] args)
    {
        ScriptRuntime runtime = Ruby.CreateRuntime();
        ScriptEngine engine = runtime.GetRubyEngine();

        ScriptScope scope = engine.CreateScope();
        scope.SetVariable("my_var", new TestClass() { Text = "Hello
world!", Number = 42 });

        ScriptSource source =
engine.CreateScriptSourceFromString("my_var.text");
        Console.WriteLine(source.Execute<object>(scope));
    }
}

class TestClass
{
    public string Text;
    public int Number;
}

If I set "my_var" to a string and query it's Length property, no
problem. I'm sure I'm missing something—I came up with this code by
reading a PDF found on the IronRuby site
(http://ironruby.net/@api/deki/files/1/=dlr-spec-hosting.pdf --
redirects to Amazon S3) because I couldn't find any examples. Maybe I
need to somehow import TestClass' namespace into the scope?

Thanks a lot, and apologies in advance for formatting problems (can't
find a preview post option).

benjamin
Andrew P. (Guest)
on 2008-11-15 09:07
(Received via mailing list)
I think this is because you need to reference the IronRuby.Libraries
dll.
Strange error I know.

On Sat, Nov 15, 2008 at 7:33 PM, Benjamin Van der veen
<removed_email_address@domain.invalid
Benjamin v. (Guest)
on 2008-11-16 00:15
Hello Andrew,

Andrew P. wrote:
> I think this is because you need to reference the IronRuby.Libraries
> dll.
> Strange error I know.
>
> On Sat, Nov 15, 2008 at 7:33 PM, Benjamin Van der veen
> <removed_email_address@domain.invalid

Ah, yes, this fixed the stack overflow error. Strange indeed—thanks for
the tip! However, it's still not properly resolving the property
correctly:

MissingMethodException: undefined method `text' for
#<My::Namespace::TestClass:0x000005c>

I tried changing TestClass' fields to properties so that they would get
compiled as methods:

class TestClass
{
    public string Text { get; set; }
    public int Number { get; set; }
}

but no dice. Also tried capitalizing "Text". Still works with
String.Length though (whether I reference it as "my_var.length" or
"my_var.Length". Any ideas?

(Also, as somewhat of a side-note, is there a different syntax for
accessing field on CLR objects in IronRuby? Is this possible or must
they be properties?)

Thanks again,
benjamin
Tomas M. (Guest)
on 2008-11-16 02:08
(Received via mailing list)
Isn't the class internal? (We should improve error reporting related to
visibility)
Try to make it public. Public fields should be accessible in the same
way properties are.

Tomas
Benjamin v. (Guest)
on 2008-11-16 03:12
Tomas M. wrote:
> Isn't the class internal? (We should improve error reporting related to
> visibility)
> Try to make it public. Public fields should be accessible in the same
> way properties are.
>
> Tomas

Yep, that was the problem. Declared it public and it works now.

Thanks,
benjamin
This topic is locked and can not be replied to.