Function: org-element--cache-verify-element

org-element--cache-verify-element is a byte-compiled function defined in org-element.el.gz.

Signature

(org-element--cache-verify-element ELEMENT)

Documentation

Verify correctness of ELEMENT when org-element--cache-self-verify is non-nil.

Return non-nil when verification failed.

Source Code

;; Defined in /usr/src/emacs/lisp/org/org-element.el.gz
(defun org-element--cache-verify-element (element)
  "Verify correctness of ELEMENT when `org-element--cache-self-verify' is non-nil.

Return non-nil when verification failed."
  (let ((org-element--cache-self-verify
         (or org-element--cache-self-verify
             (and (boundp 'org-batch-test) org-batch-test)))
        (org-element--cache-self-verify-frequency
         (if (and (boundp 'org-batch-test) org-batch-test)
             1
           org-element--cache-self-verify-frequency)))
    ;; Verify correct parent for the element.
    (unless (or (not org-element--cache-self-verify)
                (org-element-property :parent element)
                (org-element-type-p element 'org-data))
      (org-element--cache-warn "Got element without parent (cache active?: %S). Please report it to Org mode mailing list (M-x org-submit-bug-report).\n%S" (org-element--cache-active-p)  element)
      (org-element-cache-reset))
    (when (and org-element--cache-self-verify
               (org-element--cache-active-p)
               (org-element-type-p element 'headline)
               ;; Avoid too much slowdown
               (< (random 1000) (* 1000 org-element--cache-self-verify-frequency)))
      (org-with-point-at (org-element-begin element)
        (org-element-with-disabled-cache (org-up-heading-or-point-min))
        (unless (or (= (point)
                       (org-element-begin
                        (org-element-property :parent element)))
                    (eq (point) (point-min)))
          (org-element--cache-warn
           "Cached element has wrong parent in %s. Resetting.
If this warning appears regularly, please report the warning text to Org mode mailing list (M-x org-submit-bug-report).
The element is: %S\n The parent is: %S\n The real parent is: %S"
           (buffer-name (current-buffer))
           (org-element--format-element element)
           (org-element--format-element (org-element-property :parent element))
           (org-element--format-element
            (org-element--current-element
             (org-element-end (org-element-property :parent element)))))
          (org-element-cache-reset))
        (org-element--cache-verify-element
         (org-element-property :parent element))))
    ;; Verify the element itself.
    (when (and org-element--cache-self-verify
               (org-element--cache-active-p)
               element
               (not (org-element-type-p element '(section org-data)))
               ;; Avoid too much slowdown
               (< (random 1000) (* 1000 org-element--cache-self-verify-frequency)))
      (let ((real-element (org-element-with-disabled-cache
                            (org-element--parse-to
                             (if (org-element-type-p element '(table-row item))
                                 (1+ (org-element-begin element))
                               (org-element-begin element))))))
        (unless (and (eq (org-element-type real-element) (org-element-type element))
                     (eq (org-element-begin real-element) (org-element-begin element))
                     (eq (org-element-end real-element) (org-element-end element))
                     (eq (org-element-contents-begin real-element) (org-element-contents-begin element))
                     (eq (org-element-contents-end real-element) (org-element-contents-end element))
                     (or (not (org-element-property :ID real-element))
                         (string= (org-element-property :ID real-element) (org-element-property :ID element))))
          (org-element--cache-warn "(%S) Cached element is incorrect in %s. (Cache tic up to date: %S) Resetting.
If this warning appears regularly, please report the warning text to Org mode mailing list (M-x org-submit-bug-report).
The element is: %S\n The real element is: %S\n Cache around :begin:\n%S\n%S\n%S"
                                   this-command
                                   (buffer-name (current-buffer))
                                   (if (/= org-element--cache-change-tic
                                          (buffer-chars-modified-tick))
                                       "no" "yes")
                                   (org-element--format-element element)
                                   (org-element--format-element real-element)
                                   (org-element--format-element (org-element--cache-find (1- (org-element-begin real-element))))
                                   (org-element--format-element (car (org-element--cache-find (org-element-begin real-element) 'both)))
                                   (org-element--format-element (cdr (org-element--cache-find (org-element-begin real-element) 'both))))
          (org-element-cache-reset))))))