diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs index 5606287120..b6debcf72c 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs @@ -190,7 +190,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine private string ProcessYield(string FileName) { // TODO: Create a new assembly and copy old but insert Yield Code - return FileName; + return TempDotNetMicroThreadingCodeInjector.TestFix(FileName); } private AppDomain GetFreeAppDomain() diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/TempDotNetMicroThreadingCodeInjector.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/TempDotNetMicroThreadingCodeInjector.cs new file mode 100644 index 0000000000..dd3ce09dd2 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/TempDotNetMicroThreadingCodeInjector.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Rail.Transformation; +using Rail.Reflect; +using Rail.Exceptions; +using Rail.MSIL; + +namespace OpenSim.Region.ScriptEngine.DotNetEngine +{ + class TempDotNetMicroThreadingCodeInjector + { + public static string TestFix(string FileName) + { + string ret = System.IO.Path.GetFileNameWithoutExtension(FileName + "_fixed.dll"); + + Console.WriteLine("Loading: \"" + FileName + "\""); + RAssemblyDef rAssembly = RAssemblyDef.LoadAssembly(FileName); + + + //Get the type of the method to copy from assembly Teste2.exe to assembly Teste.exe + RTypeDef type = (RTypeDef)rAssembly.RModuleDef.GetType("SecondLife.Script"); + + //Get the methods in the type + RMethod[] m = type.GetMethods(); + + //Create a MethodPrologueAdder visitor object with the method to add + //and with the flag that enables local variable creation set to true + MethodPrologueAdder mpa = new MethodPrologueAdder((RMethodDef)m[0], true); + + //Apply the changes to the assembly + rAssembly.Accept(mpa); + + //Save the new assembly + rAssembly.SaveAssembly(ret); + + return ret; + + } + } +} diff --git a/bin/RAIL.dll b/bin/RAIL.dll new file mode 100644 index 0000000000..f2632d71b6 Binary files /dev/null and b/bin/RAIL.dll differ diff --git a/prebuild.xml b/prebuild.xml index d1bb30f3c6..1e845412e6 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -958,6 +958,7 @@ +