From c8a44c4e5cea572515fb74e01261c6fe5cd3558e Mon Sep 17 00:00:00 2001 From: Dmitry Dzhus Date: Tue, 11 Aug 2009 10:48:56 +0000 Subject: [PATCH] *** empty log message *** --- lisp/ChangeLog | 9 +++++++++ lisp/progmodes/gdb-mi.el | 42 +++++++++++++++++++++++----------------- lisp/progmodes/gud.el | 4 ++-- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8c649b17718..ccd8359f285 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2009-08-11 Dmitry Dzhus + + * progmodes/gud.el (gud-stop-subjob): Rewritten without macros + from `gdb-mi.el' to avoid extra tangling. + + * progmodes/gdb-mi.el (gdb-gud-context-call): Reverting previous + change which breaks `gud-def' definitions. used in `gdb'. + (gdb-update-gud-running): No extra fuss for updating frame number. + 2009-08-10 Stefan Monnier * international/mule-cmds.el (mule-keymap, mule-menu-keymap) diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 975908f2166..d2724cc3779 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -134,7 +134,14 @@ value.") (defvar gdb-frame-number nil "Selected frame level for main current thread. -Reset whenever current thread changes.") +Updated according to the following rules: + +When a thread is selected or current thread stops, set to \"0\". + +When current thread goes running (and possibly exits eventually), +set to nil. + +May be manually changed by user with `gdb-select-frame'.") ;; Used to show overlay arrow in source buffer. All set in ;; gdb-get-main-selected-frame. Disassembly buffer should not use @@ -565,12 +572,15 @@ When `gdb-non-stop' is nil, return COMMAND unchanged." (gdb-current-context-command command t)) command)) -;; TODO Document this. We use noarg when not in gud-def -(defun gdb-gud-context-call (cmd1 &optional cmd2 noall noarg) - (gud-call - (concat - (gdb-gud-context-command cmd1 noall) - cmd2) (when (not noarg) 'arg))) +(defmacro gdb-gud-context-call (cmd1 &optional cmd2 noall noarg) + "`gud-call' wrapper which adds --thread/--all options between +CMD1 and CMD2. NOALL is the same as in `gdb-gud-context-command'. + +NOARG must be t when this macro is used outside `gud-def'" + `(gud-call + (concat + (gdb-gud-context-command ,cmd1 ,noall) + ,cmd2) ,(when (not noarg) 'arg))) ;;;###autoload (defun gdb (command-line) @@ -1655,11 +1665,9 @@ need to be updated appropriately when current thread changes." (gdb-update-gud-running)) (defun gdb-update-gud-running () - "Set `gud-running' and `gdb-frame-number' according to the state -of current thread. + "Set `gud-running' according to the state of current thread. -`gdb-frame-number' is set to nil if new current thread is -running. +`gdb-frame-number' is set to 0 if current thread is now stopped. Note that when `gdb-gud-control-all-threads' is t, `gud-running' cannot be reliably used to determine whether or not execution @@ -1673,12 +1681,10 @@ is running." (setq gud-running (string= (gdb-get-field (gdb-current-buffer-thread) 'state) "running")) - ;; We change frame number only if the state of current thread has - ;; changed or there's no current thread. - (when (not (eq gud-running old-value)) - (if (or gud-running (not (gdb-current-buffer-thread))) - (setq gdb-frame-number nil) - (setq gdb-frame-number "0"))))) + ;; Set frame number to "0" when _current_ threads stops + (when (and (gdb-current-buffer-thread) + (not (eq gud-running old-value))) + (setq gdb-frame-number "0")))) (defun gdb-show-run-p () "Return t if \"Run/continue\" should be shown on the toolbar." @@ -1801,7 +1807,7 @@ is running." (defun gdb-thread-created (output-field)) (defun gdb-thread-exited (output-field) "Handle =thread-exited async record: unset `gdb-thread-number' -if current thread exited and update threads list." + if current thread exited and update threads list." (let* ((thread-id (gdb-get-field (gdb-json-string output-field) 'id))) (if (string= gdb-thread-number thread-id) (gdb-setq-thread-number nil)) diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index 6e66b0fb261..4b77f4a1ff5 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el @@ -133,7 +133,7 @@ Used to grey out relevant toolbar icons.") (and (eq gud-minor-mode 'gdbmi) (> (car (window-fringes)) 0))))) -(declare-function gdb-gud-context-call "gdb-mi.el") +(declare-function gdb-gud-context-command "gdb-mi.el") (defun gud-stop-subjob () (interactive) @@ -143,7 +143,7 @@ Used to grey out relevant toolbar icons.") ((eq gud-minor-mode 'jdb) (gud-call "suspend")) ((eq gud-minor-mode 'gdbmi) - (gdb-gud-context-call "-exec-interrupt" nil nil t)) + (gud-call (gdb-gud-context-command "-exec-interrupt"))) (t (comint-interrupt-subjob))))) -- 2.39.2