aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2002-12-05 21:45:11 +0000
committerStefan Monnier2002-12-05 21:45:11 +0000
commit43eaf8f7c2625a731adaec5b37aa7e710d57610e (patch)
treef8cbbef3a31f2f372f6b197319e7a1fb6ec6611e
parentff5aed9364223df656938c7119aa190ce878f691 (diff)
downloademacs-43eaf8f7c2625a731adaec5b37aa7e710d57610e.tar.gz
emacs-43eaf8f7c2625a731adaec5b37aa7e710d57610e.zip
Replace uses of (gdb-get-instance-buffer 'gdba) and
gdb-proc with gud-comint-buffer instead. (gdb-proc): Remove. (def-gdb-var): Simplify. (gdb-get-create-instance-buffer): Avoid make-variable-buffer-local. Set gud-comint-buffer as well as gud-minor-mode and tool-bar-map. (gdb-goto-bp-this-line): Select the window while doing the goto-line. (gdb-info-locals-handler): Avoid replace-regexp.
-rw-r--r--lisp/gdb-ui.el125
1 files changed, 52 insertions, 73 deletions
diff --git a/lisp/gdb-ui.el b/lisp/gdb-ui.el
index 99e33c0ac0c..ce459e8c41f 100644
--- a/lisp/gdb-ui.el
+++ b/lisp/gdb-ui.el
@@ -36,7 +36,6 @@
36(defvar gdb-display-in-progress nil) 36(defvar gdb-display-in-progress nil)
37(defvar gdb-dive nil) 37(defvar gdb-dive nil)
38(defvar gdb-first-time nil) 38(defvar gdb-first-time nil)
39(defvar gdb-proc nil "The process associated with gdb.")
40 39
41;;;###autoload 40;;;###autoload
42(defun gdba (command-line) 41(defun gdba (command-line)
@@ -120,7 +119,6 @@ The following interactive lisp functions help control operation :
120 (setq gdb-display-in-progress nil) 119 (setq gdb-display-in-progress nil)
121 (setq gdb-dive nil) 120 (setq gdb-dive nil)
122 121
123 (setq gdb-proc (get-buffer-process (current-buffer)))
124 (gdb-make-instance) 122 (gdb-make-instance)
125 (gdb-clear-inferior-io) 123 (gdb-clear-inferior-io)
126 124
@@ -181,15 +179,11 @@ with a gdb instance.")
181 (defvar ,name ,default ,doc) 179 (defvar ,name ,default ,doc)
182 (if (not (memq ',name gdb-instance-variables)) 180 (if (not (memq ',name gdb-instance-variables))
183 (push ',name gdb-instance-variables)) 181 (push ',name gdb-instance-variables))
184 ,(and accessor 182 (defun ,accessor ()
185 `(defun ,accessor () 183 (buffer-local-value ',name gud-comint-buffer))
186 (let ((buffer (gdb-get-instance-buffer 'gdba))) 184 (defun ,setter (val)
187 (and buffer (buffer-local-value ',name buffer))))) 185 (with-current-buffer gud-comint-buffer
188 ,(and setter 186 (setq ,name val))))))
189 `(defun ,setter (val)
190 (let ((buffer (gdb-get-instance-buffer 'gdba)))
191 (and buffer (with-current-buffer buffer
192 (setq ,name val)))))))))
193 187
194(def-gdb-var buffer-type nil 188(def-gdb-var buffer-type nil
195 "One of the symbols bound in gdb-instance-buffer-rules") 189 "One of the symbols bound in gdb-instance-buffer-rules")
@@ -235,17 +229,15 @@ handlers.")
235 229
236(defun in-gdb-instance-context (form) 230(defun in-gdb-instance-context (form)
237 "Funcall FORM in the GUD buffer." 231 "Funcall FORM in the GUD buffer."
238 (save-excursion 232 (with-current-buffer gud-comint-buffer
239 (set-buffer (gdb-get-instance-buffer 'gdba))
240 (funcall form))) 233 (funcall form)))
241 234
242;; end of instance vars 235;; end of instance vars
243 236
244(defun gdb-make-instance () 237(defun gdb-make-instance ()
245 "Create a gdb instance object from a gdb process." 238 "Create a gdb instance object from the current buffer."
246 (with-current-buffer (process-buffer gdb-proc) 239 (mapc 'make-local-variable gdb-instance-variables)
247 (mapc 'make-local-variable gdb-instance-variables) 240 (setq gdb-buffer-type 'gdba))
248 (setq gdb-buffer-type 'gdba)))
249 241
250(defun gdb-instance-target-string () 242(defun gdb-instance-target-string ()
251 "The apparent name of the program being debugged by a gdb instance. 243 "The apparent name of the program being debugged by a gdb instance.
@@ -285,12 +277,15 @@ The key should be one of the cars in `gdb-instance-buffer-rules-assoc'."
285 (let* ((rules (assoc key gdb-instance-buffer-rules-assoc)) 277 (let* ((rules (assoc key gdb-instance-buffer-rules-assoc))
286 (name (funcall (gdb-rules-name-maker rules))) 278 (name (funcall (gdb-rules-name-maker rules)))
287 (new (get-buffer-create name))) 279 (new (get-buffer-create name)))
288 (save-excursion 280 (with-current-buffer new
289 (set-buffer new) 281 ;; FIXME: This should be set after calling the function, since the
290 (make-variable-buffer-local 'gdb-buffer-type) 282 ;; function should run kill-all-local-variables.
291 (setq gdb-buffer-type key) 283 (set (make-local-variable 'gdb-buffer-type) key)
292 (if (cdr (cdr rules)) 284 (if (cdr (cdr rules))
293 (funcall (car (cdr (cdr rules))))) 285 (funcall (car (cdr (cdr rules)))))
286 (set (make-local-variable 'gud-comint-buffer) gud-comint-buffer)
287 (set (make-local-variable 'gud-minor-mode) 'gdba)
288 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)
294 new)))) 289 new))))
295 290
296(defun gdb-rules-name-maker (rules) (car (cdr rules))) 291(defun gdb-rules-name-maker (rules) (car (cdr rules)))
@@ -321,9 +316,8 @@ The key should be one of the cars in `gdb-instance-buffer-rules-assoc'."
321 (let ((binding (assoc buffer-type gdb-instance-buffer-rules-assoc))) 316 (let ((binding (assoc buffer-type gdb-instance-buffer-rules-assoc)))
322 (if binding 317 (if binding
323 (setcdr binding rules) 318 (setcdr binding rules)
324 (setq gdb-instance-buffer-rules-assoc 319 (push (cons buffer-type rules)
325 (cons (cons buffer-type rules) 320 gdb-instance-buffer-rules-assoc))))
326 gdb-instance-buffer-rules-assoc)))))
327 321
328;; GUD buffers are an exception to the rules 322;; GUD buffers are an exception to the rules
329(gdb-set-instance-buffer-rules 'gdba 'error) 323(gdb-set-instance-buffer-rules 'gdba 'error)
@@ -370,40 +364,38 @@ The key should be one of the cars in `gdb-instance-buffer-rules-assoc'."
370 (make-comint-in-buffer 364 (make-comint-in-buffer
371 (substring (buffer-name) 1 (- (length (buffer-name)) 1)) 365 (substring (buffer-name) 1 (- (length (buffer-name)) 1))
372 (current-buffer) "/bin/cat") 366 (current-buffer) "/bin/cat")
373 (set (make-local-variable 'gud-minor-mode) 'gdba)
374 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)
375 (setq comint-input-sender 'gdb-inferior-io-sender)) 367 (setq comint-input-sender 'gdb-inferior-io-sender))
376 368
377(defun gdb-inferior-io-sender (proc string) 369(defun gdb-inferior-io-sender (proc string)
378 (save-excursion 370 ;; PROC is the pseudo-process created to satisfy comint.
379 (set-buffer (process-buffer proc)) 371 (with-current-buffer (process-buffer proc)
380 (set-buffer (gdb-get-instance-buffer 'gdba)) 372 (setq proc (get-buffer-process gud-comint-buffer))
381 (process-send-string gdb-proc string) 373 (process-send-string proc string)
382 (process-send-string gdb-proc "\n"))) 374 (process-send-string proc "\n")))
383 375
384(defun gdb-inferior-io-interrupt () 376(defun gdb-inferior-io-interrupt ()
385 "Interrupt the program being debugged." 377 "Interrupt the program being debugged."
386 (interactive) 378 (interactive)
387 (interrupt-process 379 (interrupt-process
388 (get-buffer-process (gdb-get-instance-buffer 'gdba)) comint-ptyp)) 380 (get-buffer-process gud-comint-buffer) comint-ptyp))
389 381
390(defun gdb-inferior-io-quit () 382(defun gdb-inferior-io-quit ()
391 "Send quit signal to the program being debugged." 383 "Send quit signal to the program being debugged."
392 (interactive) 384 (interactive)
393 (quit-process 385 (quit-process
394 (get-buffer-process (gdb-get-instance-buffer 'gdba)) comint-ptyp)) 386 (get-buffer-process gud-comint-buffer) comint-ptyp))
395 387
396(defun gdb-inferior-io-stop () 388(defun gdb-inferior-io-stop ()
397 "Stop the program being debugged." 389 "Stop the program being debugged."
398 (interactive) 390 (interactive)
399 (stop-process 391 (stop-process
400 (get-buffer-process (gdb-get-instance-buffer 'gdba)) comint-ptyp)) 392 (get-buffer-process gud-comint-buffer) comint-ptyp))
401 393
402(defun gdb-inferior-io-eof () 394(defun gdb-inferior-io-eof ()
403 "Send end-of-file to the program being debugged." 395 "Send end-of-file to the program being debugged."
404 (interactive) 396 (interactive)
405 (process-send-eof 397 (process-send-eof
406 (get-buffer-process (gdb-get-instance-buffer 'gdba)))) 398 (get-buffer-process gud-comint-buffer)))
407 399
408 400
409;; 401;;
@@ -594,11 +586,12 @@ This sends the next command (if any) to gdb."
594 (if (stringp item) 586 (if (stringp item)
595 (progn 587 (progn
596 (set-gdb-instance-output-sink 'user) 588 (set-gdb-instance-output-sink 'user)
597 (process-send-string gdb-proc item)) 589 (process-send-string (get-buffer-process gud-comint-buffer) item))
598 (progn 590 (progn
599 (gdb-clear-partial-output) 591 (gdb-clear-partial-output)
600 (set-gdb-instance-output-sink 'pre-emacs) 592 (set-gdb-instance-output-sink 'pre-emacs)
601 (process-send-string gdb-proc (car item))))) 593 (process-send-string (get-buffer-process gud-comint-buffer)
594 (car item)))))
602 595
603(defun gdb-pre-prompt (ignored) 596(defun gdb-pre-prompt (ignored)
604 "An annotation handler for `pre-prompt'. This terminates the collection of 597 "An annotation handler for `pre-prompt'. This terminates the collection of
@@ -1349,8 +1342,7 @@ buffer."
1349 (end-of-line)))))) 1342 (end-of-line))))))
1350 1343
1351(defun gdb-breakpoints-buffer-name () 1344(defun gdb-breakpoints-buffer-name ()
1352 (save-excursion 1345 (with-current-buffer gud-comint-buffer
1353 (set-buffer (process-buffer gdb-proc))
1354 (concat "*breakpoints of " (gdb-instance-target-string) "*"))) 1346 (concat "*breakpoints of " (gdb-instance-target-string) "*")))
1355 1347
1356(defun gdb-display-breakpoints-buffer () 1348(defun gdb-display-breakpoints-buffer ()
@@ -1384,8 +1376,6 @@ buffer."
1384 (setq major-mode 'gdb-breakpoints-mode) 1376 (setq major-mode 'gdb-breakpoints-mode)
1385 (setq mode-name "Breakpoints") 1377 (setq mode-name "Breakpoints")
1386 (use-local-map gdb-breakpoints-mode-map) 1378 (use-local-map gdb-breakpoints-mode-map)
1387 (set (make-local-variable 'gud-minor-mode) 'gdba)
1388 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)
1389 (setq buffer-read-only t) 1379 (setq buffer-read-only t)
1390 (gdb-invalidate-breakpoints)) 1380 (gdb-invalidate-breakpoints))
1391 1381
@@ -1423,7 +1413,7 @@ buffer."
1423(defvar gdb-source-window nil) 1413(defvar gdb-source-window nil)
1424 1414
1425(defun gdb-goto-bp-this-line () 1415(defun gdb-goto-bp-this-line ()
1426"Display the file at the specified breakpoint." 1416 "Display the file at the specified breakpoint."
1427 (interactive) 1417 (interactive)
1428 (save-excursion 1418 (save-excursion
1429 (beginning-of-line 1) 1419 (beginning-of-line 1)
@@ -1431,12 +1421,13 @@ buffer."
1431 (looking-at "\\(\\S-*\\):\\([0-9]+\\)")) 1421 (looking-at "\\(\\S-*\\):\\([0-9]+\\)"))
1432 (let ((line (match-string 2)) 1422 (let ((line (match-string 2))
1433 (file (match-string 1))) 1423 (file (match-string 1)))
1434 (set-window-buffer gdb-source-window 1424 (save-selected-window
1435 (find-file-noselect 1425 (select-window gdb-source-window)
1436 (if (file-exists-p file) 1426 (switch-to-buffer (find-file-noselect
1437 file 1427 (if (file-exists-p file)
1438 (expand-file-name file gdb-cdir)))) 1428 file
1439 (goto-line (string-to-number line)))) 1429 (expand-file-name file gdb-cdir))))
1430 (goto-line (string-to-number line)))))
1440 1431
1441;; 1432;;
1442;; Frames buffers. These display a perpetually correct bactracktrace 1433;; Frames buffers. These display a perpetually correct bactracktrace
@@ -1469,8 +1460,7 @@ buffer."
1469 (forward-line 1))))) 1460 (forward-line 1)))))
1470 1461
1471(defun gdb-stack-buffer-name () 1462(defun gdb-stack-buffer-name ()
1472 (save-excursion 1463 (with-current-buffer gud-comint-buffer
1473 (set-buffer (process-buffer gdb-proc))
1474 (concat "*stack frames of " 1464 (concat "*stack frames of "
1475 (gdb-instance-target-string) "*"))) 1465 (gdb-instance-target-string) "*")))
1476 1466
@@ -1496,8 +1486,6 @@ buffer."
1496\\{gdb-frames-mode-map}" 1486\\{gdb-frames-mode-map}"
1497 (setq major-mode 'gdb-frames-mode) 1487 (setq major-mode 'gdb-frames-mode)
1498 (setq mode-name "Frames") 1488 (setq mode-name "Frames")
1499 (set (make-local-variable 'gud-minor-mode) 'gdba)
1500 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)
1501 (setq buffer-read-only t) 1489 (setq buffer-read-only t)
1502 (use-local-map gdb-frames-mode-map) 1490 (use-local-map gdb-frames-mode-map)
1503 (gdb-invalidate-frames)) 1491 (gdb-invalidate-frames))
@@ -1519,7 +1507,7 @@ buffer."
1519 (setq selection (gdb-get-frame-number)))) 1507 (setq selection (gdb-get-frame-number))))
1520 (select-window (posn-window (event-end e))) 1508 (select-window (posn-window (event-end e)))
1521 (save-excursion 1509 (save-excursion
1522 (set-buffer (gdb-get-instance-buffer 'gdba)) 1510 (set-buffer gud-comint-buffer)
1523 (gdb-instance-enqueue-idle-input 1511 (gdb-instance-enqueue-idle-input
1524 (list (gud-format-command "server frame %p\n" selection) 1512 (list (gud-format-command "server frame %p\n" selection)
1525 'ignore)) 1513 'ignore))
@@ -1553,15 +1541,12 @@ buffer."
1553\\{gdb-registers-mode-map}" 1541\\{gdb-registers-mode-map}"
1554 (setq major-mode 'gdb-registers-mode) 1542 (setq major-mode 'gdb-registers-mode)
1555 (setq mode-name "Registers") 1543 (setq mode-name "Registers")
1556 (set (make-local-variable 'gud-minor-mode) 'gdba)
1557 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)
1558 (setq buffer-read-only t) 1544 (setq buffer-read-only t)
1559 (use-local-map gdb-registers-mode-map) 1545 (use-local-map gdb-registers-mode-map)
1560 (gdb-invalidate-registers)) 1546 (gdb-invalidate-registers))
1561 1547
1562(defun gdb-registers-buffer-name () 1548(defun gdb-registers-buffer-name ()
1563 (save-excursion 1549 (with-current-buffer gud-comint-buffer
1564 (set-buffer (process-buffer gdb-proc))
1565 (concat "*registers of " (gdb-instance-target-string) "*"))) 1550 (concat "*registers of " (gdb-instance-target-string) "*")))
1566 1551
1567(defun gdb-display-registers-buffer () 1552(defun gdb-display-registers-buffer ()
@@ -1593,11 +1578,14 @@ buffer."
1593 (save-excursion 1578 (save-excursion
1594 (set-buffer buf) 1579 (set-buffer buf)
1595 (goto-char (point-min)) 1580 (goto-char (point-min))
1596 (replace-regexp "^ .*\n" "") 1581 (while (re-search-forward "^ .*\n" nil t)
1582 (replace-match "" nil nil))
1597 (goto-char (point-min)) 1583 (goto-char (point-min))
1598 (replace-regexp "{[-0-9, {}\]*\n" "(array);\n"))) 1584 (while (re-search-forward "{[-0-9, {}\]*\n" nil t)
1585 (replace-match "(array);\n" nil nil))
1599 (goto-char (point-min)) 1586 (goto-char (point-min))
1600 (replace-regexp "{.*=.*\n" "(structure);\n") 1587 (while (re-search-forward "{.*=.*\n" nil t)
1588 (replace-match "(structure);\n" nil nil))))
1601 (let ((buf (gdb-get-instance-buffer 'gdb-locals-buffer))) 1589 (let ((buf (gdb-get-instance-buffer 'gdb-locals-buffer)))
1602 (and buf (save-excursion 1590 (and buf (save-excursion
1603 (set-buffer buf) 1591 (set-buffer buf)
@@ -1627,15 +1615,12 @@ buffer."
1627\\{gdb-locals-mode-map}" 1615\\{gdb-locals-mode-map}"
1628 (setq major-mode 'gdb-locals-mode) 1616 (setq major-mode 'gdb-locals-mode)
1629 (setq mode-name "Locals") 1617 (setq mode-name "Locals")
1630 (set (make-local-variable 'gud-minor-mode) 'gdba)
1631 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)
1632 (setq buffer-read-only t) 1618 (setq buffer-read-only t)
1633 (use-local-map gdb-locals-mode-map) 1619 (use-local-map gdb-locals-mode-map)
1634 (gdb-invalidate-locals)) 1620 (gdb-invalidate-locals))
1635 1621
1636(defun gdb-locals-buffer-name () 1622(defun gdb-locals-buffer-name ()
1637 (save-excursion 1623 (with-current-buffer gud-comint-buffer
1638 (set-buffer (process-buffer gdb-proc))
1639 (concat "*locals of " (gdb-instance-target-string) "*"))) 1624 (concat "*locals of " (gdb-instance-target-string) "*")))
1640 1625
1641(defun gdb-display-locals-buffer () 1626(defun gdb-display-locals-buffer ()
@@ -1685,15 +1670,12 @@ buffer."
1685\\{gdb-display-mode-map}" 1670\\{gdb-display-mode-map}"
1686 (setq major-mode 'gdb-display-mode) 1671 (setq major-mode 'gdb-display-mode)
1687 (setq mode-name "Display") 1672 (setq mode-name "Display")
1688 (set (make-local-variable 'gud-minor-mode) 'gdba)
1689 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)
1690 (setq buffer-read-only t) 1673 (setq buffer-read-only t)
1691 (use-local-map gdb-display-mode-map) 1674 (use-local-map gdb-display-mode-map)
1692 (gdb-invalidate-display)) 1675 (gdb-invalidate-display))
1693 1676
1694(defun gdb-display-buffer-name () 1677(defun gdb-display-buffer-name ()
1695 (save-excursion 1678 (with-current-buffer gud-comint-buffer
1696 (set-buffer (process-buffer gdb-proc))
1697 (concat "*Displayed expressions of " (gdb-instance-target-string) "*"))) 1679 (concat "*Displayed expressions of " (gdb-instance-target-string) "*")))
1698 1680
1699(defun gdb-display-display-buffer () 1681(defun gdb-display-display-buffer ()
@@ -2200,8 +2182,6 @@ BUFFER nil or omitted means use the current buffer."
2200\\{gdb-assembler-mode-map}" 2182\\{gdb-assembler-mode-map}"
2201 (setq major-mode 'gdb-assembler-mode) 2183 (setq major-mode 'gdb-assembler-mode)
2202 (setq mode-name "Assembler") 2184 (setq mode-name "Assembler")
2203 (set (make-local-variable 'gud-minor-mode) 'gdba)
2204 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)
2205 (setq left-margin-width 2) 2185 (setq left-margin-width 2)
2206 (setq buffer-read-only t) 2186 (setq buffer-read-only t)
2207 (use-local-map gdb-assembler-mode-map) 2187 (use-local-map gdb-assembler-mode-map)
@@ -2209,8 +2189,7 @@ BUFFER nil or omitted means use the current buffer."
2209 (gdb-invalidate-breakpoints)) 2189 (gdb-invalidate-breakpoints))
2210 2190
2211(defun gdb-assembler-buffer-name () 2191(defun gdb-assembler-buffer-name ()
2212 (save-excursion 2192 (with-current-buffer gud-comint-buffer
2213 (set-buffer (process-buffer gdb-proc))
2214 (concat "*Machine Code " (gdb-instance-target-string) "*"))) 2193 (concat "*Machine Code " (gdb-instance-target-string) "*")))
2215 2194
2216(defun gdb-display-assembler-buffer () 2195(defun gdb-display-assembler-buffer ()
@@ -2244,7 +2223,7 @@ BUFFER nil or omitted means use the current buffer."
2244 2223
2245 ;; take previous disassemble command off the queue 2224 ;; take previous disassemble command off the queue
2246 (save-excursion 2225 (save-excursion
2247 (set-buffer (gdb-get-instance-buffer 'gdba)) 2226 (set-buffer gud-comint-buffer)
2248 (let ((queue gdb-idle-input-queue) (item)) 2227 (let ((queue gdb-idle-input-queue) (item))
2249 (while queue 2228 (while queue
2250 (setq item (car queue)) 2229 (setq item (car queue))