private async void ExecuteStatements(string code) { ResetInterpreter(); await CodeViewer.Document.BeginInvoke(CodeViewer.Document.Blocks.Clear); CodeViewer.AppendOutput("Running script..."); if (string.IsNullOrEmpty(code)) { return; } List <AphidExpression> ast = null; try { ast = AphidParser.Parse(code); } catch (AphidParserException ex) { CodeViewer.AppendParserException(code, ex); return; } catch (Exception ex) { CodeViewer.AppendException(code, "Internal parser exception (please report)", ex, Interpreter); return; } try { try { Interpreter.ResetState(); Interpreter.TakeOwnership(); #if APHID_FRAME_ADD_DATA || APHID_FRAME_CATCH_POP try { #endif Interpreter.Interpret(ast); #if APHID_FRAME_ADD_DATA || APHID_FRAME_CATCH_POP } #endif #if APHID_FRAME_ADD_DATA || APHID_FRAME_CATCH_POP #if APHID_FRAME_ADD_DATA catch (Exception e) #else catch #endif { if (e.Source != AphidName.DebugInterpreter) { e.Source = AphidName.DebugInterpreter; #if APHID_FRAME_CATCH_POP Interpreter.PopQueuedFrames(); #endif #if APHID_FRAME_ADD_DATA e.Data.Add(AphidName.Interpreter, Interpreter); e.Data.Add(AphidName.FramesKey, Interpreter.GetRawStackTrace()); #endif } throw; } #endif } catch (AphidRuntimeException ex) { CodeViewer.AppendRuntimeException(code, ex, Interpreter); return; } catch (AphidParserException ex) { CodeViewer.AppendParserException(code, ex); return; } catch (Exception ex) { CodeViewer.AppendException(code, ".NET runtime error", ex, Interpreter); return; } } finally { UpdateVariables(); } await ExecuteWatchExpressionsAsync(); await WaitDumpTasksAsync(); CodeViewer.AppendOutput("Done"); }