emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/phpinspect 7c76cbcc54 2/2: Use rear pointer to append p


From: ELPA Syncer
Subject: [elpa] externals/phpinspect 7c76cbcc54 2/2: Use rear pointer to append parsed tokens
Date: Mon, 14 Aug 2023 06:58:54 -0400 (EDT)

branch: externals/phpinspect
commit 7c76cbcc54f5ba398159d4a03d0a0bff78b00c2c
Author: Hugo Thunnissen <devel@hugot.nl>
Commit: Hugo Thunnissen <devel@hugot.nl>

    Use rear pointer to append parsed tokens
---
 benchmarks/appendage.el | 31 +++++++++++++++++++++++++++++++
 phpinspect-parser.el    | 17 ++++++++---------
 2 files changed, 39 insertions(+), 9 deletions(-)

diff --git a/benchmarks/appendage.el b/benchmarks/appendage.el
new file mode 100644
index 0000000000..f197955237
--- /dev/null
+++ b/benchmarks/appendage.el
@@ -0,0 +1,31 @@
+
+
+
+(message "20000 appendages using nconc")
+(garbage-collect)
+(benchmark
+ 1 '(let (list)
+      (dotimes (i 20000)
+        (setq list (nconc list (list i))))
+
+      list))
+
+(message "20000 appendages using push + nreverse")
+(garbage-collect)
+(benchmark
+ 1 '(let (list)
+      (dotimes (i 20000)
+        (push i list))
+
+      (nreverse list)))
+
+(message "20000 appendages using rear pointer")
+(garbage-collect)
+(benchmark
+ 1 '(let* ((list (cons nil nil))
+           (rear list))
+
+      (dotimes (i 20000)
+        (setq rear (setcdr rear (cons i nil))))
+
+      (cdr list)))
diff --git a/phpinspect-parser.el b/phpinspect-parser.el
index 451aa9850f..34561a25e5 100644
--- a/phpinspect-parser.el
+++ b/phpinspect-parser.el
@@ -153,8 +153,10 @@ token is \";\", which marks the end of a statement in PHP."
                                delimiter-predicate)))
     `(defsubst ,(phpinspect-parser-func-name name "simple") (buffer max-point 
&optional skip-over continue-condition &rest _ignored)
        (with-current-buffer buffer
-         (let (tokens token
-                      (delimiter-predicate (when (functionp 
,delimiter-predicate) ,delimiter-predicate)))
+         (let* ((tokens (cons ,tree-type nil))
+                (tokens-rear tokens)
+                token
+                (delimiter-predicate (when (functionp ,delimiter-predicate) 
,delimiter-predicate)))
            (when skip-over (forward-char skip-over))
            (while (and (< (point) max-point)
                        (if continue-condition (funcall continue-condition) t)
@@ -166,13 +168,9 @@ token is \";\", which marks the end of a statement in PHP."
                         `((looking-at (,(phpinspect-handler-regexp-func-name 
handler)))
                           (setq token (,(phpinspect-handler-func-name handler) 
(match-string 0) max-point))
                           (when token
-                            (if (null tokens)
-                                (setq tokens (list token))
-                              (progn
-                                (nconc tokens (list token)))))))
+                            (setq tokens-rear (setcdr tokens-rear (cons token 
nil))))))
                       handlers)
                    (t (forward-char))))
-           (push ,tree-type tokens)
 
            ;; Return
            tokens)))))
@@ -186,7 +184,8 @@ is able to reuse an already parsed tree."
                                delimiter-predicate)))
     `(defsubst ,(phpinspect-parser-func-name name "incremental") (context 
buffer max-point &optional skip-over continue-condition root)
        (with-current-buffer buffer
-         (let* ((tokens (list ,tree-type))
+         (let* ((tokens (cons ,tree-type nil))
+                (tokens-rear tokens)
                 (root-start (point))
                 (bmap (phpinspect-pctx-bmap context))
                 (previous-bmap (phpinspect-pctx-previous-bmap context))
@@ -246,7 +245,7 @@ is able to reuse an already parsed tree."
                        handlers)
                     (t (forward-char)))
               (when token
-                (nconc tokens (list token))
+                (setq tokens-rear (setcdr tokens-rear (cons token nil)))
                 (setq token nil))))
            (when root
              (phpinspect-pctx-register-token context tokens root-start 
(point)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]