diff options
author | Lars Ingebrigtsen <larsi@gnus.org> | 2019-10-20 14:27:38 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2019-10-20 14:27:38 +0200 |
commit | 34963d632dbf6dc7752962de8aa7dba8af3b8a85 (patch) | |
tree | 09a72962590895047d7dd90ae57f81ec9f187ecb /lisp/emacs-lisp/edebug.el | |
parent | 34744278ba44d78d2a3718135ac20f2dada303e4 (diff) | |
download | emacs-34963d632dbf6dc7752962de8aa7dba8af3b8a85.tar.gz |
Fix edebug--restore-breakpoints re-instrumentinging bug-out
* lisp/emacs-lisp/edebug.el (edebug--restore-breakpoints): Don't
bug out when instrumenting/de-instrumenting/re-instrumenting.
Diffstat (limited to 'lisp/emacs-lisp/edebug.el')
-rw-r--r-- | lisp/emacs-lisp/edebug.el | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index a3ab23c1a1e..2eceb823716 100644 --- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el @@ -1415,23 +1415,24 @@ contains a circular object." ))) (defun edebug--restore-breakpoints (name) - (let* ((data (get name 'edebug)) - (offsets (nth 2 data)) - (breakpoints (nth 1 data)) - (start (nth 0 data)) - index) - ;; Breakpoints refer to offsets from the start of the function. - ;; The start position is a marker, so it'll move around in a - ;; similar fashion as the breakpoint markers. If we find a - ;; breakpoint marker that refers to an offset (which is a place - ;; where breakpoints can be made), then we restore it. - (cl-loop for breakpoint in breakpoints - for marker = (nth 3 breakpoint) - when (and (marker-position marker) - (setq index (seq-position - offsets - (- (marker-position marker) start)))) - collect (cons index (cdr breakpoint))))) + (let ((data (get name 'edebug))) + (when (listp data) + (let ((offsets (nth 2 data)) + (breakpoints (nth 1 data)) + (start (nth 0 data)) + index) + ;; Breakpoints refer to offsets from the start of the function. + ;; The start position is a marker, so it'll move around in a + ;; similar fashion as the breakpoint markers. If we find a + ;; breakpoint marker that refers to an offset (which is a place + ;; where breakpoints can be made), then we restore it. + (cl-loop for breakpoint in breakpoints + for marker = (nth 3 breakpoint) + when (and (marker-position marker) + (setq index (seq-position + offsets + (- (marker-position marker) start)))) + collect (cons index (cdr breakpoint))))))) (defun edebug-new-definition (def-name) "Set up DEF-NAME to use Edebug's instrumentation functions." |