Fix handling of Python/Guile commands with arguments in gdb-mi.el
* lisp/progmodes/gdb-mi.el (gdb-python-guile-commands-regexp): New variable. (gdb-control-commands-regexp): Use it. (gdb-send): Don't increment gdb-control-level if the command matches gdb-python-guile-commands-regexp and has non-empty arguments. Reported by David Boles <boles@ieee.org> in http://lists.gnu.org/archive/html/emacs-devel/2017-06/msg00009.html.
This commit is contained in:
parent
6b4b13eb38
commit
30c0f81f9f
1 changed files with 18 additions and 5 deletions
|
|
@ -1767,13 +1767,17 @@ static char *magick[] = {
|
|||
:group 'gdb)
|
||||
|
||||
|
||||
(defvar gdb-python-guile-commands-regexp
|
||||
"python\\|python-interactive\\|pi\\|guile\\|guile-repl\\|gr"
|
||||
"Regexp that matches Python and Guile commands supported by GDB.")
|
||||
|
||||
(defvar gdb-control-commands-regexp
|
||||
(concat
|
||||
"^\\("
|
||||
"commands\\|if\\|while\\|define\\|document\\|"
|
||||
"python\\|python-interactive\\|pi\\|guile\\|guile-repl\\|gr\\|"
|
||||
"while-stepping\\|stepping\\|ws\\|actions"
|
||||
"\\)\\([[:blank:]]+.*\\)?$")
|
||||
gdb-python-guile-commands-regexp
|
||||
"\\|while-stepping\\|stepping\\|ws\\|actions"
|
||||
"\\)\\([[:blank:]]+\\([^[:blank:]]*\\)\\)?$")
|
||||
"Regexp matching GDB commands that enter a recursive reading loop.
|
||||
As long as GDB is in the recursive reading loop, it does not expect
|
||||
commands to be prefixed by \"-interpreter-exec console\".")
|
||||
|
|
@ -1831,8 +1835,17 @@ commands to be prefixed by \"-interpreter-exec console\".")
|
|||
(> gdb-control-level 0))
|
||||
(setq gdb-control-level (1- gdb-control-level)))
|
||||
(setq gdb-continuation nil)))
|
||||
(if (string-match gdb-control-commands-regexp string)
|
||||
(setq gdb-control-level (1+ gdb-control-level))))
|
||||
;; Python and Guile commands that have an argument don't enter the
|
||||
;; recursive reading loop.
|
||||
(let* ((control-command-p (string-match gdb-control-commands-regexp string))
|
||||
(command-arg (match-string 3 string))
|
||||
(python-or-guile-p (string-match gdb-python-guile-commands-regexp
|
||||
string)))
|
||||
(if (and control-command-p
|
||||
(or (not python-or-guile-p)
|
||||
(null command-arg)
|
||||
(zerop (length command-arg))))
|
||||
(setq gdb-control-level (1+ gdb-control-level)))))
|
||||
|
||||
(defun gdb-mi-quote (string)
|
||||
"Return STRING quoted properly as an MI argument.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue