aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Dzhus2009-08-06 18:05:32 +0000
committerDmitry Dzhus2009-08-06 18:05:32 +0000
commit7b217360fbfacc73b0bf0ba978543154a5b4a688 (patch)
tree9a0088c65b0e37c35ac56b6fd241e45363061e98
parent897dbdc17eed33152d66d4ebc9dce36ec1c27843 (diff)
downloademacs-7b217360fbfacc73b0bf0ba978543154a5b4a688.tar.gz
emacs-7b217360fbfacc73b0bf0ba978543154a5b4a688.zip
(gdb-var-create-regexp): Removed.
(gdb-var-create-handler): Rewritten using JSON parser. (gdb-propertize-header): Moved earlier. (gdb-set-header): Removed to avoid duplication. (gdb-thread-list-handler-custom, gdb-invalidate-disassembly): Refresh disassembly buffers only after threads list have been update. (gdb-threads-header, gdb-registers-header): Per-buffer header line variables.
-rw-r--r--lisp/ChangeLog12
-rw-r--r--lisp/progmodes/gdb-mi.el127
2 files changed, 69 insertions, 70 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index dea01f1eea3..3a380d459ff 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,15 @@
12009-08-06 Dmitry Dzhus <dima@sphinx.net.ru>
2
3 * progmodes/gdb-mi.el (gdb-var-create-regexp): Removed.
4 (gdb-var-create-handler): Rewritten using JSON parser.
5 (gdb-propertize-header): Moved earlier.
6 (gdb-set-header): Removed to avoid duplication.
7 (gdb-thread-list-handler-custom, gdb-invalidate-disassembly):
8 Refresh disassembly buffers only after threads list have been
9 update.
10 (gdb-threads-header, gdb-registers-header): Per-buffer header line
11 variables.
12
12009-08-04 Juri Linkov <juri@jurta.org> 132009-08-04 Juri Linkov <juri@jurta.org>
2 14
3 * files.el: Commands to add/delete file/directory-local variables. 15 * files.el: Commands to add/delete file/directory-local variables.
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index 7ff2613ea89..3271ceaa06e 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -972,23 +972,22 @@ With arg, enter name of variable to be watched in the minibuffer."
972 `(lambda () (gdb-var-create-handler ,expr))))))) 972 `(lambda () (gdb-var-create-handler ,expr)))))))
973 (message "gud-watch is a no-op in this mode.")))) 973 (message "gud-watch is a no-op in this mode."))))
974 974
975(defconst gdb-var-create-regexp
976 "name=\"\\(.*?\\)\",.*numchild=\"\\(.*?\\)\",\\(?:.*value=\\(\".*\"\\),\\)?.*type=\"\\(.*?\\)\"")
977
978(defun gdb-var-create-handler (expr) 975(defun gdb-var-create-handler (expr)
979 (goto-char (point-min)) 976 (let* ((result (gdb-json-partial-output)))
980 (if (re-search-forward gdb-var-create-regexp nil t) 977 (if (not (gdb-get-field result 'msg))
981 (let ((var (list 978 (let
982 (match-string 1) 979 ((var
983 (if (and (string-equal gdb-current-language "c") 980 (list
984 gdb-use-colon-colon-notation gdb-selected-frame) 981 (gdb-get-field result 'name)
985 (setq expr (concat gdb-selected-frame "::" expr)) 982 (if (and (string-equal gdb-current-language "c")
986 expr) 983 gdb-use-colon-colon-notation gdb-selected-frame)
987 (match-string 2) 984 (setq expr (concat gdb-selected-frame "::" expr))
988 (match-string 4) 985 expr)
989 (if (match-string 3) (read (match-string 3))) 986 (gdb-get-field result 'numchild)
990 nil))) 987 (gdb-get-field result 'type)
991 (push var gdb-var-list) 988 (gdb-get-field result 'value)
989 nil)))
990 (push var gdb-var-list)
992 (speedbar 1) 991 (speedbar 1)
993 (unless (string-equal 992 (unless (string-equal
994 speedbar-initial-expansion-list-name "GUD") 993 speedbar-initial-expansion-list-name "GUD")
@@ -998,7 +997,7 @@ With arg, enter name of variable to be watched in the minibuffer."
998 (concat "-var-evaluate-expression " (car var)) 997 (concat "-var-evaluate-expression " (car var))
999 `(lambda () (gdb-var-evaluate-expression-handler 998 `(lambda () (gdb-var-evaluate-expression-handler
1000 ,(car var) nil))))) 999 ,(car var) nil)))))
1001 (message-box "No symbol \"%s\" in current context." expr))) 1000 (message-box "No symbol \"%s\" in current context." expr))))
1002 1001
1003(defun gdb-speedbar-update () 1002(defun gdb-speedbar-update ()
1004 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame) 1003 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)
@@ -2089,7 +2088,7 @@ calling `gdb-table-string'."
2089 (setf (gdb-table-column-sizes table) 2088 (setf (gdb-table-column-sizes table)
2090 (mapcar* (lambda (x s) 2089 (mapcar* (lambda (x s)
2091 (let ((new-x 2090 (let ((new-x
2092 (max (abs x) (string-width s)))) 2091 (max (abs x) (string-width (or s "")))))
2093 (if right-align new-x (- new-x)))) 2092 (if right-align new-x (- new-x))))
2094 (gdb-table-column-sizes table) 2093 (gdb-table-column-sizes table)
2095 row)) 2094 row))
@@ -2439,6 +2438,20 @@ corresponding to the mode line clicked."
2439 (define-key map (vector 'header-line 'down-mouse-1) 'ignore) 2438 (define-key map (vector 'header-line 'down-mouse-1) 'ignore)
2440 map)) 2439 map))
2441 2440
2441(defmacro gdb-propertize-header (name buffer help-echo mouse-face face)
2442 `(propertize ,name
2443 'help-echo ,help-echo
2444 'mouse-face ',mouse-face
2445 'face ',face
2446 'local-map
2447 (gdb-make-header-line-mouse-map
2448 'mouse-1
2449 (lambda (event) (interactive "e")
2450 (save-selected-window
2451 (select-window (posn-window (event-start event)))
2452 (gdb-set-window-buffer
2453 (gdb-get-buffer-create ',buffer) t) )))))
2454
2442 2455
2443;; uses "-thread-info". Needs GDB 7.0 onwards. 2456;; uses "-thread-info". Needs GDB 7.0 onwards.
2444;;; Threads view 2457;;; Threads view
@@ -2495,28 +2508,13 @@ corresponding to the mode line clicked."
2495 (define-key map [follow-link] 'mouse-face) 2508 (define-key map [follow-link] 'mouse-face)
2496 map)) 2509 map))
2497 2510
2498(defmacro gdb-propertize-header (name buffer help-echo mouse-face face) 2511(defvar gdb-threads-header
2499 `(propertize ,name
2500 'help-echo ,help-echo
2501 'mouse-face ',mouse-face
2502 'face ',face
2503 'local-map
2504 (gdb-make-header-line-mouse-map
2505 'mouse-1
2506 (lambda (event) (interactive "e")
2507 (save-selected-window
2508 (select-window (posn-window (event-start event)))
2509 (gdb-set-window-buffer
2510 (gdb-get-buffer-create ',buffer) t)
2511 (setq header-line-format (gdb-set-header ',buffer)))))))
2512
2513(defvar gdb-breakpoints-header
2514 (list 2512 (list
2515 (gdb-propertize-header "Breakpoints" gdb-breakpoints-buffer 2513 (gdb-propertize-header "Breakpoints" gdb-breakpoints-buffer
2516 nil nil mode-line) 2514 "mouse-1: select" mode-line-highlight mode-line-inactive)
2517 " " 2515 " "
2518 (gdb-propertize-header "Threads" gdb-threads-buffer 2516 (gdb-propertize-header "Threads" gdb-threads-buffer
2519 "mouse-1: select" mode-line-highlight mode-line-inactive))) 2517 nil nil mode-line)))
2520 2518
2521(define-derived-mode gdb-threads-mode gdb-parent-mode "Threads" 2519(define-derived-mode gdb-threads-mode gdb-parent-mode "Threads"
2522 "Major mode for GDB threads. 2520 "Major mode for GDB threads.
@@ -2524,7 +2522,7 @@ corresponding to the mode line clicked."
2524\\{gdb-threads-mode-map}" 2522\\{gdb-threads-mode-map}"
2525 (setq gdb-thread-position (make-marker)) 2523 (setq gdb-thread-position (make-marker))
2526 (add-to-list 'overlay-arrow-variable-list 'gdb-thread-position) 2524 (add-to-list 'overlay-arrow-variable-list 'gdb-thread-position)
2527 (setq header-line-format gdb-breakpoints-header) 2525 (setq header-line-format gdb-threads-header)
2528 (set (make-local-variable 'font-lock-defaults) 2526 (set (make-local-variable 'font-lock-defaults)
2529 '(gdb-threads-font-lock-keywords)) 2527 '(gdb-threads-font-lock-keywords))
2530 (run-mode-hooks 'gdb-threads-mode-hook) 2528 (run-mode-hooks 'gdb-threads-mode-hook)
@@ -2586,7 +2584,8 @@ corresponding to the mode line clicked."
2586 (gdb-mark-line marked-line gdb-thread-position))) 2584 (gdb-mark-line marked-line gdb-thread-position)))
2587 ;; We update gud-running here because we need to make sure that 2585 ;; We update gud-running here because we need to make sure that
2588 ;; gdb-threads-list is up-to-date 2586 ;; gdb-threads-list is up-to-date
2589 (gdb-update-gud-running)) 2587 (gdb-update-gud-running)
2588 (gdb-emit-signal gdb-buf-publisher 'update-disassembly))
2590 2589
2591(defmacro def-gdb-thread-buffer-command (name custom-defun &optional doc) 2590(defmacro def-gdb-thread-buffer-command (name custom-defun &optional doc)
2592 "Define a NAME command which will act upon thread on the current line. 2591 "Define a NAME command which will act upon thread on the current line.
@@ -2690,36 +2689,6 @@ line."
2690 gud-step 2689 gud-step
2691 "Step thread at current line.") 2690 "Step thread at current line.")
2692 2691
2693(defun gdb-set-header (buffer)
2694 (cond ((eq buffer 'gdb-locals-buffer)
2695 (list
2696 (gdb-propertize-header "Locals" gdb-locals-buffer
2697 nil nil mode-line)
2698 " "
2699 (gdb-propertize-header "Registers" gdb-registers-buffer
2700 "mouse-1: select" mode-line-highlight mode-line-inactive)))
2701 ((eq buffer 'gdb-registers-buffer)
2702 (list
2703 (gdb-propertize-header "Locals" gdb-locals-buffer
2704 "mouse-1: select" mode-line-highlight mode-line-inactive)
2705 " "
2706 (gdb-propertize-header "Registers" gdb-registers-buffer
2707 nil nil mode-line)))
2708 ((eq buffer 'gdb-breakpoints-buffer)
2709 (list
2710 (gdb-propertize-header "Breakpoints" gdb-breakpoints-buffer
2711 nil nil mode-line)
2712 " "
2713 (gdb-propertize-header "Threads" gdb-threads-buffer
2714 "mouse-1: select" mode-line-highlight mode-line-inactive)))
2715 ((eq buffer 'gdb-threads-buffer)
2716 (list
2717 (gdb-propertize-header "Breakpoints" gdb-breakpoints-buffer
2718 "mouse-1: select" mode-line-highlight mode-line-inactive)
2719 " "
2720 (gdb-propertize-header "Threads" gdb-threads-buffer
2721 nil nil mode-line)))))
2722
2723 2692
2724;;; Memory view 2693;;; Memory view
2725 2694
@@ -3138,7 +3107,9 @@ DOC is an optional documentation string."
3138 (when file 3107 (when file
3139 (format "-data-disassemble -f %s -l %s -n -1 -- 0" file line))) 3108 (format "-data-disassemble -f %s -l %s -n -1 -- 0" file line)))
3140 gdb-disassembly-handler 3109 gdb-disassembly-handler
3141 '(update)) 3110 ;; We update disassembly only after we have actual frame information
3111 ;; about all threads
3112 '(update-disassembly))
3142 3113
3143(def-gdb-auto-update-handler 3114(def-gdb-auto-update-handler
3144 gdb-disassembly-handler 3115 gdb-disassembly-handler
@@ -3231,6 +3202,14 @@ DOC is an optional documentation string."
3231 (gdb-put-breakpoint-icon (string-equal flag "y") bptno)))))) 3202 (gdb-put-breakpoint-icon (string-equal flag "y") bptno))))))
3232 3203
3233 3204
3205(defvar gdb-breakpoints-header
3206 (list
3207 (gdb-propertize-header "Breakpoints" gdb-breakpoints-buffer
3208 nil nil mode-line)
3209 " "
3210 (gdb-propertize-header "Threads" gdb-threads-buffer
3211 "mouse-1: select" mode-line-highlight mode-line-inactive)))
3212
3234;;; Breakpoints view 3213;;; Breakpoints view
3235(define-derived-mode gdb-breakpoints-mode gdb-parent-mode "Breakpoints" 3214(define-derived-mode gdb-breakpoints-mode gdb-parent-mode "Breakpoints"
3236 "Major mode for gdb breakpoints. 3215 "Major mode for gdb breakpoints.
@@ -3553,11 +3532,19 @@ member."
3553 (define-key map "q" 'kill-this-buffer) 3532 (define-key map "q" 'kill-this-buffer)
3554 map)) 3533 map))
3555 3534
3535(defvar gdb-registers-header
3536 (list
3537 (gdb-propertize-header "Locals" gdb-locals-buffer
3538 "mouse-1: select" mode-line-highlight mode-line-inactive)
3539 " "
3540 (gdb-propertize-header "Registers" gdb-registers-buffer
3541 nil nil mode-line)))
3542
3556(define-derived-mode gdb-registers-mode gdb-parent-mode "Registers" 3543(define-derived-mode gdb-registers-mode gdb-parent-mode "Registers"
3557 "Major mode for gdb registers. 3544 "Major mode for gdb registers.
3558 3545
3559\\{gdb-registers-mode-map}" 3546\\{gdb-registers-mode-map}"
3560 (setq header-line-format gdb-locals-header) 3547 (setq header-line-format gdb-registers-header)
3561 (run-mode-hooks 'gdb-registers-mode-hook) 3548 (run-mode-hooks 'gdb-registers-mode-hook)
3562 'gdb-invalidate-registers) 3549 'gdb-invalidate-registers)
3563 3550