Function: org-element--cache-persist-after-read

org-element--cache-persist-after-read is a byte-compiled function defined in org-element.el.gz.

Signature

(org-element--cache-persist-after-read CONTAINER &optional ASSOCIATED)

Documentation

Setup restored cache for CONTAINER and ASSOCIATED.

Re-fill :buffer properties for cache elements (buffer objects cannot be written onto disk). Also, perform some consistency checks to prevent loading corrupted cache.

Source Code

;; Defined in /usr/src/emacs/lisp/org/org-element.el.gz
(defun org-element--cache-persist-after-read (container &optional associated)
  "Setup restored cache for CONTAINER and ASSOCIATED.
Re-fill :buffer properties for cache elements (buffer objects cannot
be written onto disk).  Also, perform some consistency checks to
prevent loading corrupted cache."
  (when (and (plist-get associated :file)
             (get-file-buffer (plist-get associated :file)))
    (with-current-buffer (get-file-buffer (plist-get associated :file))
      (when (and org-element-use-cache org-element-cache-persistent)
        (catch 'abort
          (when (and (equal container '(elisp org-element--cache)) org-element--cache)
            ;; Restore `:buffer' property.
            (avl-tree-mapc
             (lambda (el)
               (org-element-map el t
                 (lambda (el2)
                   (unless (org-element-type-p el2 'plain-text)
                     (org-element-put-property el2 :buffer (current-buffer))))
                 nil nil nil 'with-affiliated 'no-undefer)
               (org-element--cache-log-message
                "Recovering persistent cached element: %S"
                (org-element--format-element el))
               (when (and (not (org-element-parent el)) (not (org-element-type-p el 'org-data)))
                 (org-element--cache-warn
                  "Got element without parent when loading cache from disk.  Not using this persistent cache.
Please report it to Org mode mailing list (M-x org-submit-bug-report).\n%S" el)
                 (org-element-cache-reset)
                 (throw 'abort t)))
             org-element--cache)
            (setq-local org-element--cache-size (avl-tree-size org-element--cache)))
          (when (and (equal container '(elisp org-element--headline-cache)) org-element--headline-cache)
            (setq-local org-element--headline-cache-size (avl-tree-size org-element--headline-cache))))))))