[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/org 9ed7956afd 080/101: org-element: Use constant value
From: |
ELPA Syncer |
Subject: |
[elpa] externals/org 9ed7956afd 080/101: org-element: Use constant values for fixed deferred properties |
Date: |
Sat, 1 Jul 2023 09:59:15 -0400 (EDT) |
branch: externals/org
commit 9ed7956afd8c281d7de5e05243972195dc8ffb55
Author: Ihor Radchenko <yantar92@posteo.net>
Commit: Ihor Radchenko <yantar92@posteo.net>
org-element: Use constant values for fixed deferred properties
* lisp/org-element.el (org-element--headline-archivedp):
(org-element--headline-footnote-section-p):
(org-element--headline-raw-value):
(org-element--headline-parse-title-raw):
(org-element--headline-parse-title-parse):
(org-element--headline-deferred):
(org-element--get-global-node-properties):
(org-element--headline-parent-deferred): New internal constants
holding deferred values used by parser. These values are not a
subject of modification and thus can be re-used instead of
re-allocating a new instance for every new parsed element.
(org-element--headline-parse-title):
(org-element-headline-parser):
(org-element-org-data-parser):
(org-element-inlinetask-parser):
(org-element--parse-to): Use the new constants.
This patch aims for smaller memory footprint of Org AST and cache.
---
lisp/org-element.el | 78 ++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 53 insertions(+), 25 deletions(-)
diff --git a/lisp/org-element.el b/lisp/org-element.el
index 8ee4ddbe55..8a7dc75a5f 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -1085,6 +1085,20 @@ Return value is a plist."
(concat org-element-comment-string "\\(?: \\|$\\)")
"Regexp matching comment string in a headline.")
+(defconst org-element--headline-archivedp
+ (org-element-deferred-create
+ nil #'org-element--headline-archivedp)
+ "Constant holding deferred value for headline `:archivedp' property.")
+
+(defconst org-element--headline-footnote-section-p
+ (org-element-deferred-create
+ nil #'org-element--headline-footnote-section-p)
+ "Constant holding deferred value for headline `:footnote-section-p'
property.")
+
+(defconst org-element--headline-raw-value
+ (org-element-deferred-create-alias :raw-value)
+ "Constant holding deferred value for headline `:raw-value' property.")
+
(defun org-element--headline-parse-title (headline raw-secondary-p)
"Resolve title properties of HEADLINE for side effect.
When RAW-SECONDARY-P is non-nil, headline's title will not be
@@ -1125,13 +1139,7 @@ Throw `:org-element-deferred-retry' signal at the end."
(raw-value
(org-element-deferred-create
nil #'org-element--headline-raw-value
- (- title-start begin) (- title-end begin)))
- (archivedp
- (org-element-deferred-create
- nil #'org-element--headline-archivedp))
- (footnote-section-p
- (org-element-deferred-create
- nil #'org-element--headline-footnote-section-p)))
+ (- title-start begin) (- title-end begin))))
(org-element-put-property headline :raw-value raw-value)
(org-element-put-property headline :level level)
(org-element-put-property headline :priority priority)
@@ -1139,13 +1147,13 @@ Throw `:org-element-deferred-retry' signal at the end."
(org-element-put-property headline :todo-keyword todo)
(org-element-put-property headline :todo-type todo-type)
(org-element-put-property
- headline :footnote-section-p footnote-section-p)
- (org-element-put-property headline :archivedp archivedp)
+ headline :footnote-section-p org-element--headline-footnote-section-p)
+ (org-element-put-property headline :archivedp
org-element--headline-archivedp)
(org-element-put-property headline :commentedp commentedp)
(org-element-put-property
headline :title
(if raw-secondary-p
- (org-element-deferred-create-alias :raw-value)
+ org-element--headline-raw-value
(org-element--parse-objects
(progn (goto-char title-start)
(skip-chars-forward " \t")
@@ -1159,6 +1167,21 @@ Throw `:org-element-deferred-retry' signal at the end."
headline))))))
(throw :org-element-deferred-retry nil))
+(defconst org-element--headline-parse-title-raw
+ (org-element-deferred-create
+ nil #'org-element--headline-parse-title t)
+ "Constant holding deferred value for raw headline `:title' property.")
+
+(defconst org-element--headline-parse-title-parse
+ (org-element-deferred-create
+ nil #'org-element--headline-parse-title nil)
+ "Constant holding deferred value for parsed headline `:title' property.")
+
+(defconst org-element--headline-deferred
+ (org-element-deferred-create
+ t #'org-element--headline-deferred)
+ "Constant holding deferred value for headline `:deferred' property.")
+
(defun org-element-headline-parser (&optional _ raw-secondary-p)
"Parse a headline.
@@ -1179,8 +1202,9 @@ parsed as a secondary string, but as a plain string
instead.
Assume point is at beginning of the headline."
(save-excursion
(let* ((deferred-title-prop
- (org-element-deferred-create
- nil #'org-element--headline-parse-title raw-secondary-p))
+ (if raw-secondary-p
+ org-element--headline-parse-title-raw
+ org-element--headline-parse-title-parse))
(begin (point))
(true-level (skip-chars-forward "*"))
(end
@@ -1239,9 +1263,7 @@ Assume point is at beginning of the headline."
:secondary (alist-get
'headline
org-element-secondary-value-alist)
- :deferred
- (org-element-deferred-create
- t #'org-element--headline-deferred))))))
+ :deferred org-element--headline-deferred)))))
(defun org-element-headline-interpreter (headline contents)
"Interpret HEADLINE element as Org syntax.
@@ -1334,6 +1356,11 @@ Alter DATA by side effect."
;; Return nil.
nil))
+(defconst org-element--get-global-node-properties
+ (org-element-deferred-create
+ t #'org-element--get-global-node-properties)
+ "Constant holding `:deferred' property for org-data.")
+
(defvar org-element-org-data-parser--recurse nil)
(defun org-element-org-data-parser (&optional _)
"Parse org-data.
@@ -1378,9 +1405,7 @@ Return a new syntax node of `org-data' type containing
`:begin',
:path (buffer-file-name)
:mode 'org-data
:buffer (current-buffer)
- :deferred
- (org-element-deferred-create
- t #'org-element--get-global-node-properties))))))
+ :deferred org-element--get-global-node-properties)))))
(defun org-element-org-data-interpreter (_ contents)
"Interpret ORG-DATA element as Org syntax.
@@ -1409,8 +1434,9 @@ string instead.
Assume point is at beginning of the inline task."
(save-excursion
(let* ((deferred-title-prop
- (org-element-deferred-create
- nil #'org-element--headline-parse-title raw-secondary-p))
+ (if raw-secondary-p
+ org-element--headline-parse-title-raw
+ org-element--headline-parse-title-parse))
(begin (point))
(task-end (save-excursion
(forward-line 1)
@@ -1454,9 +1480,7 @@ Assume point is at beginning of the inline task."
'inlinetask
org-element-secondary-value-alist)
:deferred
- (and task-end
- (org-element-deferred-create
- t #'org-element--headline-deferred)))))))
+ (and task-end org-element--headline-deferred))))))
(defun org-element-inlinetask-interpreter (inlinetask contents)
"Interpret INLINETASK element as Org syntax.
@@ -6540,6 +6564,11 @@ and footnote-definition."
;; Before first headline. Assign `org-data'.
(org-element-lineage parent 'org-data t)))))))
+(defconst org-element--headline-parent-deferred
+ (org-element-deferred-create
+ t #'org-element--headline-parent-deferred)
+ "Constant holding deferred value for headline `:parent' property.")
+
(defun org-element--parse-to (pos &optional syncp time-limit)
"Parse elements in current section, down to POS.
@@ -6592,8 +6621,7 @@ the expected result."
(setq element (org-element-headline-parser nil 'fast))
(org-element-put-property
element :parent
- (org-element-deferred-create
- t #'org-element--headline-parent-deferred))
+ org-element--headline-parent-deferred)
(setq mode 'planning)
(forward-line))
(setq element (org-element-org-data-parser))
- [elpa] externals/org f97aeaa243 099/101: org-fold-core--isearch-setup: Use `add-function', (continued)
- [elpa] externals/org f97aeaa243 099/101: org-fold-core--isearch-setup: Use `add-function', ELPA Syncer, 2023/07/01
- [elpa] externals/org 55ba9f05a7 018/101: org-element-map: Refactor using `org-element-ast-map', ELPA Syncer, 2023/07/01
- [elpa] externals/org 29cb0b370b 022/101: org-element-headline-parser: Defer property drawer values, ELPA Syncer, 2023/07/01
- [elpa] externals/org 44baf8f2b8 030/101: org-element-parse-buffer: New optional argument to not force undefer, ELPA Syncer, 2023/07/01
- [elpa] externals/org 13ae9b95f8 045/101: org-narrow-to-subtree: Use org-element API, ELPA Syncer, 2023/07/01
- [elpa] externals/org 3024e933c0 053/101: org-get-buffer-tags: Switch to org-element API, ELPA Syncer, 2023/07/01
- [elpa] externals/org def4bfa9c1 055/101: org-scan-tag: Switch to pure use of `org-element-cache-map', ELPA Syncer, 2023/07/01
- [elpa] externals/org 2efc7fcfdc 058/101: org-agenda-get-scheduled: Switch to org-element API, ELPA Syncer, 2023/07/01
- [elpa] externals/org 598d7bbcf2 062/101: Remove APPT_WARNTIME text property cache, ELPA Syncer, 2023/07/01
- [elpa] externals/org 39466ecf47 065/101: org-element-cache: Do not check for deferred :parent unnecessarily, ELPA Syncer, 2023/07/01
- [elpa] externals/org 9ed7956afd 080/101: org-element: Use constant values for fixed deferred properties,
ELPA Syncer <=