Mercurial > emacs
comparison lisp/progmodes/gdb-ui.el @ 66845:607fc7bd4896
(gdb-var-create-handler, gdb-var-list-children-handler):
Match on "const char *" too.
(gdb-var-evaluate-expression-handler): Match on empty string.
(gdb-var-update-handler): Only call
gdb-var-evaluate-expression-handler when required.
author | Nick Roberts <nickrob@snap.net.nz> |
---|---|
date | Sun, 13 Nov 2005 09:02:23 +0000 |
parents | 51ebdb18e3d9 |
children | 10f616ac16f1 |
comparison
equal
deleted
inserted
replaced
66844:3eeaeabe0bb8 | 66845:607fc7bd4896 |
---|---|
491 (unless (string-equal | 491 (unless (string-equal |
492 speedbar-initial-expansion-list-name "GUD") | 492 speedbar-initial-expansion-list-name "GUD") |
493 (speedbar-change-initial-expansion-list "GUD")) | 493 (speedbar-change-initial-expansion-list "GUD")) |
494 (if (or (equal (nth 2 var) "0") | 494 (if (or (equal (nth 2 var) "0") |
495 (and (equal (nth 2 var) "1") | 495 (and (equal (nth 2 var) "1") |
496 (equal (nth 3 var) "char *"))) | 496 (string-match "char \\*" (nth 3 var)))) |
497 (gdb-enqueue-input | 497 (gdb-enqueue-input |
498 (list | 498 (list |
499 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) | 499 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) |
500 'gdba) | 500 'gdba) |
501 (concat "server interpreter mi \"-var-evaluate-expression " | 501 (concat "server interpreter mi \"-var-evaluate-expression " |
509 (message "No symbol \"%s\" in current context." expr))))) | 509 (message "No symbol \"%s\" in current context." expr))))) |
510 | 510 |
511 (defun gdb-var-evaluate-expression-handler (varnum changed) | 511 (defun gdb-var-evaluate-expression-handler (varnum changed) |
512 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) | 512 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) |
513 (goto-char (point-min)) | 513 (goto-char (point-min)) |
514 (re-search-forward ".*value=\\(\".+\"\\)" nil t) | 514 (re-search-forward ".*value=\\(\".*\"\\)" nil t) |
515 (catch 'var-found | 515 (catch 'var-found |
516 (let ((num 0)) | 516 (let ((num 0)) |
517 (dolist (var gdb-var-list) | 517 (dolist (var gdb-var-list) |
518 (if (string-equal varnum (cadr var)) | 518 (if (string-equal varnum (cadr var)) |
519 (progn | 519 (progn |
552 (if (string-equal (cadr var1) (cadr varchild)) | 552 (if (string-equal (cadr var1) (cadr varchild)) |
553 (throw 'child-already-watched nil))) | 553 (throw 'child-already-watched nil))) |
554 (push varchild var-list) | 554 (push varchild var-list) |
555 (if (or (equal (nth 2 varchild) "0") | 555 (if (or (equal (nth 2 varchild) "0") |
556 (and (equal (nth 2 varchild) "1") | 556 (and (equal (nth 2 varchild) "1") |
557 (equal (nth 3 varchild) "char *"))) | 557 (string-match "char \\*" (nth 3 varchild)))) |
558 (gdb-enqueue-input | 558 (gdb-enqueue-input |
559 (list | 559 (list |
560 (concat | 560 (concat |
561 "server interpreter mi \"-var-evaluate-expression " | 561 "server interpreter mi \"-var-evaluate-expression " |
562 (nth 1 varchild) "\"\n") | 562 (nth 1 varchild) "\"\n") |
576 | 576 |
577 (defun gdb-var-update-handler () | 577 (defun gdb-var-update-handler () |
578 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) | 578 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) |
579 (goto-char (point-min)) | 579 (goto-char (point-min)) |
580 (while (re-search-forward gdb-var-update-regexp nil t) | 580 (while (re-search-forward gdb-var-update-regexp nil t) |
581 (catch 'var-found-1 | |
581 (let ((varnum (match-string 1))) | 582 (let ((varnum (match-string 1))) |
582 (gdb-enqueue-input | 583 (dolist (var gdb-var-list) |
583 (list | 584 (when (and (string-equal varnum (cadr var)) |
584 (concat "server interpreter mi \"-var-evaluate-expression " | 585 (or (equal (nth 2 var) "0") |
585 varnum "\"\n") | 586 (and (equal (nth 2 var) "1") |
586 `(lambda () (gdb-var-evaluate-expression-handler ,varnum t))))))) | 587 (string-match "char \\*" (nth 3 var))))) |
588 (gdb-enqueue-input | |
589 (list | |
590 (concat "server interpreter mi \"-var-evaluate-expression " | |
591 varnum "\"\n") | |
592 `(lambda () (gdb-var-evaluate-expression-handler ,varnum t)))) | |
593 (throw 'var-found-1 nil))))))) | |
587 (setq gdb-pending-triggers | 594 (setq gdb-pending-triggers |
588 (delq 'gdb-var-update gdb-pending-triggers)) | 595 (delq 'gdb-var-update gdb-pending-triggers)) |
589 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) | 596 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) |
590 ;; Dummy command to update speedbar at right time. | 597 ;; Dummy command to update speedbar at right time. |
591 (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-timer-fn)) | 598 (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-timer-fn)) |