1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-06 11:55:48 +00:00

(edebug-var-status, edebug-restore-status): New functions.

(edebug-enter, edebug-outside-excursion): Use them.
This commit is contained in:
Richard M. Stallman 2003-09-19 14:31:15 +00:00
parent 2c0696b144
commit 5fc58d8323

View File

@ -2241,8 +2241,10 @@ error is signaled again."
;; Save the outside value of executing macro. (here??)
(edebug-outside-executing-macro executing-kbd-macro)
(edebug-outside-pre-command-hook pre-command-hook)
(edebug-outside-post-command-hook post-command-hook))
(edebug-outside-pre-command-hook
(edebug-var-status 'pre-command-hook))
(edebug-outside-post-command-hook
(edebug-var-status 'post-command-hook)))
(unwind-protect
(let (;; Don't keep reading from an executing kbd macro
;; within edebug unless edebug-continue-kbd-macro is
@ -2267,10 +2269,11 @@ error is signaled again."
edebug-next-execution-mode nil)
(edebug-enter edebug-function edebug-args edebug-body))
;; Reset global variables in case outside value was changed.
(setq executing-kbd-macro edebug-outside-executing-macro
pre-command-hook edebug-outside-pre-command-hook
post-command-hook edebug-outside-post-command-hook
)))
(setq executing-kbd-macro edebug-outside-executing-macro)
(edebug-restore-status
'post-command-hook edebug-outside-post-command-hook)
(edebug-restore-status
'pre-command-hook edebug-outside-pre-command-hook)))
(let* ((edebug-data (get edebug-function 'edebug))
(edebug-def-mark (car edebug-data)) ; mark at def start
@ -2291,6 +2294,30 @@ error is signaled again."
(funcall edebug-body))
)))
(defun edebug-var-status (var)
"Return a cons cell describing the status of VAR's current binding.
The purpose of this function is so you can properly undo
subsequent changes to the same binding, by passing the status
cons cell to `edebug-restore-status'. The status cons cell
has the form (LOCUS . VALUE), where LOCUS can be a buffer
\(for a buffer-local binding), a frame (for a frame-local binding),
or nil (if the default binding is current)."
(cons (variable-binding-locus var)
(symbol-value var)))
(defun edebug-restore-status (var status)
"Reset VAR based on STATUS.
STATUS should be a list you got from `edebug-var-status'."
(let ((locus (car status))
(value (cdr status)))
(cond ((bufferp locus)
(if (buffer-live-p locus)
(with-current-buffer locus
(set var value))))
((framep locus)
(modify-frame-parameters locus (list (cons var value))))
(t
(set var value)))))
(defun edebug-enter-trace (edebug-body)
(let ((edebug-stack-depth (1+ edebug-stack-depth))
@ -3511,8 +3538,9 @@ Return the result of the last expression."
(executing-kbd-macro edebug-outside-executing-macro)
(defining-kbd-macro edebug-outside-defining-kbd-macro)
(pre-command-hook edebug-outside-pre-command-hook)
(post-command-hook edebug-outside-post-command-hook)
;; Get the values out of the saved statuses.
(pre-command-hook (cdr edebug-outside-pre-command-hook))
(post-command-hook (cdr edebug-outside-post-command-hook))
;; See edebug-display
(overlay-arrow-position edebug-outside-o-a-p)
@ -3552,13 +3580,18 @@ Return the result of the last expression."
edebug-outside-executing-macro executing-kbd-macro
edebug-outside-defining-kbd-macro defining-kbd-macro
edebug-outside-pre-command-hook pre-command-hook
edebug-outside-post-command-hook post-command-hook
edebug-outside-o-a-p overlay-arrow-position
edebug-outside-o-a-s overlay-arrow-string
edebug-outside-c-i-e-a cursor-in-echo-area
))) ; let
)
;; Restore the outside saved values; don't alter
;; the outside binding loci.
(setcdr edebug-outside-pre-command-hook pre-command-hook)
(setcdr edebug-outside-post-command-hook post-command-hook)
)) ; let
))
(defvar cl-debug-env nil) ;; defined in cl; non-nil when lexical env used.
@ -3676,14 +3709,13 @@ Print result in minibuffer."
(edebug-safe-prin1-to-string (car values)))))
(defun edebug-eval-last-sexp ()
"Evaluate sexp before point in the outside environment;
print value in minibuffer."
"Evaluate sexp before point in the outside environment; value in minibuffer."
(interactive)
(edebug-eval-expression (edebug-last-sexp)))
(defun edebug-eval-print-last-sexp ()
"Evaluate sexp before point in the outside environment;
print value into current buffer."
"Evaluate sexp before point in the outside environment; insert the value.
This prints the value into current buffer."
(interactive)
(let* ((edebug-form (edebug-last-sexp))
(edebug-result-string
@ -3698,12 +3730,15 @@ print value into current buffer."
;;; Edebug Minor Mode
;; Global GUD bindings for all emacs-lisp-mode buffers.
(define-key emacs-lisp-mode-map "\C-x\C-a\C-s" 'edebug-step-mode)
(define-key emacs-lisp-mode-map "\C-x\C-a\C-n" 'edebug-next-mode)
(define-key emacs-lisp-mode-map "\C-x\C-a\C-c" 'edebug-go-mode)
(define-key emacs-lisp-mode-map "\C-x\C-a\C-l" 'edebug-where)
(defvar gud-inhibit-global-bindings
"*Non-nil means don't do global rebindings of C-x C-a subcommands.")
;; Global GUD bindings for all emacs-lisp-mode buffers.
(unless gud-inhibit-global-bindings
(define-key emacs-lisp-mode-map "\C-x\C-a\C-s" 'edebug-step-mode)
(define-key emacs-lisp-mode-map "\C-x\C-a\C-n" 'edebug-next-mode)
(define-key emacs-lisp-mode-map "\C-x\C-a\C-c" 'edebug-go-mode)
(define-key emacs-lisp-mode-map "\C-x\C-a\C-l" 'edebug-where))
(defvar edebug-mode-map
(let ((map (copy-keymap emacs-lisp-mode-map)))