private void BuildAndRun(Script<object> newScript, InteractiveScriptGlobals globals, ref ScriptState<object> state, ref ScriptOptions options, bool displayResult, CancellationToken cancellationToken) { var diagnostics = newScript.Compile(cancellationToken); DisplayDiagnostics(diagnostics); if (diagnostics.HasAnyErrors()) { return; } var task = (state == null) ? newScript.RunAsync(globals, catchException: e => true, cancellationToken: cancellationToken) : newScript.RunFromAsync(state, catchException: e => true, cancellationToken: cancellationToken); state = task.GetAwaiter().GetResult(); if (state.Exception != null) { DisplayException(state.Exception); } else if (displayResult && newScript.HasReturnValue()) { globals.Print(state.ReturnValue); } options = UpdateOptions(options, globals); }
private bool TryBuildAndRun(Script<object> newScript, InteractiveScriptGlobals globals, ref ScriptState<object> state, ref ScriptOptions options, CancellationToken cancellationToken) { var diagnostics = newScript.Compile(cancellationToken); DisplayDiagnostics(diagnostics); if (diagnostics.HasAnyErrors()) { return false; } try { var task = (state == null) ? newScript.RunAsync(globals, cancellationToken) : newScript.RunFromAsync(state, cancellationToken); state = task.GetAwaiter().GetResult(); } catch (FileLoadException e) when (e.InnerException is InteractiveAssemblyLoaderException) { _console.ForegroundColor = ConsoleColor.Red; _console.Error.WriteLine(e.InnerException.Message); _console.ResetColor(); return false; } catch (Exception e) { DisplayException(e); return false; } options = UpdateOptions(options, globals); return true; }