branch: externals/org
commit 64e15ea0b0445174272a064067708ea4da636593
Author: Ihor Radchenko <[email protected]>
Commit: Ihor Radchenko <[email protected]>
Optimize org-element--cache-compare
* lisp/org-element.el (org-element--cache-key): Reduce property and
type queries.
(org-element--cache-compare): Convert into `defsubst'.
---
lisp/org-element.el | 27 ++++++++++++++-------------
1 file changed, 14 insertions(+), 13 deletions(-)
diff --git a/lisp/org-element.el b/lisp/org-element.el
index dd06a2a75c..9255123c52 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -5556,23 +5556,24 @@ cache during the synchronization get a new key
generated with
Such keys are stored inside the element property
`:org-element--cache-sync-key'. The property is a cons containing
current `org-element--cache-sync-keys-value' and the element key."
- (or (when (eq org-element--cache-sync-keys-value (car (org-element-property
:org-element--cache-sync-key element)))
- (cdr (org-element-property :org-element--cache-sync-key element)))
+ (or (when-let ((key-cons (org-element-property :org-element--cache-sync-key
element)))
+ (when (eq org-element--cache-sync-keys-value (car key-cons))
+ (cdr key-cons)))
(let* ((begin (org-element-property :begin element))
+ (type (org-element-type element))
;; Increase beginning position of items (respectively
;; table rows) by one, so the first item can get
;; a different key from its parent list (respectively
;; table).
- (key (if (memq (org-element-type element) '(item table-row))
- (1+ begin)
- ;; Decrease beginning position of sections by one,
- ;; so that the first element of the section get
- ;; different key from the parent section.
- (if (eq (org-element-type element) 'section)
- (1- begin)
- (if (eq (org-element-type element) 'org-data)
- (- begin 2)
- begin)))))
+ (key
+ (cond
+ ((memq type '(item table-row)) (1+ begin))
+ ;; Decrease beginning position of sections by one,
+ ;; so that the first element of the section get
+ ;; different key from the parent section.
+ ((eq type 'section) (1- begin))
+ ((eq type 'org-data) (- begin 2))
+ (t begin))))
(when org-element--cache-sync-requests
(org-element-put-property
element
@@ -5673,7 +5674,7 @@ position."
;; than B (A is longer). Therefore, return nil.
(and (null a) b)))))
-(defun org-element--cache-compare (a b)
+(defsubst org-element--cache-compare (a b)
"Non-nil when element A is located before element B."
(org-element--cache-key-less-p (org-element--cache-key a)
(org-element--cache-key b)))