Mercurial > octave
changeset 29420:4ee5a22dd4fe
fix interrupt and dbquit behavior when using server mode
* pt-eval.cc (debugger::server_loop): Set octave_interrupt_state to 1
before calling interpreter::recover_from_exception.
(debugger::quitting_debugger): Make server mode and top-level repl
behavior the same.
(tree_evaluator::server_loop): Set octave_interrupt_state to 1
before calling interpreter::recover_from_exception. Also handle
quit_debug_exception.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 09 Mar 2021 22:19:58 -0500 |
parents | 2cfdcae08e84 |
children | e4904768ca48 |
files | libinterp/parse-tree/pt-eval.cc |
diffstat | 1 files changed, 14 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/parse-tree/pt-eval.cc Tue Mar 09 15:20:31 2021 -0800 +++ b/libinterp/parse-tree/pt-eval.cc Tue Mar 09 22:19:58 2021 -0500 @@ -193,6 +193,7 @@ } catch (const interrupt_exception&) { + octave_interrupt_state = 1; m_interpreter.recover_from_exception (); // Required newline when the user does Ctrl+C at the prompt. @@ -506,7 +507,8 @@ // If there is no enclosing debug level or the top-level // repl is not active, handle dbquit the same as dbcont. - if (m_level > 0 || m_interpreter.in_top_level_repl ()) + if (m_level > 0 || m_interpreter.server_mode () + || m_interpreter.in_top_level_repl ()) throw quit_debug_exception (); else return true; @@ -517,7 +519,7 @@ // If the top-level repl is not active, handle "dbquit all" // the same as dbcont. - if (m_interpreter.in_top_level_repl ()) + if (m_interpreter.server_mode () || m_interpreter.in_top_level_repl ()) throw quit_debug_exception (true); else return true; @@ -793,6 +795,7 @@ } catch (const interrupt_exception&) { + octave_interrupt_state = 1; m_interpreter.recover_from_exception (); m_parser->reset (); @@ -831,6 +834,13 @@ break; } } + catch (const quit_debug_exception&) + { + octave_interrupt_state = 1; + m_interpreter.recover_from_exception (); + + m_parser->reset (); + } catch (const std::bad_alloc&) { m_interpreter.recover_from_exception (); @@ -3179,6 +3189,8 @@ if (echo ()) push_echo_state (tree_evaluator::ECHO_SCRIPTS, file_name); + // FIXME: Should we be using tree_evaluator::eval here? + cmd_list->accept (*this); if (m_returning)