aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Dzhus2009-08-04 13:11:06 +0000
committerDmitry Dzhus2009-08-04 13:11:06 +0000
commit20f12ed8829efbbbb1c42c2d53e44dee8a04cc04 (patch)
tree706fff117b430b5fbf40098170bb4d9ee3a4655d
parent98bf84941396371b005d52fa2043660a202e3e9e (diff)
downloademacs-20f12ed8829efbbbb1c42c2d53e44dee8a04cc04.tar.gz
emacs-20f12ed8829efbbbb1c42c2d53e44dee8a04cc04.zip
* progmodes/gdb-mi.el (gdb-breakpoints-buffer-name)
(gdb-locals-buffer-name, gdb-registers-buffer-name) (gdb-memory-buffer-name, gdb-stack-buffer-name): Do not switch to (gud-comint-buffer) in *-buffer-name functions because (gdb-get-target-string) already does that. (gdb-locals-handler-custom, gdb-registers-handler-custom) (gdb-changed-registers-handler): Rewritten without regexps.
-rw-r--r--lisp/ChangeLog8
-rw-r--r--lisp/progmodes/gdb-mi.el163
2 files changed, 61 insertions, 110 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index cb2aa1bce96..c8de6752a25 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -11,6 +11,14 @@
11 (gdb-invalidate-frames, gdb-invalidate-locals) 11 (gdb-invalidate-frames, gdb-invalidate-locals)
12 (gdb-invalidate-registers): Use --thread option. 12 (gdb-invalidate-registers): Use --thread option.
13 13
14 * progmodes/gdb-mi.el (gdb-breakpoints-buffer-name)
15 (gdb-locals-buffer-name, gdb-registers-buffer-name)
16 (gdb-memory-buffer-name, gdb-stack-buffer-name): Do not switch
17 to (gud-comint-buffer) in *-buffer-name functions
18 because (gdb-get-target-string) already does that.
19 (gdb-locals-handler-custom, gdb-registers-handler-custom)
20 (gdb-changed-registers-handler): Rewritten without regexps.
21
142009-08-04 Michael Albinus <michael.albinus@gmx.de> 222009-08-04 Michael Albinus <michael.albinus@gmx.de>
15 23
16 * net/tramp.el (top): Make check for tramp-gvfs loading more 24 * net/tramp.el (top): Make check for tramp-gvfs loading more
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index 5b03ac28956..1abdb0d8187 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -1756,8 +1756,7 @@ If not in a source or disassembly buffer just set point."
1756 (get-text-property 0 'gdb-bptno obj))))))))) 1756 (get-text-property 0 'gdb-bptno obj)))))))))
1757 1757
1758(defun gdb-breakpoints-buffer-name () 1758(defun gdb-breakpoints-buffer-name ()
1759 (with-current-buffer gud-comint-buffer 1759 (concat "*breakpoints of " (gdb-get-target-string) "*"))
1760 (concat "*breakpoints of " (gdb-get-target-string) "*")))
1761 1760
1762(def-gdb-display-buffer 1761(def-gdb-display-buffer
1763 gdb-display-breakpoints-buffer 1762 gdb-display-breakpoints-buffer
@@ -2354,8 +2353,7 @@ DOC is an optional documentation string."
2354 'gdb-invalidate-memory) 2353 'gdb-invalidate-memory)
2355 2354
2356(defun gdb-memory-buffer-name () 2355(defun gdb-memory-buffer-name ()
2357 (with-current-buffer gud-comint-buffer 2356 (concat "*memory of " (gdb-get-target-string) "*"))
2358 (concat "*memory of " (gdb-get-target-string) "*")))
2359 2357
2360(def-gdb-display-buffer 2358(def-gdb-display-buffer
2361 gdb-display-memory-buffer 2359 gdb-display-memory-buffer
@@ -2614,8 +2612,7 @@ member."
2614 (forward-line 1))))) 2612 (forward-line 1)))))
2615 2613
2616(defun gdb-stack-buffer-name () 2614(defun gdb-stack-buffer-name ()
2617 (with-current-buffer gud-comint-buffer 2615 (concat "*stack frames of " (gdb-get-target-string) "*"))
2618 (concat "*stack frames of " (gdb-get-target-string) "*")))
2619 2616
2620(def-gdb-display-buffer 2617(def-gdb-display-buffer
2621 gdb-display-stack-buffer 2618 gdb-display-stack-buffer
@@ -2678,10 +2675,10 @@ member."
2678 'gdb-locals-buffer-name 2675 'gdb-locals-buffer-name
2679 'gdb-locals-mode) 2676 'gdb-locals-mode)
2680 2677
2681(def-gdb-auto-update-trigger gdb-invalidate-locals 2678(def-gdb-auto-updated-buffer gdb-locals-buffer
2682 (gdb-get-buffer 'gdb-locals-buffer) 2679 gdb-invalidate-locals
2683 (concat (gdb-current-context-command "-stack-list-locals") " --simple-values") 2680 (concat (gdb-current-context-command "-stack-list-locals") " --simple-values")
2684 gdb-stack-list-locals-handler) 2681 gdb-locals-handler gdb-locals-handler-custom)
2685 2682
2686(defconst gdb-stack-list-locals-regexp 2683(defconst gdb-stack-list-locals-regexp
2687 (concat "name=\"\\(.*?\\)\",type=\"\\(.*?\\)\"")) 2684 (concat "name=\"\\(.*?\\)\",type=\"\\(.*?\\)\""))
@@ -2715,45 +2712,27 @@ member."
2715 2712
2716;; Dont display values of arrays or structures. 2713;; Dont display values of arrays or structures.
2717;; These can be expanded using gud-watch. 2714;; These can be expanded using gud-watch.
2718(defun gdb-stack-list-locals-handler nil 2715(defun gdb-locals-handler-custom ()
2719 (setq gdb-pending-triggers (delq 'gdb-invalidate-locals 2716 (let ((locals-list (gdb-get-field (json-partial-output) 'locals)))
2720 gdb-pending-triggers)) 2717 (dolist (local locals-list)
2721 (let (local locals-list) 2718 (let ((name (gdb-get-field local 'name))
2722 (goto-char (point-min)) 2719 (value (gdb-get-field local 'value))
2723 (while (re-search-forward gdb-stack-list-locals-regexp nil t) 2720 (type (gdb-get-field local 'type)))
2724 (let ((local (list (match-string 1) 2721 (if (or (not value)
2725 (match-string 2) 2722 (string-match "\\0x" value))
2726 nil))) 2723 (add-text-properties 0 (length name)
2727 (if (looking-at ",value=\\(\".*\"\\)}")
2728 (setcar (nthcdr 2 local) (read (match-string 1))))
2729 (push local locals-list)))
2730 (let ((buf (gdb-get-buffer 'gdb-locals-buffer)))
2731 (and buf (with-current-buffer buf
2732 (let* ((window (get-buffer-window buf 0))
2733 (start (window-start window))
2734 (p (window-point window))
2735 (buffer-read-only nil) (name) (value))
2736 (erase-buffer)
2737 (dolist (local locals-list)
2738 (setq name (car local))
2739 (setq value (nth 2 local))
2740 (if (or (not value)
2741 (string-match "\\0x" value))
2742 (add-text-properties 0 (length name)
2743 `(mouse-face highlight 2724 `(mouse-face highlight
2744 help-echo "mouse-2: create watch expression" 2725 help-echo "mouse-2: create watch expression"
2745 local-map ,gdb-locals-watch-map) 2726 local-map ,gdb-locals-watch-map)
2746 name) 2727 name)
2747 (add-text-properties 0 (length value) 2728 (add-text-properties 0 (length value)
2748 `(mouse-face highlight 2729 `(mouse-face highlight
2749 help-echo "mouse-2: edit value" 2730 help-echo "mouse-2: edit value"
2750 local-map ,gdb-edit-locals-map-1) 2731 local-map ,gdb-edit-locals-map-1)
2751 value)) 2732 value))
2752 (insert 2733 (insert
2753 (concat name "\t" (nth 1 local) 2734 (concat name "\t" type
2754 "\t" (nth 2 local) "\n"))) 2735 "\t" value "\n"))))))
2755 (set-window-start window start)
2756 (set-window-point window p)))))))
2757 2736
2758(defvar gdb-locals-header 2737(defvar gdb-locals-header
2759 (list 2738 (list
@@ -2786,8 +2765,7 @@ member."
2786 'gdb-invalidate-locals) 2765 'gdb-invalidate-locals)
2787 2766
2788(defun gdb-locals-buffer-name () 2767(defun gdb-locals-buffer-name ()
2789 (with-current-buffer gud-comint-buffer 2768 (concat "*locals of " (gdb-get-target-string) "*"))
2790 (concat "*locals of " (gdb-get-target-string) "*")))
2791 2769
2792(def-gdb-display-buffer 2770(def-gdb-display-buffer
2793 gdb-display-locals-buffer 2771 gdb-display-locals-buffer
@@ -2806,60 +2784,28 @@ member."
2806 'gdb-registers-buffer-name 2784 'gdb-registers-buffer-name
2807 'gdb-registers-mode) 2785 'gdb-registers-mode)
2808 2786
2809(def-gdb-auto-update-trigger gdb-invalidate-registers 2787(def-gdb-auto-updated-buffer gdb-registers-buffer
2810 (gdb-get-buffer 'gdb-registers-buffer) 2788 gdb-invalidate-registers
2811 (concat (gdb-current-context-command "-data-list-register-values") " x") 2789 (concat (gdb-current-context-command "-data-list-register-values") " x")
2812 gdb-data-list-register-values-handler) 2790 gdb-registers-handler
2813 2791 gdb-registers-handler-custom)
2814(defconst gdb-data-list-register-values-regexp 2792
2815 "number=\"\\(.*?\\)\",value=\"\\(.*?\\)\"") 2793(defun gdb-registers-handler-custom ()
2816 2794 (let ((register-values (gdb-get-field (json-partial-output) 'register-values))
2817(defun gdb-data-list-register-values-handler () 2795 (register-names-list (reverse gdb-register-names)))
2818 (setq gdb-pending-triggers (delq 'gdb-invalidate-registers 2796 (dolist (register register-values)
2819 gdb-pending-triggers)) 2797 (let* ((register-number (gdb-get-field register 'number))
2820 (goto-char (point-min)) 2798 (value (gdb-get-field register 'value))
2821 (if (re-search-forward gdb-error-regexp nil t) 2799 (register-name (nth (string-to-number register-number)
2822 (progn 2800 register-names-list)))
2823 (let ((match nil)) 2801 (insert
2824 (setq match (match-string 1)) 2802 (concat
2825 (with-current-buffer (gdb-get-buffer 'gdb-registers-buffer) 2803 (propertize register-name 'face font-lock-variable-name-face)
2826 (let ((buffer-read-only nil)) 2804 "\t"
2827 (erase-buffer) 2805 (if (member register-number gdb-changed-registers)
2828 (insert match) 2806 (propertize value 'face font-lock-warning-face)
2829 (goto-char (point-min)))))) 2807 value)
2830 (let ((register-list (reverse gdb-register-names)) 2808 "\n"))))))
2831 (register nil) (register-string nil) (register-values nil))
2832 (goto-char (point-min))
2833 (while (re-search-forward gdb-data-list-register-values-regexp nil t)
2834 (setq register (pop register-list))
2835 (setq register-string (concat register "\t" (match-string 2) "\n"))
2836 (if (member (match-string 1) gdb-changed-registers)
2837 (put-text-property 0 (length register-string)
2838 'face 'font-lock-warning-face
2839 register-string))
2840 (setq register-values
2841 (concat register-values register-string)))
2842 (let ((buf (gdb-get-buffer 'gdb-registers-buffer)))
2843 (with-current-buffer buf
2844 (let ((p (window-point (get-buffer-window buf 0)))
2845 (buffer-read-only nil))
2846 (erase-buffer)
2847 (insert register-values)
2848 (set-window-point (get-buffer-window buf 0) p))))))
2849 (gdb-data-list-register-values-custom))
2850
2851(defun gdb-data-list-register-values-custom ()
2852 (with-current-buffer (gdb-get-buffer 'gdb-registers-buffer)
2853 (save-excursion
2854 (let ((buffer-read-only nil)
2855 bl)
2856 (goto-char (point-min))
2857 (while (< (point) (point-max))
2858 (setq bl (line-beginning-position))
2859 (when (looking-at "^[^\t]+")
2860 (put-text-property bl (match-end 0)
2861 'face font-lock-variable-name-face))
2862 (forward-line 1))))))
2863 2809
2864(defvar gdb-registers-mode-map 2810(defvar gdb-registers-mode-map
2865 (let ((map (make-sparse-keymap))) 2811 (let ((map (make-sparse-keymap)))
@@ -2882,8 +2828,7 @@ member."
2882 'gdb-invalidate-registers) 2828 'gdb-invalidate-registers)
2883 2829
2884(defun gdb-registers-buffer-name () 2830(defun gdb-registers-buffer-name ()
2885 (with-current-buffer gud-comint-buffer 2831 (concat "*registers of " (gdb-get-target-string) "*"))
2886 (concat "*registers of " (gdb-get-target-string) "*")))
2887 2832
2888(def-gdb-display-buffer 2833(def-gdb-display-buffer
2889 gdb-display-registers-buffer 2834 gdb-display-registers-buffer
@@ -2903,25 +2848,23 @@ member."
2903 (gdb-input 2848 (gdb-input
2904 (list 2849 (list
2905 "-data-list-changed-registers" 2850 "-data-list-changed-registers"
2906 'gdb-get-changed-registers-handler)) 2851 'gdb-changed-registers-handler))
2907 (push 'gdb-get-changed-registers gdb-pending-triggers)))) 2852 (push 'gdb-get-changed-registers gdb-pending-triggers))))
2908 2853
2909(defconst gdb-data-list-register-names-regexp "\"\\(.*?\\)\"") 2854(defun gdb-changed-registers-handler ()
2910
2911(defun gdb-get-changed-registers-handler ()
2912 (setq gdb-pending-triggers 2855 (setq gdb-pending-triggers
2913 (delq 'gdb-get-changed-registers gdb-pending-triggers)) 2856 (delq 'gdb-get-changed-registers gdb-pending-triggers))
2914 (setq gdb-changed-registers nil) 2857 (setq gdb-changed-registers nil)
2915 (goto-char (point-min)) 2858 (dolist (register-number (gdb-get-field (json-partial-output) 'changed-registers))
2916 (while (re-search-forward gdb-data-list-register-names-regexp nil t) 2859 (push register-number gdb-changed-registers)))
2917 (push (match-string 1) gdb-changed-registers)))
2918 2860
2919(defun gdb-get-register-names () 2861(defun gdb-register-names-handler ()
2920 "Create a list of register names." 2862 ;; Don't use gdb-pending-triggers because this handler is called
2921 (goto-char (point-min)) 2863 ;; only once (in gdb-init-1)
2922 (setq gdb-register-names nil) 2864 (setq gdb-register-names nil)
2923 (while (re-search-forward gdb-data-list-register-names-regexp nil t) 2865 (dolist (register-name (gdb-get-field (json-partial-output) 'register-names))
2924 (push (match-string 1) gdb-register-names))) 2866 (push register-name gdb-register-names))
2867 (setq gdb-register-names (reverse gdb-register-names)))
2925 2868
2926 2869
2927(defun gdb-get-source-file-list () 2870(defun gdb-get-source-file-list ()