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.
3a6fa82776b1210043b28ae6872e0451?d=identicon&s=25 Benjamin van der Veen (bvanderveen)
on 2008-11-15 07: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
0e5987d3f0456799c5327d5ae47b72e1?d=identicon&s=25 Andrew Peters (Guest)
on 2008-11-15 08: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
<lists@ruby-forum.com
3a6fa82776b1210043b28ae6872e0451?d=identicon&s=25 Benjamin van der Veen (bvanderveen)
on 2008-11-15 23:15
Hello Andrew,

Andrew Peters 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
> <lists@ruby-forum.com

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
Cb51033949ffccd982ae32c9f890f25a?d=identicon&s=25 Tomas Matousek (Guest)
on 2008-11-16 01: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
3a6fa82776b1210043b28ae6872e0451?d=identicon&s=25 Benjamin van der Veen (bvanderveen)
on 2008-11-16 02:12
Tomas Matousek 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.