# HG changeset patch # User Nick Roberts # Date 1147342083 0 # Node ID 5bf70421e7eaa1cbc1763eb6065a6ba5b66a35cd # Parent e7ce4cecd335262a16e0329ac8380186de0f50ba (gdb-reset): Update speedbar if necessary. (gdb-var-evaluate-expression-handler, gdb-var-update-handler): Use a token for pending-triggers to ensure gdb-var-update gets called once per user input again for pre-GDB 6.4. (gdb-var-delete): Match on more complex expressions. (gdb-var-list-children-handler, gdb-var-create-handler): Use a token for consistency. diff -r e7ce4cecd335 -r 5bf70421e7ea lisp/progmodes/gdb-ui.el --- a/lisp/progmodes/gdb-ui.el Thu May 11 10:07:08 2006 +0000 +++ b/lisp/progmodes/gdb-ui.el Thu May 11 10:08:03 2006 +0000 @@ -732,9 +732,9 @@ (gdb-enqueue-input (list (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) - (concat "server interpreter mi \"-var-evaluate-expression " + (concat "server interpreter mi \"0-var-evaluate-expression " (car var) "\"\n") - (concat "-var-evaluate-expression " (car var) "\n")) + (concat "0-var-evaluate-expression " (car var) "\n")) `(lambda () (gdb-var-evaluate-expression-handler ,(car var) nil))))) (if (search-forward "Undefined command" nil t) @@ -755,11 +755,13 @@ (defun gdb-var-evaluate-expression-handler (varnum changed) (goto-char (point-min)) - (re-search-forward ".*value=\\(\".*\"\\)" nil t) + (re-search-forward "\\(.+\\)\\^done,value=\\(\".*\"\\)" nil t) + (setq gdb-pending-triggers + (delq (string-to-number (match-string 1)) gdb-pending-triggers)) (let ((var (assoc varnum gdb-var-list))) (when var (if changed (setcar (nthcdr 5 var) 'changed)) - (setcar (nthcdr 4 var) (read (match-string 1))))) + (setcar (nthcdr 4 var) (read (match-string 2))))) (gdb-speedbar-update)) (defun gdb-var-list-children (varnum) @@ -791,7 +793,7 @@ (gdb-enqueue-input (list (concat - "server interpreter mi \"-var-evaluate-expression " + "server interpreter mi \"0-var-evaluate-expression " (car varchild) "\"\n") `(lambda () (gdb-var-evaluate-expression-handler ,(car varchild) nil))))))) @@ -813,16 +815,19 @@ (dolist (var gdb-var-list) (setcar (nthcdr 5 var) nil)) (goto-char (point-min)) - (while (re-search-forward gdb-var-update-regexp nil t) - (let ((varnum (match-string 1))) - (if (string-equal (match-string 2) "false") - (let ((var (assoc varnum gdb-var-list))) - (if var (setcar (nthcdr 5 var) 'out-of-scope))) - (gdb-enqueue-input - (list - (concat "server interpreter mi \"-var-evaluate-expression " - varnum "\"\n") - `(lambda () (gdb-var-evaluate-expression-handler ,varnum t))))))) + (let ((n 0)) + (while (re-search-forward gdb-var-update-regexp nil t) + (let ((varnum (match-string 1))) + (if (string-equal (match-string 2) "false") + (let ((var (assoc varnum gdb-var-list))) + (if var (setcar (nthcdr 5 var) 'out-of-scope))) + (setq n (1+ n)) + (push n gdb-pending-triggers) + (gdb-enqueue-input + (list + (concat "server interpreter mi \"" (number-to-string n) + "-var-evaluate-expression " varnum "\"\n") + `(lambda () (gdb-var-evaluate-expression-handler ,varnum t)))))))) (setq gdb-pending-triggers (delq 'gdb-var-update gdb-pending-triggers))) @@ -832,7 +837,9 @@ (if (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer) '(gdbmi gdba)) (let ((text (speedbar-line-text))) - (string-match "\\(\\S-+\\)" text) + ;; Can't use \\S-+ for whitespace because + ;; speedbar has a whacky syntax table. + (string-match "\\([^ \t]+\\)" text) (let ((expr (match-string 1 text)) var varnum) (catch 'expr-found (dolist (var1 gdb-var-list) @@ -2803,6 +2810,7 @@ (setq overlay-arrow-variable-list (delq 'gdb-overlay-arrow-position overlay-arrow-variable-list)) (setq fringe-indicator-alist '((overlay-arrow . right-triangle))) + (if (boundp 'speedbar-frame) (speedbar-timer-fn)) (setq gud-running nil) (setq gdb-active-process nil) (setq gdb-var-list nil)