Can't run script after engine exception

Hi All,

I’ve got a problem where if I execute a Ruby script that has a syntax
error or missing method and that correctly fails I cannot use that
engine object to subsequently execute a valid script. If I restart the
application and re-execute the corrected script it works. It’s only
executing an erroneous script and then a valid script that fails.

The code I’m using to run the script is:

IScriptEnvironment scriptEnvironment = IronRuby.CreateRuntime();
IScriptEngine rubyengine = IronRuby.GetEngine(scriptEnvironment);
SourceUnit scriptSource =
rubyengine.CreateScriptSourceFromString(myScript);
IScriptScope scope = rubyengine.CreateScope();
rubyengine.Execute(scope, scriptSource);

Does anyone know if there is anyway to re-initialise the Ruby engine
after a syntax or methodmissing exception so scripts can be executed
again without needing to restart the application?

Regards,

Aaron

Could you sent a full repro containing the source code of both scripts
and the order of execution?

Tomas

Tomas M. wrote:

Could you sent a full repro containing the source code of both scripts
and the order of execution?

Tomas

I thought I’d made a mistake for a while as I was having real difficulty
reapeating the problem. However I’ve found that it’s a particular type
of syntax error that causes the problem rather than any syntax error.
The end statement missing on an if block is the culprit. Below is the
code that illustrates the problem:

IScriptEnvironment scriptEnvironment = IronRuby.CreateRuntime();
IScriptEngine rubyengine = IronRuby.GetEngine(scriptEnvironment);

string goodScript =
@"
if true
puts ‘Ruby is cool’
end";

string badScript =
@"
if true
puts ‘Ruby is cool’
";

Console.WriteLine(“Attempting run1 (good script).”);
rubyengine.Runtime.ExecuteSourceUnit(rubyengine.CreateScriptSourceFromString(goodScript));

try
{
Console.WriteLine(“Attempting run2 (bad script).”);
rubyengine.Runtime.ExecuteSourceUnit(rubyengine.CreateScriptSourceFromString(badScript));
}
catch (Exception excp)
{
Console.WriteLine(excp.GetType());
}

try
{
Console.WriteLine(“Attempting run3 (good script).”);
rubyengine.Runtime.ExecuteSourceUnit(rubyengine.CreateScriptSourceFromString(goodScript));
}
catch (Exception excp2)
{
Console.WriteLine(excp2.GetType());
}

Output:

Attempting run1 (good script).
Ruby is cool
Attempting run2 (bad script).
Microsoft.Scripting.SyntaxErrorException
Attempting run3 (good script).
Microsoft.Scripting.SyntaxErrorException

Regards,

Aaron

Thanks, will investigate.

Tomas

Note that this happens in rbx as well, if you make a syntax error, you
can’t do any thing any more and have to exit the interpreter.

On Feb 18, 2008 11:32 PM, Tomas M. [email protected]
wrote:

IScriptEnvironment scriptEnvironment = IronRuby.CreateRuntime();
Regards,
[email protected]
http://rubyforge.org/mailman/listinfo/ironruby-core


Michael L.
[Polymath Programmer]
http://michaeldotnet.blogspot.com