Show
Ignore:
Timestamp:
05/13/06 11:31:18 (3 years ago)
Author:
miyoshi
Message:

Sync up with Emacs CVS HEAD.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lisp/progmodes/gdb-ui.el

    r4073 r4079  
    115115where STATUS is nil (unchanged), `changed' or `out-of-scope', FP the frame 
    116116address for root variables.") 
    117 (defvar gdb-force-update t 
    118  "Non-nil means that view of watch expressions will be updated in the speedbar.") 
    119117(defvar gdb-main-file nil "Source file from which program execution begins.") 
    120118(defvar gdb-overlay-arrow-position nil) 
     
    528526        gdb-frame-number nil 
    529527        gdb-var-list nil 
    530         gdb-force-update t 
    531528        gdb-main-file nil 
    532529        gdb-first-post-prompt t 
     
    698695                         (buffer-substring (region-beginning) (region-end)) 
    699696                       (tooltip-identifier-from-point (point)))))) 
     697              (speedbar 1) 
    700698              (catch 'already-watched 
    701699                (dolist (var gdb-var-list) 
     
    729727                  nil nil gdb-frame-address))) 
    730728        (push var gdb-var-list) 
    731         (speedbar 1) 
    732729        (unless (string-equal 
    733730                 speedbar-initial-expansion-list-name "GUD") 
     
    736733         (list 
    737734          (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) 
    738               (concat "server interpreter mi \"-var-evaluate-expression " 
     735              (concat "server interpreter mi \"0-var-evaluate-expression " 
    739736                      (car var) "\"\n") 
    740             (concat "-var-evaluate-expression " (car var) "\n")) 
     737            (concat "0-var-evaluate-expression " (car var) "\n")) 
    741738          `(lambda () (gdb-var-evaluate-expression-handler 
    742739                       ,(car var) nil))))) 
     
    745742      (message-box "No symbol \"%s\" in current context." expr)))) 
    746743 
     744(defun gdb-speedbar-update () 
     745  (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 
     746    ;; Dummy command to update speedbar even when idle. 
     747    (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-timer-fn)) 
     748    ;; Keep gdb-pending-triggers non-nil till end. 
     749    (push 'gdb-speedbar-timer gdb-pending-triggers))) 
     750 
     751(defun gdb-speedbar-timer-fn () 
     752  (setq gdb-pending-triggers 
     753        (delq 'gdb-speedbar-timer gdb-pending-triggers)) 
     754  (speedbar-timer-fn)) 
     755 
    747756(defun gdb-var-evaluate-expression-handler (varnum changed) 
    748757  (goto-char (point-min)) 
    749   (re-search-forward ".*value=\\(\".*\"\\)" nil t) 
     758  (re-search-forward "\\(.+\\)\\^done,value=\\(\".*\"\\)" nil t) 
     759  (setq gdb-pending-triggers 
     760        (delq (string-to-number (match-string 1)) gdb-pending-triggers)) 
    750761  (let ((var (assoc varnum gdb-var-list))) 
    751762    (when var 
    752763      (if changed (setcar (nthcdr 5 var) 'changed)) 
    753       (setcar (nthcdr 4 var) (read (match-string 1)))))) 
     764      (setcar (nthcdr 4 var) (read (match-string 2))))) 
     765  (gdb-speedbar-update)) 
    754766 
    755767(defun gdb-var-list-children (varnum) 
     
    782794                   (list 
    783795                    (concat 
    784                      "server interpreter mi \"-var-evaluate-expression " 
     796                     "server interpreter mi \"0-var-evaluate-expression " 
    785797                     (car varchild) "\"\n") 
    786798                    `(lambda () (gdb-var-evaluate-expression-handler 
     
    804816    (setcar (nthcdr 5 var) nil)) 
    805817  (goto-char (point-min)) 
    806   (while (re-search-forward gdb-var-update-regexp nil t) 
    807     (let ((varnum (match-string 1))) 
    808       (if  (string-equal (match-string 2) "false") 
    809           (let ((var (assoc varnum gdb-var-list))) 
    810             (if var (setcar (nthcdr 5 var) 'out-of-scope))) 
    811         (gdb-enqueue-input 
    812          (list 
    813           (concat "server interpreter mi \"-var-evaluate-expression " 
    814                   varnum "\"\n") 
    815           `(lambda () (gdb-var-evaluate-expression-handler ,varnum t))))))) 
     818  (let ((n 0)) 
     819    (while (re-search-forward gdb-var-update-regexp nil t) 
     820      (let ((varnum (match-string 1))) 
     821        (if  (string-equal (match-string 2) "false") 
     822            (let ((var (assoc varnum gdb-var-list))) 
     823              (if var (setcar (nthcdr 5 var) 'out-of-scope))) 
     824          (setq n (1+ n)) 
     825          (push n gdb-pending-triggers) 
     826          (gdb-enqueue-input 
     827           (list 
     828            (concat "server interpreter mi \"" (number-to-string n) 
     829                    "-var-evaluate-expression " varnum "\"\n") 
     830          `(lambda () (gdb-var-evaluate-expression-handler ,varnum t)))))))) 
    816831  (setq gdb-pending-triggers 
    817         (delq 'gdb-var-update gdb-pending-triggers)) 
    818   (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 
    819     ;; Dummy command to update speedbar at right time. 
    820     (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-refresh)) 
    821     ;; Keep gdb-pending-triggers non-nil till end. 
    822     (push 'gdb-speedbar-refresh gdb-pending-triggers))) 
    823  
    824 (defun gdb-speedbar-refresh () 
    825   (setq gdb-pending-triggers 
    826         (delq 'gdb-speedbar-refresh gdb-pending-triggers)) 
    827   (with-current-buffer gud-comint-buffer 
    828     (let ((speedbar-verbosity-level 0) 
    829           (speedbar-shown-directories nil)) 
    830       (save-excursion 
    831         (speedbar-refresh))))) 
     832        (delq 'gdb-var-update gdb-pending-triggers))) 
    832833 
    833834(defun gdb-var-delete () 
     
    837838            '(gdbmi gdba)) 
    838839      (let ((text (speedbar-line-text))) 
    839         (string-match "\\(\\S-+\\)" text) 
     840        ;; Can't use \\S-+ for whitespace because 
     841        ;; speedbar has a whacky syntax table. 
     842        (string-match "\\([^ \t]+\\)" text) 
    840843        (let ((expr (match-string 1 text)) var varnum) 
    841844          (catch 'expr-found 
     
    13821385      ;; Only needed/used with speedbar/watch expressions. 
    13831386      (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 
    1384         (setq gdb-force-update t) 
    13851387        (if (string-equal gdb-version "pre-6.4") 
    13861388            (gdb-var-update) 
     
    19171919                         (if (file-exists-p file) file 
    19181920                           (cdr (assoc bptno gdb-location-alist))))) 
    1919                    (window (unless (gdb-display-source-buffer buffer) 
     1921                   (window (or (gdb-display-source-buffer buffer) 
    19201922                               (display-buffer buffer)))) 
    19211923              (setq gdb-source-window window) 
     
    27592761           ;; can't find a source file. 
    27602762           (list-buffers-noselect)))) 
     2763  (setq gdb-source-window (selected-window)) 
    27612764  (when gdb-use-separate-io-buffer 
    27622765    (split-window-horizontally) 
     
    27862789           (gud-find-file (car gud-last-last-frame)) 
    27872790         (gud-find-file gdb-main-file))) 
     2791      (setq gdb-source-window (selected-window)) 
    27882792      (other-window 1)))) 
    27892793 
     
    28072811        (delq 'gdb-overlay-arrow-position overlay-arrow-variable-list)) 
    28082812  (setq fringe-indicator-alist '((overlay-arrow . right-triangle))) 
    2809   (if (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 
    2810       (speedbar-refresh)) 
     2813  (if (boundp 'speedbar-frame) (speedbar-timer-fn)) 
    28112814  (setq gud-running nil) 
    28122815  (setq gdb-active-process nil) 
     
    31673170      (let ((buffer (marker-buffer gud-overlay-arrow-position)) 
    31683171            (position (marker-position gud-overlay-arrow-position))) 
    3169         (when (and buffer (string-equal (buffer-name buffer) (match-string 3))) 
     3172        (when (and buffer 
     3173                   (string-equal (buffer-name buffer) 
     3174                                 (file-name-nondirectory (match-string 3)))) 
    31703175          (with-current-buffer buffer 
    31713176            (setq fringe-indicator-alist 
     
    32343239                  (push varchild var-list)))) 
    32353240          (push var var-list))) 
    3236       (setq gdb-var-list (nreverse var-list))))) 
     3241      (setq gdb-var-list (nreverse var-list)))) 
     3242  (gdb-speedbar-update)) 
    32373243 
    32383244; Uses "-var-update --all-values".  Needs GDB 6.4 onwards. 
     
    32673273  (setq gdb-pending-triggers 
    32683274   (delq 'gdb-var-update gdb-pending-triggers)) 
    3269   (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 
    3270     ;; dummy command to update speedbar at right time 
    3271     (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-refresh)) 
    3272     ;; keep gdb-pending-triggers non-nil till end 
    3273     (push 'gdb-speedbar-refresh gdb-pending-triggers))) 
     3275  (gdb-speedbar-update)) 
    32743276 
    32753277;; Registers buffer.