diff options
| author | Dmitry Dzhus | 2009-08-04 13:11:06 +0000 |
|---|---|---|
| committer | Dmitry Dzhus | 2009-08-04 13:11:06 +0000 |
| commit | 20f12ed8829efbbbb1c42c2d53e44dee8a04cc04 (patch) | |
| tree | 706fff117b430b5fbf40098170bb4d9ee3a4655d | |
| parent | 98bf84941396371b005d52fa2043660a202e3e9e (diff) | |
| download | emacs-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/ChangeLog | 8 | ||||
| -rw-r--r-- | lisp/progmodes/gdb-mi.el | 163 |
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 | |||
| 14 | 2009-08-04 Michael Albinus <michael.albinus@gmx.de> | 22 | 2009-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 () |