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
|
// Output assembly name
|
||||||
string OutFile = Path.GetFileNameWithoutExtension(LSOFileName) + ".dll";
|
string OutFile = Path.GetFileNameWithoutExtension(LSOFileName) + ".dll";
|
||||||
|
|
||||||
|
Common.SendToDebug("Reading source code into memory");
|
||||||
// TODO: Add error handling
|
// 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
|
// Do actual compile
|
||||||
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
|
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) {
|
// 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);
|
//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);
|
//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;
|
ret += cache;
|
||||||
|
@ -195,7 +195,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add "void" in front of functions that needs it
|
// 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>
|
// Replace <x,y,z> and <x,y,z,r>
|
||||||
Script = Regex.Replace(Script, @"<([^,>]*,[^,>]*,[^,>]*,[^,>]*)>", @"new Axiom.Math.Quaternion($1)", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline);
|
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;
|
FileName = ScriptID;
|
||||||
|
|
||||||
// * Does script need compile? Send it to LSL compiler first. (TODO: Use (and clean) compiler cache)
|
// * 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");
|
case ".txt":
|
||||||
// Create a new instance of the compiler (currently we don't want reuse)
|
case ".lsl":
|
||||||
OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.Compiler LSLCompiler = new OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.Compiler();
|
case ".cs":
|
||||||
// Compile
|
Common.SendToDebug("ScriptManager Script is CS/LSL, compiling to .Net Assembly");
|
||||||
FileName = LSLCompiler.Compile(FileName);
|
// 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
|
// * Insert yield into code
|
||||||
FileName = ProcessYield(FileName);
|
FileName = ProcessYield(FileName);
|
||||||
|
|
||||||
|
@ -197,7 +205,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
Type t;
|
Type t;
|
||||||
//try
|
//try
|
||||||
//{
|
//{
|
||||||
t = a.GetType("LSL_ScriptObject", true);
|
t = a.GetType("SecondLife.Script", true);
|
||||||
//}
|
//}
|
||||||
//catch (Exception e)
|
//catch (Exception e)
|
||||||
//{
|
//{
|
||||||
|
|
Loading…
Reference in New Issue