正在新增编译缓存功能,用于加速与加密
This commit is contained in:
@@ -6,13 +6,25 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using static Convention.RScript.RScriptContext;
|
||||
|
||||
namespace Convention.RScript
|
||||
{
|
||||
public class RScriptEngine
|
||||
public interface IRScriptEngine
|
||||
{
|
||||
IBasicRScriptContext context { get; }
|
||||
|
||||
Dictionary<string, RScriptVariableEntry> Run(string script, RScriptImportClass import = null, RScriptVariables variables = null);
|
||||
IEnumerator RunAsync(string script, RScriptImportClass import = null, RScriptVariables variables = null);
|
||||
SerializableClass Compile(string script, RScriptImportClass import = null, RScriptVariables variables = null);
|
||||
Dictionary<string, RScriptVariableEntry> Run(SerializableClass data, RScriptImportClass import = null, RScriptVariables variables = null);
|
||||
IEnumerator RunAsync(SerializableClass data, RScriptImportClass import = null, RScriptVariables variables = null);
|
||||
}
|
||||
|
||||
public sealed class RScriptEngine : IRScriptEngine
|
||||
{
|
||||
private ExpressionParser parser;
|
||||
private RScriptContext context;
|
||||
public IBasicRScriptContext context { get; private set; }
|
||||
|
||||
private IEnumerable<string> SplitScript(string script)
|
||||
{
|
||||
@@ -122,10 +134,18 @@ namespace Convention.RScript
|
||||
return statements.Where(s => !string.IsNullOrWhiteSpace(s));
|
||||
}
|
||||
|
||||
private IBasicRScriptContext CreateContext(string[] statements, RScriptImportClass import = null, RScriptVariables variables = null)
|
||||
{
|
||||
return new RScriptContext(statements, import, variables);
|
||||
}
|
||||
private IBasicRScriptContext CreateContext(SerializableClass data, RScriptImportClass import = null, RScriptVariables variables = null)
|
||||
{
|
||||
return new RScriptContext(data, import, variables);
|
||||
}
|
||||
public Dictionary<string, RScriptVariableEntry> Run(string script, RScriptImportClass import = null, RScriptVariables variables = null)
|
||||
{
|
||||
parser = new(new());
|
||||
context = new(SplitScript(script).ToArray(), import, variables);
|
||||
context = CreateContext(SplitScript(script).ToArray(), import, variables);
|
||||
context.Run(parser);
|
||||
return context.GetCurrentVariables();
|
||||
}
|
||||
@@ -133,7 +153,31 @@ namespace Convention.RScript
|
||||
public IEnumerator RunAsync(string script, RScriptImportClass import = null, RScriptVariables variables = null)
|
||||
{
|
||||
parser = new(new());
|
||||
context = new(SplitScript(script).ToArray(), import, variables);
|
||||
context = CreateContext(SplitScript(script).ToArray(), import, variables);
|
||||
return context.RunAsync(parser);
|
||||
}
|
||||
|
||||
public SerializableClass Compile(string script, RScriptImportClass import = null, RScriptVariables variables = null)
|
||||
{
|
||||
parser = new(new());
|
||||
context = CreateContext(SplitScript(script).ToArray(), import, variables);
|
||||
return context.Compile(parser);
|
||||
}
|
||||
|
||||
public Dictionary<string, RScriptVariableEntry> Run(SerializableClass data, RScriptImportClass import = null, RScriptVariables variables = null)
|
||||
{
|
||||
parser = new(new());
|
||||
//parser.Deserialize(data.CompileParser);
|
||||
context = CreateContext(data, import, variables);
|
||||
context.Run(parser);
|
||||
return context.GetCurrentVariables();
|
||||
}
|
||||
|
||||
public IEnumerator RunAsync(SerializableClass data, RScriptImportClass import = null, RScriptVariables variables = null)
|
||||
{
|
||||
parser = new(new());
|
||||
//parser.Deserialize(data.CompileParser);
|
||||
context = CreateContext(data, import, variables);
|
||||
return context.RunAsync(parser);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user