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))