Mantis#1602. Thank you, Kinoc for a patch to:

Patch to activate YieldProlog on Xengine.
Only adds YieldProlog to assembly if required.
0.6.0-stable
Charles Krinke 2008-06-26 13:42:18 +00:00
parent ca724636d4
commit cf00df106d
2 changed files with 48 additions and 4 deletions

View File

@ -355,7 +355,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
sourceCode.Append(@" sourceCode.Append(@"
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using YieldProlog; using OpenSim.Region.ScriptEngine.Shared.YieldProlog;
namespace Temporary { namespace Temporary {
public class Temporary : YP.IClause { public class Temporary : YP.IClause {

View File

@ -55,7 +55,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
lsl = 0, lsl = 0,
cs = 1, cs = 1,
vb = 2, vb = 2,
js = 3 js = 3,
yp = 4
} }
/// <summary> /// <summary>
@ -75,6 +76,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
private static CSharpCodeProvider CScodeProvider = new CSharpCodeProvider(); private static CSharpCodeProvider CScodeProvider = new CSharpCodeProvider();
private static VBCodeProvider VBcodeProvider = new VBCodeProvider(); private static VBCodeProvider VBcodeProvider = new VBCodeProvider();
private static JScriptCodeProvider JScodeProvider = new JScriptCodeProvider(); private static JScriptCodeProvider JScodeProvider = new JScriptCodeProvider();
private static CSharpCodeProvider YPcodeProvider = new CSharpCodeProvider(); // YP is translated into CSharp
private static YP2CSConverter YP_Converter = new YP2CSConverter();
private static int instanceID = new Random().Next(0, int.MaxValue); // Unique number to use on our compiled files private static int instanceID = new Random().Next(0, int.MaxValue); // Unique number to use on our compiled files
private static UInt64 scriptCompileCounter = 0; // And a counter private static UInt64 scriptCompileCounter = 0; // And a counter
@ -112,9 +115,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
LanguageMapping.Add(enumCompileType.vb.ToString(), enumCompileType.vb); LanguageMapping.Add(enumCompileType.vb.ToString(), enumCompileType.vb);
LanguageMapping.Add(enumCompileType.lsl.ToString(), enumCompileType.lsl); LanguageMapping.Add(enumCompileType.lsl.ToString(), enumCompileType.lsl);
LanguageMapping.Add(enumCompileType.js.ToString(), enumCompileType.js); LanguageMapping.Add(enumCompileType.js.ToString(), enumCompileType.js);
LanguageMapping.Add(enumCompileType.yp.ToString(), enumCompileType.yp);
// Allowed compilers // Allowed compilers
string allowComp = m_scriptEngine.Config.GetString("AllowedCompilers", "lsl,cs,vb,js"); string allowComp = m_scriptEngine.Config.GetString("AllowedCompilers", "lsl,cs,vb,js,yp");
AllowedCompilers.Clear(); AllowedCompilers.Clear();
#if DEBUG #if DEBUG
@ -303,6 +307,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
if (Script.StartsWith("//js", true, CultureInfo.InvariantCulture)) if (Script.StartsWith("//js", true, CultureInfo.InvariantCulture))
l = enumCompileType.js; l = enumCompileType.js;
if (Script.StartsWith("//yp", true, CultureInfo.InvariantCulture))
l = enumCompileType.yp;
if (!AllowedCompilers.ContainsKey(l.ToString())) if (!AllowedCompilers.ContainsKey(l.ToString()))
{ {
// Not allowed to compile to this language! // Not allowed to compile to this language!
@ -320,12 +327,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
l = enumCompileType.cs; l = enumCompileType.cs;
} }
if (l == enumCompileType.yp)
{
// Its YP, convert it to C#
compileScript = YP_Converter.Convert(Script);
// We have our own processor now
//l = enumCompileType.cs;
}
// Insert additional assemblies here // Insert additional assemblies here
//ADAM: Disabled for the moment until it's working right. //ADAM: Disabled for the moment until it's working right.
bool enableCommanderLSL = false; bool enableCommanderLSL = false;
if (enableCommanderLSL == true && l == enumCompileType.cs) if (enableCommanderLSL == true && ((l == enumCompileType.cs) || (l == enumCompileType.yp)))
{ {
foreach (KeyValuePair<string, foreach (KeyValuePair<string,
ICommander> com ICommander> com
@ -348,6 +363,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
case enumCompileType.js: case enumCompileType.js:
compileScript = CreateJSCompilerScript(compileScript); compileScript = CreateJSCompilerScript(compileScript);
break; break;
case enumCompileType.yp:
compileScript = CreateYPCompilerScript(compileScript);
break;
} }
// m_log.Debug("[ScriptEngine.DotNetEngine]: Preparing to compile the following LSL to C# translated code"); // m_log.Debug("[ScriptEngine.DotNetEngine]: Preparing to compile the following LSL to C# translated code");
@ -380,6 +398,24 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
return compileScript; return compileScript;
} }
private static string CreateYPCompilerScript(string compileScript)
{
compileScript = String.Empty +
"using OpenSim.Region.ScriptEngine.Shared.YieldProlog; " +
"using OpenSim.Region.ScriptEngine.Shared; using System.Collections.Generic;\r\n" +
String.Empty + "namespace SecondLife { " +
String.Empty + "public class Script : OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass { \r\n" +
//@"public Script() { } " +
@"static OpenSim.Region.ScriptEngine.Shared.YieldProlog.YP YP=null; " +
@"public Script() { YP= new OpenSim.Region.ScriptEngine.Shared.YieldProlog.YP(); } " +
compileScript +
"} }\r\n";
return compileScript;
}
private static string CreateVBCompilerScript(string compileScript) private static string CreateVBCompilerScript(string compileScript)
{ {
compileScript = String.Empty + compileScript = String.Empty +
@ -455,6 +491,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.dll")); parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.dll"));
parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.Api.Runtime.dll")); parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.Api.Runtime.dll"));
if (lang == enumCompileType.yp)
{
parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.YieldProlog.dll"));
}
parameters.GenerateExecutable = false; parameters.GenerateExecutable = false;
parameters.OutputAssembly = OutFile; parameters.OutputAssembly = OutFile;
parameters.IncludeDebugInformation = CompileWithDebugInformation; parameters.IncludeDebugInformation = CompileWithDebugInformation;
@ -474,6 +515,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
case enumCompileType.js: case enumCompileType.js:
results = JScodeProvider.CompileAssemblyFromSource(parameters, Script); results = JScodeProvider.CompileAssemblyFromSource(parameters, Script);
break; break;
case enumCompileType.yp:
results = YPcodeProvider.CompileAssemblyFromSource(parameters, Script);
break;
default: default:
throw new Exception("Compiler is not able to recongnize language type \"" + lang.ToString() + "\""); throw new Exception("Compiler is not able to recongnize language type \"" + lang.ToString() + "\"");
} }