aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Roberts2006-02-18 22:58:26 +0000
committerNick Roberts2006-02-18 22:58:26 +0000
commit054d409eaff2f96f891582ed132d1125b574d364 (patch)
tree2864b800098e272399653a04448718077b51f32c
parent02a471b435072c2e4fc95831cecbe7a3e54bdc4b (diff)
downloademacs-054d409eaff2f96f891582ed132d1125b574d364.tar.gz
emacs-054d409eaff2f96f891582ed132d1125b574d364.zip
(gdb-var-evaluate-expression-handler)
(gdb-var-update-handler): Detect out of scope variables with pre GDB 6.4 too. (gdb-post-prompt): Revert changet 2006-02-17 (force update). Reset status of variable objexts to nil in update handlers. (gdb-var-update-handler-1): Detect when a variable object comes in scope. setcar on var changes gdb-var-list directly.
-rw-r--r--lisp/progmodes/gdb-ui.el61
1 files changed, 37 insertions, 24 deletions
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el
index dfcefceb152..a85edb1a1bc 100644
--- a/lisp/progmodes/gdb-ui.el
+++ b/lisp/progmodes/gdb-ui.el
@@ -624,7 +624,7 @@ With arg, automatically raise speedbar iff arg is positive."
624 (dolist (var gdb-var-list) 624 (dolist (var gdb-var-list)
625 (if (string-equal varnum (cadr var)) 625 (if (string-equal varnum (cadr var))
626 (progn 626 (progn
627 (if changed (setcar (nthcdr 5 var) t)) 627 (if changed (setcar (nthcdr 5 var) 'changed))
628 (setcar (nthcdr 4 var) (read (match-string 1))) 628 (setcar (nthcdr 4 var) (read (match-string 1)))
629 (setcar (nthcdr num gdb-var-list) var) 629 (setcar (nthcdr num gdb-var-list) var)
630 (throw 'var-found nil))) 630 (throw 'var-found nil)))
@@ -679,16 +679,26 @@ type=\"\\(.*?\\)\"")
679 679
680(defun gdb-var-update-handler () 680(defun gdb-var-update-handler ()
681 (goto-char (point-min)) 681 (goto-char (point-min))
682 (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))
688 (goto-char (point-min))
682 (while (re-search-forward gdb-var-update-regexp nil t) 689 (while (re-search-forward gdb-var-update-regexp nil t)
683 (catch 'var-found-1 690 (let ((varnum (match-string 1)))
684 (let ((varnum (match-string 1))) 691 (if (string-equal (match-string 2) "false")
685 (dolist (var gdb-var-list) 692 (catch 'var-found
686 (gdb-enqueue-input 693 (dolist (var gdb-var-list)
687 (list 694 (if (string-equal varnum (cadr var))
688 (concat "server interpreter mi \"-var-evaluate-expression " 695 (setcar (nthcdr 5 var) 'out-of-scope)
689 varnum "\"\n") 696 (throw 'var-found nil))))
690 `(lambda () (gdb-var-evaluate-expression-handler ,varnum t)))) 697 (gdb-enqueue-input
691 (throw 'var-found-1 nil))))) 698 (list
699 (concat "server interpreter mi \"-var-evaluate-expression "
700 varnum "\"\n")
701 `(lambda () (gdb-var-evaluate-expression-handler ,varnum t)))))))
692 (setq gdb-pending-triggers 702 (setq gdb-pending-triggers
693 (delq 'gdb-var-update gdb-pending-triggers)) 703 (delq 'gdb-var-update gdb-pending-triggers))
694 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 704 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame))
@@ -1217,8 +1227,7 @@ happens to be appropriate."
1217 ;; FIXME: with GDB-6 on Darwin, this might very well work. 1227 ;; FIXME: with GDB-6 on Darwin, this might very well work.
1218 ;; Only needed/used with speedbar/watch expressions. 1228 ;; Only needed/used with speedbar/watch expressions.
1219 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 1229 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame))
1220 (dolist (var gdb-var-list) 1230 (setq gdb-var-changed t) ; force update
1221 (setcar (nthcdr 5 var) nil))
1222 (if (string-equal gdb-version "pre-6.4") 1231 (if (string-equal gdb-version "pre-6.4")
1223 (gdb-var-update) 1232 (gdb-var-update)
1224 (gdb-var-update-1))))) 1233 (gdb-var-update-1)))))
@@ -3045,21 +3054,25 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}")
3045 3054
3046(defun gdb-var-update-handler-1 () 3055(defun gdb-var-update-handler-1 ()
3047 (goto-char (point-min)) 3056 (goto-char (point-min))
3057 (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))
3063 (goto-char (point-min))
3048 (while (re-search-forward gdb-var-update-regexp-1 nil t) 3064 (while (re-search-forward gdb-var-update-regexp-1 nil t)
3049 (let ((varnum (match-string 1))) 3065 (let ((varnum (match-string 1)))
3050 (catch 'var-found1 3066 (catch 'var-found1
3051 (let ((num 0)) 3067 (dolist (var gdb-var-list)
3052 (dolist (var gdb-var-list) 3068 (if (string-equal varnum (cadr var))
3053 (if (string-equal varnum (cadr var)) 3069 (progn
3054 (progn 3070 (if (string-equal (match-string 3) "false")
3055 (if (string-equal (match-string 3) "false") 3071 (setcar (nthcdr 5 var) 'out-of-scope)
3056 (setcar (nthcdr 5 var) 'out-of-scope) 3072 (setcar (nthcdr 5 var) 'changed)
3057 (setcar (nthcdr 5 var) 'changed) 3073 (setcar (nthcdr 4 var)
3058 (setcar (nthcdr 4 var) 3074 (read (match-string 2))))
3059 (read (match-string 2)))) 3075 (throw 'var-found1 nil))))))
3060 (setcar (nthcdr num gdb-var-list) var)
3061 (throw 'var-found1 nil)))
3062 (setq num (+ num 1))))))
3063 (setq gdb-var-changed t)) 3076 (setq gdb-var-changed t))
3064 (setq gdb-pending-triggers 3077 (setq gdb-pending-triggers
3065 (delq 'gdb-var-update gdb-pending-triggers)) 3078 (delq 'gdb-var-update gdb-pending-triggers))