StackOverflowException when accessing object properties


#1

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(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


#2

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


#3

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


#4

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


#5

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