aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/emacs-lisp/edebug.el24
1 files changed, 23 insertions, 1 deletions
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index e0a4eb3db5a..a19ac3bc602 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -2723,6 +2723,7 @@ See `edebug-behavior-alist' for implementations.")
2723 (edebug-stop)) 2723 (edebug-stop))
2724 2724
2725 (edebug-overlay-arrow) 2725 (edebug-overlay-arrow)
2726 (edebug--overlay-breakpoints edebug-function)
2726 2727
2727 (unwind-protect 2728 (unwind-protect
2728 (if (or edebug-stop 2729 (if (or edebug-stop
@@ -2905,6 +2906,7 @@ See `edebug-behavior-alist' for implementations.")
2905 (setq signal-hook-function #'edebug-signal) 2906 (setq signal-hook-function #'edebug-signal)
2906 (if edebug-backtrace-buffer 2907 (if edebug-backtrace-buffer
2907 (kill-buffer edebug-backtrace-buffer)) 2908 (kill-buffer edebug-backtrace-buffer))
2909 (edebug--overlay-breakpoints-remove (point-min) (point-max))
2908 2910
2909 ;; Remember selected-window after recursive-edit. 2911 ;; Remember selected-window after recursive-edit.
2910 ;; (setq edebug-inside-window (selected-window)) 2912 ;; (setq edebug-inside-window (selected-window))
@@ -3186,7 +3188,27 @@ the breakpoint."
3186 3188
3187 (setcar (cdr edebug-data) edebug-breakpoints) 3189 (setcar (cdr edebug-data) edebug-breakpoints)
3188 (goto-char (+ edebug-def-mark (aref offset-vector index))) 3190 (goto-char (+ edebug-def-mark (aref offset-vector index)))
3189 )))) 3191 (edebug--overlay-breakpoints edebug-def-name)))))
3192
3193(defun edebug--overlay-breakpoints (function)
3194 (let* ((data (get function 'edebug))
3195 (start (nth 0 data))
3196 (breakpoints (nth 1 data))
3197 (offsets (nth 2 data)))
3198 ;; First remove all old breakpoint overlays.
3199 (edebug--overlay-breakpoints-remove
3200 start (+ start (aref offsets (1- (length offsets)))))
3201 ;; Then make overlays for the breakpoints.
3202 (dolist (breakpoint breakpoints)
3203 (let* ((pos (+ start (aref offsets (car breakpoint))))
3204 (overlay (make-overlay pos (1+ pos))))
3205 (overlay-put overlay 'edebug t)
3206 (overlay-put overlay 'face 'highlight)))))
3207
3208(defun edebug--overlay-breakpoints-remove (start end)
3209 (dolist (overlay (overlays-in start end))
3210 (when (overlay-get overlay 'edebug)
3211 (delete-overlay overlay))))
3190 3212
3191(defun edebug-set-breakpoint (arg) 3213(defun edebug-set-breakpoint (arg)
3192 "Set the breakpoint of nearest sexp. 3214 "Set the breakpoint of nearest sexp.