aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Scripting/ScriptEngine.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Tango.Scripting/ScriptEngine.cs')
-rw-r--r--Software/Visual_Studio/Tango.Scripting/ScriptEngine.cs57
1 files changed, 43 insertions, 14 deletions
diff --git a/Software/Visual_Studio/Tango.Scripting/ScriptEngine.cs b/Software/Visual_Studio/Tango.Scripting/ScriptEngine.cs
index d6f12967c..a8815406d 100644
--- a/Software/Visual_Studio/Tango.Scripting/ScriptEngine.cs
+++ b/Software/Visual_Studio/Tango.Scripting/ScriptEngine.cs
@@ -38,15 +38,51 @@ namespace Tango.Scripting
/// <returns></returns>
public async Task Run(String code)
{
+ var options = CreateOptions();
+
+ String methodParameters = CreateMethodParameters();
+
+ _cancaller = new CancellationTokenSource();
+
+ await CSharpScript.RunAsync(
+ code +
+ Environment.NewLine +
+ Environment.NewLine +
+ "await Task.Factory.StartNew(() => { OnExecute(" + methodParameters + "); });", options: options, globals: _onExecuteParameters, cancellationToken: _cancaller.Token);
+ }
+
+ public Task<List<CompilerError>> Compile(String code)
+ {
+ return Task.Factory.StartNew<List<CompilerError>>(() =>
+ {
+ var options = CreateOptions();
+
+ String methodParameters = CreateMethodParameters();
+
+ _cancaller = new CancellationTokenSource();
+
+ var script = CSharpScript.Create(
+ code +
+ Environment.NewLine +
+ Environment.NewLine +
+ "await Task.Factory.StartNew(() => { OnExecute(" + methodParameters + "); });", options: options, globalsType: _onExecuteParameters.GetType());
+
+ var results = script.Compile();
+
+ return results.ToList().Select(x => new CompilerError() { Error = x.ToString() }).ToList();
+ });
+ }
+
+ private String CreateMethodParameters()
+ {
+ return String.Join(", ", _onExecuteParameters.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance).Select(x => x.Name));
+ }
+
+ private ScriptOptions CreateOptions()
+ {
//My References.
var options = ScriptOptions.Default;
- //External References.
- //foreach (var r in item.References)
- //{
- // options = options.AddReferences(r.FilePath);
- //}
-
//My Assemblies.
options = options.AddReferences(typeof(Form).Assembly.Location);
options = options.AddReferences(typeof(Enumerable).Assembly.Location);
@@ -67,14 +103,7 @@ namespace Tango.Scripting
"System.Windows.Forms"
);
- String methodParameters = String.Join(", ", _onExecuteParameters.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance).Select(x => x.Name));
-
- _cancaller = new CancellationTokenSource();
- await CSharpScript.RunAsync(
- code +
- Environment.NewLine +
- Environment.NewLine +
- "await Task.Factory.StartNew(() => { OnExecute(" + methodParameters + "); });", options: options, globals: _onExecuteParameters, cancellationToken: _cancaller.Token);
+ return options;
}
/// <summary>