aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/DotNetEngine/TempDotNetMicroThreadingCodeInjector.cs
blob: 64cb7cd1188a5f5a88e6c828ba770c20fb5dd066 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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
{
    /// <summary>
    /// Tedds Sandbox for RAIL/microtrheading. This class is only for testing purposes!
    /// Its offspring will be the actual implementation.
    /// </summary>
    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;

        }
    }
}