Function: edebug--strip-instrumentation
edebug--strip-instrumentation is a byte-compiled function defined in
edebug.el.gz.
Signature
(edebug--strip-instrumentation FRAMES)
Documentation
Return a new list of backtrace frames with instrumentation removed.
Remove frames for Edebug's functions and the lambdas in
edebug-enter wrappers. Fill in the def-name, before-index
and after-index fields in both FRAMES and the returned list
of deinstrumented frames, for those frames where the source
code location is known.
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/edebug.el.gz
(defun edebug--strip-instrumentation (frames)
"Return a new list of backtrace frames with instrumentation removed.
Remove frames for Edebug's functions and the lambdas in
`edebug-enter' wrappers. Fill in the def-name, before-index
and after-index fields in both FRAMES and the returned list
of deinstrumented frames, for those frames where the source
code location is known."
(let ((index (length frames))
skip-next-lambda def-name before-index after-index results)
(dolist (frame (reverse frames))
(let ((new-frame (copy-edebug--frame frame))
(fun (edebug--frame-fun frame))
(args (edebug--frame-args frame)))
(decf index) ;; FIXME: Not used?
(pcase fun
('edebug-enter
(setq skip-next-lambda t
def-name (nth 0 args)))
('edebug-after
(setq before-index (if (consp (nth 0 args))
(nth 1 (nth 0 args))
(nth 0 args))
after-index (nth 1 args)))
;; Just skip all our own frames.
((pred edebug--symbol-prefixed-p) nil)
(_
(when (and skip-next-lambda
(not (interpreted-function-p fun)))
(warn "Edebug--strip-instrumentation expected an interpreted function:\n%S" fun))
(unless skip-next-lambda
(edebug--unwrap-frame new-frame)
(edebug--add-source-info new-frame def-name before-index after-index)
(edebug--add-source-info frame def-name before-index after-index)
(push new-frame results))
(setq before-index nil
after-index nil
skip-next-lambda nil)))))
results))