diff options
| author | Avi Levkovich <avi@twine-s.com> | 2018-05-09 11:44:32 +0300 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2018-05-09 11:44:32 +0300 |
| commit | 67255998056910f53640e11e634cfdbbd7f6880c (patch) | |
| tree | e8e1a7a7fb653a69cf3c2150367308a99a4d5c13 /Software/Visual_Studio/Tango.Scripting/ScriptEngine.cs | |
| parent | d84b6c4fff9cbf40263140a522fca3ae6bdfd57c (diff) | |
| parent | 915ee5e76204c895c71ae45447b47f24dfde44a8 (diff) | |
| download | Tango-67255998056910f53640e11e634cfdbbd7f6880c.tar.gz Tango-67255998056910f53640e11e634cfdbbd7f6880c.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software/Visual_Studio/Tango.Scripting/ScriptEngine.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.Scripting/ScriptEngine.cs | 57 |
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..745e694b1 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.Where(x => x.Severity == DiagnosticSeverity.Error).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> |
