public ScriptResult Execute()

in csharp/Repl/RoslynScriptEngine.cs [89:161]


        public ScriptResult Execute(string code)
        {
            if (string.IsNullOrWhiteSpace(code))
            {
                return ScriptResult.Empty;
            }

            if (!IsCompleteSubmission(code))
            {
                return ScriptResult.Incomplete;
            }

            Script<object> script;
            if (previousState == null)
            {
                script = CreateScript(code);

                Environment.SetEnvironmentVariable("SPARKCLR_RUN_MODE", "R");
                if (sparkConf.Get("spark.master", "local").StartsWith("local", StringComparison.InvariantCultureIgnoreCase))
                {
                    Environment.SetEnvironmentVariable("SPARKCLR_SCRIPT_COMPILATION_DIR", compilationDumpDirectory);
                }
            }
            else
            {
                script = previousState.Script.ContinueWith(code);
            }

            var diagnostics = script.Compile();
            bool hasErrors = Enumerable.Any(diagnostics, diagnostic => diagnostic.Severity == DiagnosticSeverity.Error);

            if (hasErrors)
            {
                var diagnosticMessages = diagnostics.Select(diagnostic => "[" + diagnostic.Severity + "] " + diagnostic).ToList();
                return new ScriptResult(compilationException: new Exception(string.Join("\r\n", diagnosticMessages)));
            }

            var compilationDump = DumpCompilation(script.GetCompilation());
            if (new FileInfo(compilationDump).Length > 0)
            {
                // Ship compilation binary to executor side leveraging sparkContext.AddFile() method.
                sc.AddFile(new Uri(compilationDump).ToString());
            }

            try
            {
                ScriptState<object> endState = null;
                if (previousState == null)
                {
                    endState = script.RunAsync(host).Result;
                }
                else
                {
                    // Currently "ContinueAsync" is a internal methold, might go public in 1.2.0(https://github.com/dotnet/roslyn/issues/6612)
                    const string methodName = "ContinueAsync";
                    var m = script.GetType().GetMethod(methodName, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                    if (m != null)
                    {
                        endState = ((Task<ScriptState<object>>)m.Invoke(script, new object[] { previousState, default(CancellationToken) })).Result;
                    }
                    else
                    {
                        throw new InvalidOperationException(string.Format("Can't find method {0}", methodName));
                    }
                }
                previousState = endState;
                return new ScriptResult(returnValue: endState.ReturnValue);
            }
            catch (Exception e)
            {
                return new ScriptResult(executionException: e);
            }
        }