diff options
| -rw-r--r-- | lisp/progmodes/gdb-ui.el | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el index a20f11e0aa2..f5d08d533fd 100644 --- a/lisp/progmodes/gdb-ui.el +++ b/lisp/progmodes/gdb-ui.el | |||
| @@ -732,9 +732,9 @@ With arg, enter name of variable to be watched in the minibuffer." | |||
| 732 | (gdb-enqueue-input | 732 | (gdb-enqueue-input |
| 733 | (list | 733 | (list |
| 734 | (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) | 734 | (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) |
| 735 | (concat "server interpreter mi \"-var-evaluate-expression " | 735 | (concat "server interpreter mi \"0-var-evaluate-expression " |
| 736 | (car var) "\"\n") | 736 | (car var) "\"\n") |
| 737 | (concat "-var-evaluate-expression " (car var) "\n")) | 737 | (concat "0-var-evaluate-expression " (car var) "\n")) |
| 738 | `(lambda () (gdb-var-evaluate-expression-handler | 738 | `(lambda () (gdb-var-evaluate-expression-handler |
| 739 | ,(car var) nil))))) | 739 | ,(car var) nil))))) |
| 740 | (if (search-forward "Undefined command" nil t) | 740 | (if (search-forward "Undefined command" nil t) |
| @@ -755,11 +755,13 @@ With arg, enter name of variable to be watched in the minibuffer." | |||
| 755 | 755 | ||
| 756 | (defun gdb-var-evaluate-expression-handler (varnum changed) | 756 | (defun gdb-var-evaluate-expression-handler (varnum changed) |
| 757 | (goto-char (point-min)) | 757 | (goto-char (point-min)) |
| 758 | (re-search-forward ".*value=\\(\".*\"\\)" nil t) | 758 | (re-search-forward "\\(.+\\)\\^done,value=\\(\".*\"\\)" nil t) |
| 759 | (setq gdb-pending-triggers | ||
| 760 | (delq (string-to-number (match-string 1)) gdb-pending-triggers)) | ||
| 759 | (let ((var (assoc varnum gdb-var-list))) | 761 | (let ((var (assoc varnum gdb-var-list))) |
| 760 | (when var | 762 | (when var |
| 761 | (if changed (setcar (nthcdr 5 var) 'changed)) | 763 | (if changed (setcar (nthcdr 5 var) 'changed)) |
| 762 | (setcar (nthcdr 4 var) (read (match-string 1))))) | 764 | (setcar (nthcdr 4 var) (read (match-string 2))))) |
| 763 | (gdb-speedbar-update)) | 765 | (gdb-speedbar-update)) |
| 764 | 766 | ||
| 765 | (defun gdb-var-list-children (varnum) | 767 | (defun gdb-var-list-children (varnum) |
| @@ -791,7 +793,7 @@ numchild=\"\\(.*?\\)\",.*?type=\"\\(.*?\\)\".*?}") | |||
| 791 | (gdb-enqueue-input | 793 | (gdb-enqueue-input |
| 792 | (list | 794 | (list |
| 793 | (concat | 795 | (concat |
| 794 | "server interpreter mi \"-var-evaluate-expression " | 796 | "server interpreter mi \"0-var-evaluate-expression " |
| 795 | (car varchild) "\"\n") | 797 | (car varchild) "\"\n") |
| 796 | `(lambda () (gdb-var-evaluate-expression-handler | 798 | `(lambda () (gdb-var-evaluate-expression-handler |
| 797 | ,(car varchild) nil))))))) | 799 | ,(car varchild) nil))))))) |
| @@ -813,16 +815,19 @@ type_changed=\".*?\".*?}") | |||
| 813 | (dolist (var gdb-var-list) | 815 | (dolist (var gdb-var-list) |
| 814 | (setcar (nthcdr 5 var) nil)) | 816 | (setcar (nthcdr 5 var) nil)) |
| 815 | (goto-char (point-min)) | 817 | (goto-char (point-min)) |
| 816 | (while (re-search-forward gdb-var-update-regexp nil t) | 818 | (let ((n 0)) |
| 817 | (let ((varnum (match-string 1))) | 819 | (while (re-search-forward gdb-var-update-regexp nil t) |
| 818 | (if (string-equal (match-string 2) "false") | 820 | (let ((varnum (match-string 1))) |
| 819 | (let ((var (assoc varnum gdb-var-list))) | 821 | (if (string-equal (match-string 2) "false") |
| 820 | (if var (setcar (nthcdr 5 var) 'out-of-scope))) | 822 | (let ((var (assoc varnum gdb-var-list))) |
| 821 | (gdb-enqueue-input | 823 | (if var (setcar (nthcdr 5 var) 'out-of-scope))) |
| 822 | (list | 824 | (setq n (1+ n)) |
| 823 | (concat "server interpreter mi \"-var-evaluate-expression " | 825 | (push n gdb-pending-triggers) |
| 824 | varnum "\"\n") | 826 | (gdb-enqueue-input |
| 825 | `(lambda () (gdb-var-evaluate-expression-handler ,varnum t))))))) | 827 | (list |
| 828 | (concat "server interpreter mi \"" (number-to-string n) | ||
| 829 | "-var-evaluate-expression " varnum "\"\n") | ||
| 830 | `(lambda () (gdb-var-evaluate-expression-handler ,varnum t)))))))) | ||
| 826 | (setq gdb-pending-triggers | 831 | (setq gdb-pending-triggers |
| 827 | (delq 'gdb-var-update gdb-pending-triggers))) | 832 | (delq 'gdb-var-update gdb-pending-triggers))) |
| 828 | 833 | ||
| @@ -832,7 +837,9 @@ type_changed=\".*?\".*?}") | |||
| 832 | (if (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer) | 837 | (if (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer) |
| 833 | '(gdbmi gdba)) | 838 | '(gdbmi gdba)) |
| 834 | (let ((text (speedbar-line-text))) | 839 | (let ((text (speedbar-line-text))) |
| 835 | (string-match "\\(\\S-+\\)" text) | 840 | ;; Can't use \\S-+ for whitespace because |
| 841 | ;; speedbar has a whacky syntax table. | ||
| 842 | (string-match "\\([^ \t]+\\)" text) | ||
| 836 | (let ((expr (match-string 1 text)) var varnum) | 843 | (let ((expr (match-string 1 text)) var varnum) |
| 837 | (catch 'expr-found | 844 | (catch 'expr-found |
| 838 | (dolist (var1 gdb-var-list) | 845 | (dolist (var1 gdb-var-list) |
| @@ -2803,6 +2810,7 @@ Kills the gdb buffers, and resets variables and the source buffers." | |||
| 2803 | (setq overlay-arrow-variable-list | 2810 | (setq overlay-arrow-variable-list |
| 2804 | (delq 'gdb-overlay-arrow-position overlay-arrow-variable-list)) | 2811 | (delq 'gdb-overlay-arrow-position overlay-arrow-variable-list)) |
| 2805 | (setq fringe-indicator-alist '((overlay-arrow . right-triangle))) | 2812 | (setq fringe-indicator-alist '((overlay-arrow . right-triangle))) |
| 2813 | (if (boundp 'speedbar-frame) (speedbar-timer-fn)) | ||
| 2806 | (setq gud-running nil) | 2814 | (setq gud-running nil) |
| 2807 | (setq gdb-active-process nil) | 2815 | (setq gdb-active-process nil) |
| 2808 | (setq gdb-var-list nil) | 2816 | (setq gdb-var-list nil) |