Function: compilation--previous-directory
compilation--previous-directory is a byte-compiled function defined in
compile.el.gz.
Signature
(compilation--previous-directory POS)
Documentation
Like (previous-single-property-change POS 'compilation-directory), but faster.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/compile.el.gz
(defun compilation--previous-directory (pos)
"Like (previous-single-property-change POS \\='compilation-directory), but faster."
;; This avoids an N² behavior when there's no/few compilation-directory
;; entries, in which case each call to previous-single-property-change
;; ends up having to walk very far back to find the last change.
(if (and compilation--previous-directory-cache
(< pos (car compilation--previous-directory-cache))
(or (null (cdr compilation--previous-directory-cache))
(< (cdr compilation--previous-directory-cache) pos)))
;; No need to call previous-single-property-change.
(cdr compilation--previous-directory-cache)
(let* ((cache (and compilation--previous-directory-cache
(<= (car compilation--previous-directory-cache) pos)
(car compilation--previous-directory-cache)))
(prev
(previous-single-property-change
pos 'compilation-directory nil cache))
(res
(cond
((null cache)
(setq compilation--previous-directory-cache
(cons (copy-marker pos) (if prev (copy-marker prev))))
prev)
((and prev (= prev cache))
(set-marker (car compilation--previous-directory-cache) pos)
(cdr compilation--previous-directory-cache))
(t
(set-marker cache pos)
(setcdr compilation--previous-directory-cache
(copy-marker prev))
prev))))
(if (markerp res) (marker-position res) res))))