private void RunInteractiveLoop(ScriptOptions options, CommandLineHostObject globals) { ScriptState <object> state = null; var cancellationToken = globals.CancellationToken; while (true) { _console.Out.Write("> "); var input = new StringBuilder(); string line; bool cancelSubmission = false; while (true) { line = _console.In.ReadLine(); if (line == null) { if (input.Length == 0) { return; } cancelSubmission = true; break; } input.AppendLine(line); var tree = _scriptCompiler.ParseSubmission(SourceText.From(input.ToString()), cancellationToken); if (_scriptCompiler.IsCompleteSubmission(tree)) { break; } _console.Out.Write(". "); } if (cancelSubmission) { continue; } string code = input.ToString(); Script <object> newScript; if (state == null) { newScript = Script.CreateInitialScript <object>(_scriptCompiler, code, options, globals.GetType(), assemblyLoaderOpt: null); } else { newScript = state.Script.ContinueWith(code, options); } var newCompilation = newScript.GetCompilation(); try { newScript.Build(cancellationToken); // display warnings: DisplayDiagnostics(newCompilation.GetDiagnostics(cancellationToken).Where(d => d.Severity == DiagnosticSeverity.Warning)); } catch (CompilationErrorException e) { DisplayDiagnostics(e.Diagnostics.Where(d => d.Severity == DiagnosticSeverity.Error || d.Severity == DiagnosticSeverity.Warning)); continue; } try { var task = (state == null) ? newScript.RunAsync(globals, cancellationToken) : newScript.ContinueAsync(state, cancellationToken); state = task.GetAwaiter().GetResult(); } catch (Exception e) { DisplayException(e); continue; } bool hasValue; ITypeSymbol resultType = newCompilation.GetSubmissionResultType(out hasValue); if (hasValue) { if (resultType != null && resultType.SpecialType == SpecialType.System_Void) { _console.Out.WriteLine(_objectFormatter.VoidDisplayString); } else { globals.Print(state.ReturnValue); } } } }
private void RunInteractiveLoop(ScriptOptions options, CommandLineHostObject globals) { ScriptState<object> state = null; var cancellationToken = globals.CancellationToken; while (true) { _console.Out.Write("> "); var input = new StringBuilder(); string line; bool cancelSubmission = false; while (true) { line = _console.In.ReadLine(); if (line == null) { if (input.Length == 0) { return; } cancelSubmission = true; break; } input.AppendLine(line); var tree = _scriptCompiler.ParseSubmission(SourceText.From(input.ToString()), cancellationToken); if (_scriptCompiler.IsCompleteSubmission(tree)) { break; } _console.Out.Write(". "); } if (cancelSubmission) { continue; } string code = input.ToString(); Script<object> newScript; if (state == null) { newScript = Script.CreateInitialScript<object>(_scriptCompiler, code, options, globals.GetType(), assemblyLoaderOpt: null); } else { newScript = state.Script.ContinueWith(code, options); } var newCompilation = newScript.GetCompilation(); try { newScript.Build(cancellationToken); // display warnings: DisplayDiagnostics(newCompilation.GetDiagnostics(cancellationToken).Where(d => d.Severity == DiagnosticSeverity.Warning)); } catch (CompilationErrorException e) { DisplayDiagnostics(e.Diagnostics.Where(d => d.Severity == DiagnosticSeverity.Error || d.Severity == DiagnosticSeverity.Warning)); continue; } try { var task = (state == null) ? newScript.RunAsync(globals, cancellationToken) : newScript.ContinueAsync(state, cancellationToken); state = task.GetAwaiter().GetResult(); } catch (Exception e) { DisplayException(e); continue; } bool hasValue; ITypeSymbol resultType = newCompilation.GetSubmissionResultType(out hasValue); if (hasValue) { if (resultType != null && resultType.SpecialType == SpecialType.System_Void) { _console.Out.WriteLine(_objectFormatter.VoidDisplayString); } else { globals.Print(state.ReturnValue); } } } }
private void RunScript(ScriptOptions options, string code, string scriptPath, CommandLineHostObject globals, ErrorLogger errorLogger) { options = options.WithPath(scriptPath).WithIsInteractive(false); var script = Script.CreateInitialScript <object>(_scriptCompiler, code, options, globals.GetType(), assemblyLoaderOpt: null); try { script.RunAsync(globals, globals.CancellationToken).Wait(); } catch (CompilationErrorException e) { _compiler.ReportErrors(e.Diagnostics, _console.Out, errorLogger); globals.ExitCode = CommonCompiler.Failed; } }
private void RunScript(ScriptOptions options, string code, string scriptPath, CommandLineHostObject globals, ErrorLogger errorLogger) { options = options.WithPath(scriptPath).WithIsInteractive(false); var script = Script.CreateInitialScript<object>(_scriptCompiler, code, options, globals.GetType(), assemblyLoaderOpt: null); try { script.RunAsync(globals, globals.CancellationToken).Wait(); } catch (CompilationErrorException e) { _compiler.ReportErrors(e.Diagnostics, _console.Out, errorLogger); globals.ExitCode = CommonCompiler.Failed; } }