aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorNick Roberts2006-02-19 05:21:50 +0000
committerNick Roberts2006-02-19 05:21:50 +0000
commite5538a995cb0e696ac3389ec09e0197a398b90eb (patch)
treefe2d141ec1a029c583037c10e6f6d626b25c46bb /lisp
parent672162f3de5611188bbad8388272c410ec4ef54d (diff)
downloademacs-e5538a995cb0e696ac3389ec09e0197a398b90eb.tar.gz
emacs-e5538a995cb0e696ac3389ec09e0197a398b90eb.zip
(gdb-force-update): Rename from gdb-var-changed.
(gdb-post-prompt): Use it. (gdb-var-create-handler, gdb-var-evaluate-expression-handler) (gdb-var-update-handler, gdb-var-delete) (gdb-speedbar-expand-node, gdb-var-list-children-handler-1) (gdb-var-update-handler-1): Don't set gdb-var-changed, just set gdb-force-update in gdb-post-prompt. (gdb-reset): Clear watch expressions from speedbar when quitting.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/progmodes/gdb-ui.el65
1 files changed, 23 insertions, 42 deletions
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el
index a85edb1a1bc..ddf4095008f 100644
--- a/lisp/progmodes/gdb-ui.el
+++ b/lisp/progmodes/gdb-ui.el
@@ -109,7 +109,8 @@
109 "List of variables in watch window. 109 "List of variables in watch window.
110Each element has the form (EXPRESSION VARNUM NUMCHILD TYPE VALUE STATUS) where 110Each element has the form (EXPRESSION VARNUM NUMCHILD TYPE VALUE STATUS) where
111STATUS is nil (unchanged), `changed' or `out-of-scope'.") 111STATUS is nil (unchanged), `changed' or `out-of-scope'.")
112(defvar gdb-var-changed t "Non-nil means that `gdb-var-list' has changed.") 112(defvar gdb-force-update t
113 "Non-nil means that view of watch expressions will be updated in the speedbar.")
113(defvar gdb-main-file nil "Source file from which program execution begins.") 114(defvar gdb-main-file nil "Source file from which program execution begins.")
114(defvar gdb-overlay-arrow-position nil) 115(defvar gdb-overlay-arrow-position nil)
115(defvar gdb-server-prefix nil) 116(defvar gdb-server-prefix nil)
@@ -455,8 +456,7 @@ With arg, use separate IO iff arg is positive."
455 gdb-current-language nil 456 gdb-current-language nil
456 gdb-frame-number nil 457 gdb-frame-number nil
457 gdb-var-list nil 458 gdb-var-list nil
458 ;; Set initially to t to force update. 459 gdb-force-update t
459 gdb-var-changed t
460 gdb-first-post-prompt t 460 gdb-first-post-prompt t
461 gdb-prompting nil 461 gdb-prompting nil
462 gdb-input-queue nil 462 gdb-input-queue nil
@@ -610,8 +610,7 @@ With arg, automatically raise speedbar iff arg is positive."
610 (nth 1 var) "\"\n") 610 (nth 1 var) "\"\n")
611 (concat "-var-evaluate-expression " (nth 1 var) "\n")) 611 (concat "-var-evaluate-expression " (nth 1 var) "\n"))
612 `(lambda () (gdb-var-evaluate-expression-handler 612 `(lambda () (gdb-var-evaluate-expression-handler
613 ,(nth 1 var) nil)))) 613 ,(nth 1 var) nil)))))
614 (setq gdb-var-changed t))
615 (if (search-forward "Undefined command" nil t) 614 (if (search-forward "Undefined command" nil t)
616 (message-box "Watching expressions requires gdb 6.0 onwards") 615 (message-box "Watching expressions requires gdb 6.0 onwards")
617 (message "No symbol \"%s\" in current context." expr)))) 616 (message "No symbol \"%s\" in current context." expr))))
@@ -620,16 +619,11 @@ With arg, automatically raise speedbar iff arg is positive."
620 (goto-char (point-min)) 619 (goto-char (point-min))
621 (re-search-forward ".*value=\\(\".*\"\\)" nil t) 620 (re-search-forward ".*value=\\(\".*\"\\)" nil t)
622 (catch 'var-found 621 (catch 'var-found
623 (let ((num 0)) 622 (dolist (var gdb-var-list)
624 (dolist (var gdb-var-list) 623 (when (string-equal varnum (cadr var))
625 (if (string-equal varnum (cadr var)) 624 (if changed (setcar (nthcdr 5 var) 'changed))
626 (progn 625 (setcar (nthcdr 4 var) (read (match-string 1)))
627 (if changed (setcar (nthcdr 5 var) 'changed)) 626 (throw 'var-found nil)))))
628 (setcar (nthcdr 4 var) (read (match-string 1)))
629 (setcar (nthcdr num gdb-var-list) var)
630 (throw 'var-found nil)))
631 (setq num (+ num 1)))))
632 (setq gdb-var-changed t))
633 627
634(defun gdb-var-list-children (varnum) 628(defun gdb-var-list-children (varnum)
635 (gdb-enqueue-input 629 (gdb-enqueue-input
@@ -678,12 +672,7 @@ type=\"\\(.*?\\)\"")
678(defconst gdb-var-update-regexp "name=\"\\(.*?\\)\",in_scope=\"\\(.*?\\)\"") 672(defconst gdb-var-update-regexp "name=\"\\(.*?\\)\",in_scope=\"\\(.*?\\)\"")
679 673
680(defun gdb-var-update-handler () 674(defun gdb-var-update-handler ()
681 (goto-char (point-min))
682 (dolist (var gdb-var-list) 675 (dolist (var gdb-var-list)
683 (when (and (eq (car (nthcdr 5 var)) 'out-of-scope)
684 (not (re-search-forward gdb-var-update-regexp-1 nil t))
685 (not gdb-var-changed))
686 (setq gdb-var-changed t))
687 (setcar (nthcdr 5 var) nil)) 676 (setcar (nthcdr 5 var) nil))
688 (goto-char (point-min)) 677 (goto-char (point-min))
689 (while (re-search-forward gdb-var-update-regexp nil t) 678 (while (re-search-forward gdb-var-update-regexp nil t)
@@ -691,8 +680,8 @@ type=\"\\(.*?\\)\"")
691 (if (string-equal (match-string 2) "false") 680 (if (string-equal (match-string 2) "false")
692 (catch 'var-found 681 (catch 'var-found
693 (dolist (var gdb-var-list) 682 (dolist (var gdb-var-list)
694 (if (string-equal varnum (cadr var)) 683 (when (string-equal varnum (cadr var))
695 (setcar (nthcdr 5 var) 'out-of-scope) 684 (setcar (nthcdr 5 var) 'out-of-scope)
696 (throw 'var-found nil)))) 685 (throw 'var-found nil))))
697 (gdb-enqueue-input 686 (gdb-enqueue-input
698 (list 687 (list
@@ -734,8 +723,7 @@ type=\"\\(.*?\\)\"")
734 (setq gdb-var-list (delq var gdb-var-list)) 723 (setq gdb-var-list (delq var gdb-var-list))
735 (dolist (varchild gdb-var-list) 724 (dolist (varchild gdb-var-list)
736 (if (string-match (concat (nth 1 var) "\\.") (nth 1 varchild)) 725 (if (string-match (concat (nth 1 var) "\\.") (nth 1 varchild))
737 (setq gdb-var-list (delq varchild gdb-var-list)))) 726 (setq gdb-var-list (delq varchild gdb-var-list)))))))))
738 (setq gdb-var-changed t))))))
739 727
740(defun gdb-edit-value (text token indent) 728(defun gdb-edit-value (text token indent)
741 "Assign a value to a variable displayed in the speedbar." 729 "Assign a value to a variable displayed in the speedbar."
@@ -773,7 +761,6 @@ INDENT is the current indentation depth."
773 (dolist (var gdb-var-list) 761 (dolist (var gdb-var-list)
774 (if (string-match (concat token "\\.") (nth 1 var)) 762 (if (string-match (concat token "\\.") (nth 1 var))
775 (setq gdb-var-list (delq var gdb-var-list)))) 763 (setq gdb-var-list (delq var gdb-var-list))))
776 (setq gdb-var-changed t)
777 (with-current-buffer gud-comint-buffer 764 (with-current-buffer gud-comint-buffer
778 (speedbar-timer-fn))))) 765 (speedbar-timer-fn)))))
779 766
@@ -1227,7 +1214,7 @@ happens to be appropriate."
1227 ;; FIXME: with GDB-6 on Darwin, this might very well work. 1214 ;; FIXME: with GDB-6 on Darwin, this might very well work.
1228 ;; Only needed/used with speedbar/watch expressions. 1215 ;; Only needed/used with speedbar/watch expressions.
1229 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 1216 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame))
1230 (setq gdb-var-changed t) ; force update 1217 (setq gdb-force-update t)
1231 (if (string-equal gdb-version "pre-6.4") 1218 (if (string-equal gdb-version "pre-6.4")
1232 (gdb-var-update) 1219 (gdb-var-update)
1233 (gdb-var-update-1))))) 1220 (gdb-var-update-1)))))
@@ -2638,6 +2625,8 @@ Kills the gdb buffers and resets the source buffers."
2638 (setq gdb-overlay-arrow-position nil)) 2625 (setq gdb-overlay-arrow-position nil))
2639 (setq overlay-arrow-variable-list 2626 (setq overlay-arrow-variable-list
2640 (delq 'gdb-overlay-arrow-position overlay-arrow-variable-list)) 2627 (delq 'gdb-overlay-arrow-position overlay-arrow-variable-list))
2628 (if (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame))
2629 (speedbar-refresh))
2641 (setq gud-running nil) 2630 (setq gud-running nil)
2642 (setq gdb-active-process nil) 2631 (setq gdb-active-process nil)
2643 (setq gdb-var-list nil) 2632 (setq gdb-var-list nil)
@@ -3034,7 +3023,6 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}")
3034 (throw 'child-already-watched nil))) 3023 (throw 'child-already-watched nil)))
3035 (push varchild var-list)))) 3024 (push varchild var-list))))
3036 (push var var-list))) 3025 (push var var-list)))
3037 (setq gdb-var-changed t)
3038 (setq gdb-var-list (nreverse var-list))))) 3026 (setq gdb-var-list (nreverse var-list)))))
3039 3027
3040; Uses "-var-update --all-values". Needs GDB 6.4 onwards. 3028; Uses "-var-update --all-values". Needs GDB 6.4 onwards.
@@ -3053,27 +3041,20 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}")
3053 "name=\"\\(.*?\\)\",\\(?:value=\\(\".*?\"\\),\\)?in_scope=\"\\(.*?\\)\"") 3041 "name=\"\\(.*?\\)\",\\(?:value=\\(\".*?\"\\),\\)?in_scope=\"\\(.*?\\)\"")
3054 3042
3055(defun gdb-var-update-handler-1 () 3043(defun gdb-var-update-handler-1 ()
3056 (goto-char (point-min))
3057 (dolist (var gdb-var-list) 3044 (dolist (var gdb-var-list)
3058 (when (and (eq (car (nthcdr 5 var)) 'out-of-scope)
3059 (not (re-search-forward gdb-var-update-regexp-1 nil t))
3060 (not gdb-var-changed))
3061 (setq gdb-var-changed t))
3062 (setcar (nthcdr 5 var) nil)) 3045 (setcar (nthcdr 5 var) nil))
3063 (goto-char (point-min)) 3046 (goto-char (point-min))
3064 (while (re-search-forward gdb-var-update-regexp-1 nil t) 3047 (while (re-search-forward gdb-var-update-regexp-1 nil t)
3065 (let ((varnum (match-string 1))) 3048 (let ((varnum (match-string 1)))
3066 (catch 'var-found1 3049 (catch 'var-found
3067 (dolist (var gdb-var-list) 3050 (dolist (var gdb-var-list)
3068 (if (string-equal varnum (cadr var)) 3051 (when (string-equal varnum (cadr var))
3069 (progn 3052 (if (string-equal (match-string 3) "false")
3070 (if (string-equal (match-string 3) "false") 3053 (setcar (nthcdr 5 var) 'out-of-scope)
3071 (setcar (nthcdr 5 var) 'out-of-scope) 3054 (setcar (nthcdr 5 var) 'changed)
3072 (setcar (nthcdr 5 var) 'changed) 3055 (setcar (nthcdr 4 var)
3073 (setcar (nthcdr 4 var) 3056 (read (match-string 2))))
3074 (read (match-string 2)))) 3057 (throw 'var-found nil))))))
3075 (throw 'var-found1 nil))))))
3076 (setq gdb-var-changed t))
3077 (setq gdb-pending-triggers 3058 (setq gdb-pending-triggers
3078 (delq 'gdb-var-update gdb-pending-triggers)) 3059 (delq 'gdb-var-update gdb-pending-triggers))
3079 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 3060 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame))