From 5f37f77fc6f9cd3334088bc41f73a1321c7df51e Mon Sep 17 00:00:00 2001 From: Ihor Radchenko Date: Sat, 22 Apr 2023 20:17:26 +0200 Subject: [PATCH] org-element--cache-shift-positions: Make use of inliner * lisp/org-element.el: Allow `org-element-property' inliner to expand into `aref'. --- lisp/org-element.el | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/lisp/org-element.el b/lisp/org-element.el index d1a0505e2..5752b24cc 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -5832,15 +5832,29 @@ Properties are modified by side-effect." (when (and (or (not props) (memq :structure props)) (eq (org-element-type element) 'plain-list) (not (eq (org-element-type (org-element-property :parent element)) 'item))) - (let ((structure (org-element-property-1 :structure element))) + (let ((structure (org-element-property :structure element))) (dolist (item structure) (cl-incf (car item) offset) (cl-incf (nth 6 item) offset)))) - (dolist (key '( :begin :contents-begin :contents-end :end - :post-affiliated :robust-begin :robust-end)) - (when (and (or (not props) (memq key props)) - (org-element-property key element)) - (cl-incf (org-element-property-1 key element) offset)))) + ;; Do not use loop for inline expansion to work during compile time. + (when (or (not props) (memq :begin props)) + (cl-incf (org-element-property :begin element) offset)) + (when (or (not props) (memq :end props)) + (cl-incf (org-element-property :end element) offset)) + (when (or (not props) (memq :post-affiliated props)) + (cl-incf (org-element-property :post-affiliated element) offset)) + (when (and (or (not props) (memq :contents-begin props)) + (org-element-property :contents-begin element)) + (cl-incf (org-element-property :contents-begin element) offset)) + (when (and (or (not props) (memq :contents-end props)) + (org-element-property :contents-end element)) + (cl-incf (org-element-property :contents-end element) offset)) + (when (and (or (not props) (memq :robust-begin props)) + (org-element-property :robust-begin element)) + (cl-incf (org-element-property :robust-begin element) offset)) + (when (and (or (not props) (memq :robust-end props)) + (org-element-property :robust-end element)) + (cl-incf (org-element-property :robust-end element) offset))) (defvar org-element--cache-interrupt-C-g t "When non-nil, allow the user to abort `org-element--cache-sync'. @@ -7541,8 +7555,8 @@ the cache." ;; and need to fill it. (unless (or (and start (< (org-element-property :begin data) start)) (and prev (not (org-element--cache-key-less-p - (org-element--cache-key prev) - (org-element--cache-key data))))) + (org-element--cache-key prev) + (org-element--cache-key data))))) ;; DATA is at of after START and PREV. (if (or (not start) (= (org-element-property :begin data) start)) ;; DATA is at START. Match it.