diff options
| author | Nick Roberts | 2006-02-18 22:58:26 +0000 |
|---|---|---|
| committer | Nick Roberts | 2006-02-18 22:58:26 +0000 |
| commit | 054d409eaff2f96f891582ed132d1125b574d364 (patch) | |
| tree | 2864b800098e272399653a04448718077b51f32c | |
| parent | 02a471b435072c2e4fc95831cecbe7a3e54bdc4b (diff) | |
| download | emacs-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.el | 61 |
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)) |