ScriptEngine successfully compiles script, we are now even further than LSO was.
Also added C# script support.afrisby
parent
75c5bdbef9
commit
ed1208d043
|
@ -20,8 +20,25 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
|
|||
// Output assembly name
|
||||
string OutFile = Path.GetFileNameWithoutExtension(LSOFileName) + ".dll";
|
||||
|
||||
Common.SendToDebug("Reading source code into memory");
|
||||
// TODO: Add error handling
|
||||
string CS_Code = LSL_Converter.Convert(File.ReadAllText(LSOFileName));
|
||||
string CS_Code;
|
||||
switch (System.IO.Path.GetExtension(LSOFileName).ToLower())
|
||||
{
|
||||
case ".txt":
|
||||
case ".lsl":
|
||||
Common.SendToDebug("Source code is LSL, converting to CS");
|
||||
CS_Code = LSL_Converter.Convert(File.ReadAllText(LSOFileName));
|
||||
break;
|
||||
case ".cs":
|
||||
Common.SendToDebug("Source code is CS");
|
||||
CS_Code = File.ReadAllText(LSOFileName);
|
||||
break;
|
||||
default:
|
||||
throw new Exception("Unknown script type.");
|
||||
}
|
||||
|
||||
Common.SendToDebug("Compiling");
|
||||
|
||||
// Do actual compile
|
||||
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
|
||||
|
|
|
@ -162,7 +162,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
|
|||
// void dataserver(key query_id, string data) {
|
||||
//cache = Regex.Replace(cache, @"([^a-zA-Z_]\s*)((?!if|switch|for)[a-zA-Z_]+\s*\([^\)]*\)[^{]*{)", "$1" + "<STATE>" + "$2", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
|
||||
//Console.WriteLine("Replacing using statename: " + current_statename);
|
||||
cache = Regex.Replace(cache, @"^(\s*)((?!if|switch|for)[a-zA-Z0-9_]*\s*\([^\)]*\)[^;]*\{)", @"$1" + current_statename + "_$2", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
|
||||
cache = Regex.Replace(cache, @"^(\s*)((?!(if|switch|for)[^a-zA-Z0-9_])[a-zA-Z0-9_]*\s*\([^\)]*\)[^;]*\{)", @"$1" + current_statename + "_$2", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
|
||||
}
|
||||
|
||||
ret += cache;
|
||||
|
@ -195,7 +195,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
|
|||
}
|
||||
|
||||
// Add "void" in front of functions that needs it
|
||||
Script = Regex.Replace(Script, @"^(\s*)((?!if|switch|for)[a-zA-Z0-9_]*\s*\([^\)]*\)[^;]*\{)", @"$1void $2", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
|
||||
Script = Regex.Replace(Script, @"^(\s*)((?!(if|switch|for)[^a-zA-Z0-9_])[a-zA-Z0-9_]*\s*\([^\)]*\)[^;]*\{)", @"$1void $2", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
|
||||
|
||||
// Replace <x,y,z> and <x,y,z,r>
|
||||
Script = Regex.Replace(Script, @"<([^,>]*,[^,>]*,[^,>]*,[^,>]*)>", @"new Axiom.Math.Quaternion($1)", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
|
||||
|
|
|
@ -114,15 +114,23 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
|||
FileName = ScriptID;
|
||||
|
||||
// * Does script need compile? Send it to LSL compiler first. (TODO: Use (and clean) compiler cache)
|
||||
if (FileName.ToLower().EndsWith(".lsl"))
|
||||
Common.SendToDebug("ScriptManager Script extension: " + System.IO.Path.GetExtension(FileName).ToLower());
|
||||
switch (System.IO.Path.GetExtension(FileName).ToLower())
|
||||
{
|
||||
Common.SendToDebug("ScriptManager Script is LSL, compiling to .Net Assembly");
|
||||
// Create a new instance of the compiler (currently we don't want reuse)
|
||||
OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.Compiler LSLCompiler = new OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.Compiler();
|
||||
// Compile
|
||||
FileName = LSLCompiler.Compile(FileName);
|
||||
case ".txt":
|
||||
case ".lsl":
|
||||
case ".cs":
|
||||
Common.SendToDebug("ScriptManager Script is CS/LSL, compiling to .Net Assembly");
|
||||
// Create a new instance of the compiler (currently we don't want reuse)
|
||||
OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.Compiler LSLCompiler = new OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.Compiler();
|
||||
// Compile
|
||||
FileName = LSLCompiler.Compile(FileName);
|
||||
break;
|
||||
default:
|
||||
throw new Exception("Unknown script type.");
|
||||
}
|
||||
|
||||
Common.SendToDebug("Compilation done");
|
||||
// * Insert yield into code
|
||||
FileName = ProcessYield(FileName);
|
||||
|
||||
|
@ -197,7 +205,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
|||
Type t;
|
||||
//try
|
||||
//{
|
||||
t = a.GetType("LSL_ScriptObject", true);
|
||||
t = a.GetType("SecondLife.Script", true);
|
||||
//}
|
||||
//catch (Exception e)
|
||||
//{
|
||||
|
|
Loading…
Reference in New Issue