aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs')
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs44
1 files changed, 28 insertions, 16 deletions
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs
index ad2717c..9dd274e 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs
@@ -13,39 +13,51 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
13 { 13 {
14 private LSL2CSConverter LSL_Converter = new LSL2CSConverter(); 14 private LSL2CSConverter LSL_Converter = new LSL2CSConverter();
15 private CSharpCodeProvider codeProvider = new CSharpCodeProvider(); 15 private CSharpCodeProvider codeProvider = new CSharpCodeProvider();
16 private int ScriptCompileCounter = 0;
16 //private ICodeCompiler icc = codeProvider.CreateCompiler(); 17 //private ICodeCompiler icc = codeProvider.CreateCompiler();
17 public string Compile(string LSOFileName) 18 public string CompileFromFile(string LSOFileName)
18 { 19 {
19
20
21 // Output assembly name
22 string OutFile = Path.Combine("ScriptEngines", Path.GetFileNameWithoutExtension(LSOFileName) + ".dll");
23 //string OutFile = Path.Combine("ScriptEngines", "SecondLife.Script.dll");
24
25 Common.SendToDebug("Reading source code into memory");
26 // TODO: Add error handling
27 string CS_Code; 20 string CS_Code;
28 switch (System.IO.Path.GetExtension(LSOFileName).ToLower()) 21 switch (System.IO.Path.GetExtension(LSOFileName).ToLower())
29 { 22 {
30 case ".txt": 23 case ".txt":
31 case ".lsl": 24 case ".lsl":
32 Common.SendToDebug("Source code is LSL, converting to CS"); 25 Common.SendToDebug("Source code is LSL, converting to CS");
33 CS_Code = LSL_Converter.Convert(File.ReadAllText(LSOFileName)); 26 return CompileFromLSLText(File.ReadAllText(LSOFileName));
34 break;
35 case ".cs": 27 case ".cs":
36 Common.SendToDebug("Source code is CS"); 28 Common.SendToDebug("Source code is CS");
37 CS_Code = File.ReadAllText(LSOFileName); 29 return CompileFromCSText(File.ReadAllText(LSOFileName));
38 break;
39 default: 30 default:
40 throw new Exception("Unknown script type."); 31 throw new Exception("Unknown script type.");
41 } 32 }
33 }
34 /// <summary>
35 /// Converts script from LSL to CS and calls CompileFromCSText
36 /// </summary>
37 /// <param name="Script">LSL script</param>
38 /// <returns>Filename to .dll assembly</returns>
39 public string CompileFromLSLText(string Script)
40 {
41 return CompileFromCSText(LSL_Converter.Convert(Script));
42 }
43 /// <summary>
44 /// Compile CS script to .Net assembly (.dll)
45 /// </summary>
46 /// <param name="Script">CS script</param>
47 /// <returns>Filename to .dll assembly</returns>
48 public string CompileFromCSText(string Script)
49 {
42 50
43 Common.SendToDebug("Compiling"); 51
52 // Output assembly name
53 ScriptCompileCounter++;
54 string OutFile = Path.Combine("ScriptEngines", "Script_" + ScriptCompileCounter + ".dll");
55 //string OutFile = Path.Combine("ScriptEngines", "SecondLife.Script.dll");
44 56
45 // DEBUG - write source to disk 57 // DEBUG - write source to disk
46 try 58 try
47 { 59 {
48 File.WriteAllText(Path.Combine("ScriptEngines", "debug_" + Path.GetFileNameWithoutExtension(LSOFileName) + ".cs"), CS_Code); 60 File.WriteAllText(Path.Combine("ScriptEngines", "debug_" + Path.GetFileNameWithoutExtension(OutFile) + ".cs"), Script);
49 } 61 }
50 catch { } 62 catch { }
51 63
@@ -68,7 +80,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
68 //parameters.ReferencedAssemblies.Add("OpenSim.Region.Environment"); 80 //parameters.ReferencedAssemblies.Add("OpenSim.Region.Environment");
69 parameters.GenerateExecutable = false; 81 parameters.GenerateExecutable = false;
70 parameters.OutputAssembly = OutFile; 82 parameters.OutputAssembly = OutFile;
71 CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, CS_Code); 83 CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, Script);
72 84
73 // Go through errors 85 // Go through errors
74 // TODO: Return errors to user somehow 86 // TODO: Return errors to user somehow