Пример #1
0
 private static void EvaluateHelper(Shell.FsiEvaluationSession ev, string input, CancellationToken canceller)
 {
     using (canceller.Register(Thread.CurrentThread.Abort)) {
         try {
             ev.EvalInteraction(input);
         } catch (Exception e) {
             EvalOutput.WriteLine(e.InnerException ?? e);
         }
     }
 }
Пример #2
0
        public override void Start()
        {
            var inStream = new StringReader(string.Empty);

            _Output = new ScriptTextWriter(this, false);
            _Error  = new ScriptTextWriter(this, true);

            var config = Shell.FsiEvaluationSession.GetDefaultConfiguration();

#pragma warning disable CRRSP06 // A misspelled word has been found
            _Session = Shell.FsiEvaluationSession.Create(config, new string[] { "fsi.exe", "--noninteractive" }, inStream, _Output, _Error, null, null);
#pragma warning restore CRRSP06 // A misspelled word has been found

            string prolog =
                $@"#r ""SpreadCommander.Common.dll"";
#r ""MathNet.Numerics.dll"";
#r ""MathNet.Symbolics.dll"";
#r ""Deedle.dll"";

#I {QuotePath(Project.Current.ProjectPath)};
#I {QuotePath(Path.Combine(Project.Current.ProjectPath, "bin"))};
#I {QuotePath(Path.Combine(Project.Current.ProjectPath, "Modules"))};

open System;

open SpreadCommander.Common.Script;
open SpreadCommander.Common.Script.Book;
open SpreadCommander.Common.Script.Spreadsheet;
open SpreadCommander.Common.Script.Grid;
open SpreadCommander.Common.Script.Heap;
open SpreadCommander.Common.Script.Chart;
open SpreadCommander.Common.Script.Sankey;
open SpreadCommander.Common.Script.Map;

open MathNet.Numerics;
open MathNet.Symbolics;
open Deedle;

";

            //(var ex, var diagnostics) =
            _Session.EvalInteraction(prolog, CancellationToken.None);

            _Output.InitializeOutput();
            _Error.InitializeOutput();

            _Host = new ScriptHost(this);
            _Session.AddBoundValue("Host", _Host);
            _Session.AddBoundValue("Book", _Host.Book);
            _Session.AddBoundValue("Spreadsheet", _Host.Spreadsheet);
            _Session.AddBoundValue("Grid", _Host.Grid);
            _Session.AddBoundValue("Heap", _Host.Heap);

            _Output.WriteInvitation();
Пример #3
0
        public FsharpEvaluator()
        {
            config = Shell.FsiEvaluationSession.GetDefaultConfiguration();
            var arguments = new string[] { "--noninteractive" };

            _instream      = new StringReader("");
            _errorWriter   = new EventRaisingTextWriter();
            _consoleWriter = new EventRaisingTextWriter();
            _consoleWriter.StreamWritten += _consoleWriter_StreamWritten;
            _errorWriter.StreamWritten   += _errorWriter_StreamWritten;


            session = Shell.FsiEvaluationSession.Create(config, arguments, _instream, _consoleWriter, _errorWriter, null, null);
        }
Пример #4
0
 private static Shell.FsiEvaluationSession GetEvaluator(string key)
 {
     if (_evaluators.ContainsKey(key))
     {
         return(_evaluators[key]);
     }
     else
     {
         Shell.FsiEvaluationSession ev = Shell.FsiEvaluationSession.Create(
             Shell.FsiEvaluationSession.GetDefaultConfiguration(),
             new[] { "fsi", "--noninteractive" },
             DummyInput, EvalOutput, EvalOutput, new FSharpOption <bool>(true));
         _evaluators[key] = ev;
         return(ev);
     }
 }
Пример #5
0
        private static string Evaluate(string key, string input, int timeout)
        {
            Shell.FsiEvaluationSession ev = GetEvaluator(key);
            EvalOutput.GetStringBuilder().Clear();
            CancellationTokenSource canceller = new CancellationTokenSource();

            try {
                Task t = Task.Run(() => EvaluateHelper(ev, input, canceller.Token), canceller.Token);
                if (timeout != 0)
                {
                    canceller.CancelAfter(timeout);
                    if (!t.Wait(timeout))
                    {
                        return("(timed out)");
                    }
                }
            } catch (Exception e) {
                EvalOutput.WriteLine(e.ToString());
            }
            return(EvalOutput.GetStringBuilder().Length > 0 ? EvalOutput.ToString() : "");
        }
Пример #6
0
 public void Dispose()
 {
     if (session != null)
     {
         (session as IDisposable)?.Dispose();
         session = null;
     }
     if (_consoleWriter != null)
     {
         _consoleWriter.Dispose();
         _consoleWriter = null;
     }
     if (_errorWriter != null)
     {
         _errorWriter.Dispose();
         _errorWriter = null;
     }
     if (_instream != null)
     {
         _instream.Dispose();
         _instream = null;
     }
 }