diff options
| author | Nick Roberts | 2005-12-06 02:31:16 +0000 |
|---|---|---|
| committer | Nick Roberts | 2005-12-06 02:31:16 +0000 |
| commit | 564b25a4e2bf4a2a5e105f01f7ed00790184539b (patch) | |
| tree | 45fb3901fce1645f3476ee54e370e6836cef6faa | |
| parent | 5701678ae2923e6be4499181acc5b5c83958bc17 (diff) | |
| download | emacs-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.el | 193 |
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." | |||
| 581 | type=\"\\(.*?\\)\"") | 579 | type=\"\\(.*?\\)\"") |
| 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 | ||