aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Roberts2005-12-06 02:31:16 +0000
committerNick Roberts2005-12-06 02:31:16 +0000
commit564b25a4e2bf4a2a5e105f01f7ed00790184539b (patch)
tree45fb3901fce1645f3476ee54e370e6836cef6faa
parent5701678ae2923e6be4499181acc5b5c83958bc17 (diff)
downloademacs-564b25a4e2bf4a2a5e105f01f7ed00790184539b.tar.gz
emacs-564b25a4e2bf4a2a5e105f01f7ed00790184539b.zip
(gdb-var-create-handler)
(gdb-var-evaluate-expression-handler, gdb-frame-handler) (gdb-var-list-children-handler, gdb-var-update-handler): Current buffer is already gdb-partial-output-buffer, don't make it current again.
-rw-r--r--lisp/progmodes/gdb-ui.el193
1 files changed, 94 insertions, 99 deletions
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el
index 2fac23152e0..3e4f7a4447b 100644
--- a/lisp/progmodes/gdb-ui.el
+++ b/lisp/progmodes/gdb-ui.el
@@ -528,47 +528,45 @@ With arg, use separate IO iff arg is positive."
528 "name=\"\\(.*?\\)\",numchild=\"\\(.*?\\)\",type=\"\\(.*?\\)\"") 528 "name=\"\\(.*?\\)\",numchild=\"\\(.*?\\)\",type=\"\\(.*?\\)\"")
529 529
530(defun gdb-var-create-handler (expr) 530(defun gdb-var-create-handler (expr)
531 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) 531 (goto-char (point-min))
532 (goto-char (point-min)) 532 (if (re-search-forward gdb-var-create-regexp nil t)
533 (if (re-search-forward gdb-var-create-regexp nil t) 533 (let ((var (list expr
534 (let ((var (list expr 534 (match-string 1)
535 (match-string 1) 535 (match-string 2)
536 (match-string 2) 536 (match-string 3)
537 (match-string 3) 537 nil nil)))
538 nil nil))) 538 (push var gdb-var-list)
539 (push var gdb-var-list) 539 (speedbar 1)
540 (speedbar 1) 540 (unless (string-equal
541 (unless (string-equal 541 speedbar-initial-expansion-list-name "GUD")
542 speedbar-initial-expansion-list-name "GUD") 542 (speedbar-change-initial-expansion-list "GUD"))
543 (speedbar-change-initial-expansion-list "GUD")) 543 (gdb-enqueue-input
544 (gdb-enqueue-input 544 (list
545 (list 545 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
546 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 546 'gdba)
547 'gdba) 547 (concat "server interpreter mi \"-var-evaluate-expression "
548 (concat "server interpreter mi \"-var-evaluate-expression " 548 (nth 1 var) "\"\n")
549 (nth 1 var) "\"\n") 549 (concat "-var-evaluate-expression " (nth 1 var) "\n"))
550 (concat "-var-evaluate-expression " (nth 1 var) "\n")) 550 `(lambda () (gdb-var-evaluate-expression-handler
551 `(lambda () (gdb-var-evaluate-expression-handler 551 ,(nth 1 var) nil))))
552 ,(nth 1 var) nil)))) 552 (setq gdb-var-changed t))
553 (setq gdb-var-changed t)) 553 (if (search-forward "Undefined command" nil t)
554 (if (search-forward "Undefined command" nil t) 554 (message-box "Watching expressions requires gdb 6.0 onwards")
555 (message-box "Watching expressions requires gdb 6.0 onwards") 555 (message "No symbol \"%s\" in current context." expr))))
556 (message "No symbol \"%s\" in current context." expr)))))
557 556
558(defun gdb-var-evaluate-expression-handler (varnum changed) 557(defun gdb-var-evaluate-expression-handler (varnum changed)
559 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) 558 (goto-char (point-min))
560 (goto-char (point-min)) 559 (re-search-forward ".*value=\\(\".*\"\\)" nil t)
561 (re-search-forward ".*value=\\(\".*\"\\)" nil t) 560 (catch 'var-found
562 (catch 'var-found 561 (let ((num 0))
563 (let ((num 0)) 562 (dolist (var gdb-var-list)
564 (dolist (var gdb-var-list) 563 (if (string-equal varnum (cadr var))
565 (if (string-equal varnum (cadr var)) 564 (progn
566 (progn 565 (if changed (setcar (nthcdr 5 var) t))
567 (if changed (setcar (nthcdr 5 var) t)) 566 (setcar (nthcdr 4 var) (read (match-string 1)))
568 (setcar (nthcdr 4 var) (read (match-string 1))) 567 (setcar (nthcdr num gdb-var-list) var)
569 (setcar (nthcdr num gdb-var-list) var) 568 (throw 'var-found nil)))
570 (throw 'var-found nil))) 569 (setq num (+ num 1)))))
571 (setq num (+ num 1))))))
572 (setq gdb-var-changed t)) 570 (setq gdb-var-changed t))
573 571
574(defun gdb-var-list-children (varnum) 572(defun gdb-var-list-children (varnum)
@@ -581,33 +579,32 @@ With arg, use separate IO iff arg is positive."
581type=\"\\(.*?\\)\"") 579type=\"\\(.*?\\)\"")
582 580
583(defun gdb-var-list-children-handler (varnum) 581(defun gdb-var-list-children-handler (varnum)
584 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) 582 (goto-char (point-min))
585 (goto-char (point-min)) 583 (let ((var-list nil))
586 (let ((var-list nil)) 584 (catch 'child-already-watched
587 (catch 'child-already-watched 585 (dolist (var gdb-var-list)
588 (dolist (var gdb-var-list) 586 (if (string-equal varnum (cadr var))
589 (if (string-equal varnum (cadr var)) 587 (progn
590 (progn 588 (push var var-list)
591 (push var var-list) 589 (while (re-search-forward gdb-var-list-children-regexp nil t)
592 (while (re-search-forward gdb-var-list-children-regexp nil t) 590 (let ((varchild (list (match-string 2)
593 (let ((varchild (list (match-string 2) 591 (match-string 1)
594 (match-string 1) 592 (match-string 3)
595 (match-string 3) 593 (match-string 4)
596 (match-string 4) 594 nil nil)))
597 nil nil))) 595 (dolist (var1 gdb-var-list)
598 (dolist (var1 gdb-var-list) 596 (if (string-equal (cadr var1) (cadr varchild))
599 (if (string-equal (cadr var1) (cadr varchild)) 597 (throw 'child-already-watched nil)))
600 (throw 'child-already-watched nil))) 598 (push varchild var-list)
601 (push varchild var-list) 599 (gdb-enqueue-input
602 (gdb-enqueue-input 600 (list
603 (list 601 (concat
604 (concat 602 "server interpreter mi \"-var-evaluate-expression "
605 "server interpreter mi \"-var-evaluate-expression " 603 (nth 1 varchild) "\"\n")
606 (nth 1 varchild) "\"\n") 604 `(lambda () (gdb-var-evaluate-expression-handler
607 `(lambda () (gdb-var-evaluate-expression-handler 605 ,(nth 1 varchild) nil)))))))
608 ,(nth 1 varchild) nil))))))) 606 (push var var-list)))
609 (push var var-list))) 607 (setq gdb-var-list (nreverse var-list)))))
610 (setq gdb-var-list (nreverse var-list))))))
611 608
612(defun gdb-var-update () 609(defun gdb-var-update ()
613 (when (not (member 'gdb-var-update gdb-pending-triggers)) 610 (when (not (member 'gdb-var-update gdb-pending-triggers))
@@ -619,20 +616,19 @@ type=\"\\(.*?\\)\"")
619(defconst gdb-var-update-regexp "name=\"\\(.*?\\)\"") 616(defconst gdb-var-update-regexp "name=\"\\(.*?\\)\"")
620 617
621(defun gdb-var-update-handler () 618(defun gdb-var-update-handler ()
622 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) 619 (goto-char (point-min))
623 (goto-char (point-min)) 620 (while (re-search-forward gdb-var-update-regexp nil t)
624 (while (re-search-forward gdb-var-update-regexp nil t) 621 (catch 'var-found-1
625 (catch 'var-found-1 622 (let ((varnum (match-string 1)))
626 (let ((varnum (match-string 1))) 623 (dolist (var gdb-var-list)
627 (dolist (var gdb-var-list) 624 (gdb-enqueue-input
628 (gdb-enqueue-input 625 (list
629 (list 626 (concat "server interpreter mi \"-var-evaluate-expression "
630 (concat "server interpreter mi \"-var-evaluate-expression " 627 varnum "\"\n")
631 varnum "\"\n") 628 `(lambda () (gdb-var-evaluate-expression-handler ,varnum t))))
632 `(lambda () (gdb-var-evaluate-expression-handler ,varnum t)))) 629 (throw 'var-found-1 nil)))))
633 (throw 'var-found-1 nil))))))
634 (setq gdb-pending-triggers 630 (setq gdb-pending-triggers
635 (delq 'gdb-var-update gdb-pending-triggers)) 631 (delq 'gdb-var-update gdb-pending-triggers))
636 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 632 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame))
637 ;; Dummy command to update speedbar at right time. 633 ;; Dummy command to update speedbar at right time.
638 (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-timer-fn)) 634 (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-timer-fn))
@@ -2891,26 +2887,25 @@ BUFFER nil or omitted means use the current buffer."
2891(defun gdb-frame-handler () 2887(defun gdb-frame-handler ()
2892 (setq gdb-pending-triggers 2888 (setq gdb-pending-triggers
2893 (delq 'gdb-get-selected-frame gdb-pending-triggers)) 2889 (delq 'gdb-get-selected-frame gdb-pending-triggers))
2894 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) 2890 (goto-char (point-min))
2895 (goto-char (point-min)) 2891 (if (re-search-forward "Stack level \\([0-9]+\\)" nil t)
2896 (if (re-search-forward "Stack level \\([0-9]+\\)" nil t) 2892 (setq gdb-frame-number (match-string 1)))
2897 (setq gdb-frame-number (match-string 1))) 2893 (goto-char (point-min))
2898 (goto-char (point-min)) 2894 (if (re-search-forward
2899 (if (re-search-forward 2895 ".*=\\s-+0x0*\\(\\S-*\\)\\s-+in\\s-+\\(\\S-*?\\);? " nil t)
2900 ".*=\\s-+0x0*\\(\\S-*\\)\\s-+in\\s-+\\(\\S-*?\\);? " nil t) 2896 (progn
2901 (progn 2897 (setq gdb-selected-frame (match-string 2))
2902 (setq gdb-selected-frame (match-string 2)) 2898 (if (gdb-get-buffer 'gdb-locals-buffer)
2903 (if (gdb-get-buffer 'gdb-locals-buffer) 2899 (with-current-buffer (gdb-get-buffer 'gdb-locals-buffer)
2904 (with-current-buffer (gdb-get-buffer 'gdb-locals-buffer) 2900 (setq mode-name (concat "Locals:" gdb-selected-frame))))
2905 (setq mode-name (concat "Locals:" gdb-selected-frame)))) 2901 (if (gdb-get-buffer 'gdb-assembler-buffer)
2906 (if (gdb-get-buffer 'gdb-assembler-buffer) 2902 (with-current-buffer (gdb-get-buffer 'gdb-assembler-buffer)
2907 (with-current-buffer (gdb-get-buffer 'gdb-assembler-buffer) 2903 (setq mode-name (concat "Machine:" gdb-selected-frame))))
2908 (setq mode-name (concat "Machine:" gdb-selected-frame)))) 2904 (setq gdb-frame-address (match-string 1))))
2909 (setq gdb-frame-address (match-string 1)))) 2905 (goto-char (point-min))
2910 (goto-char (point-min)) 2906 (if (re-search-forward " source language \\(\\S-*\\)\." nil t)
2911 (if (re-search-forward " source language \\(\\S-*\\)\." nil t) 2907 (setq gdb-current-language (match-string 1)))
2912 (setq gdb-current-language (match-string 1)))) 2908 (gdb-invalidate-assembler))
2913 (gdb-invalidate-assembler))
2914 2909
2915(provide 'gdb-ui) 2910(provide 'gdb-ui)
2916 2911