aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/progmodes/gdb-ui.el40
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)