branch: externals/phpinspect
commit a99f73b83d32f88408339c932d7a9440d311a3c9
Author: Hugo Thunnissen <de...@hugot.nl>
Commit: Hugo Thunnissen <de...@hugot.nl>

    Use rear pointer instead of nconc to append to end of list
---
 phpinspect-pipeline.el | 27 ++++++++++++++-------------
 phpinspect-util.el     | 40 +++++++++++++++++++++++++++-------------
 test/test-util.el      |  2 +-
 3 files changed, 42 insertions(+), 27 deletions(-)

diff --git a/phpinspect-pipeline.el b/phpinspect-pipeline.el
index c684dc9ba5..c9c7cf2085 100644
--- a/phpinspect-pipeline.el
+++ b/phpinspect-pipeline.el
@@ -147,22 +147,23 @@ directories."
     (error "Function name must be a symbol, got: %s" func-name))
 
 
-  (let ((thread-name (concat "phpinspect-pipeline-" (symbol-name func-name)))
-        (statement (list func-name))
-        (incoming (gensym "incoming"))
-        (outgoing (gensym "outgoing"))
-        (inc-queue (gensym "queue"))
-        (out-queue (gensym "queue"))
-        (context-sym (gensym "context"))
-        (continue-running (gensym "continue-running"))
-        (pctx-sym (gensym "pipeline-ctx"))
-        (incoming-end (gensym "incoming-end"))
-        (end (gensym "end")))
+  (let* ((thread-name (concat "phpinspect-pipeline-" (symbol-name func-name)))
+         (statement (list func-name))
+         (statement-rear statement)
+         (incoming (gensym "incoming"))
+         (outgoing (gensym "outgoing"))
+         (inc-queue (gensym "queue"))
+         (out-queue (gensym "queue"))
+         (context-sym (gensym "context"))
+         (continue-running (gensym "continue-running"))
+         (pctx-sym (gensym "pipeline-ctx"))
+         (incoming-end (gensym "incoming-end"))
+         (end (gensym "end")))
 
       (when local-ctx
-        (setq statement (nconc statement (list context-sym))))
+        (setq statement-rear (setcdr statement-rear (cons context-sym nil))))
 
-      (setq statement (nconc statement (list incoming)))
+      (setq statement-rear (setcdr statement-rear (cons incoming nil)))
 
       `(let ((,inc-queue ,queue)
              (,out-queue ,consumer-queue)
diff --git a/phpinspect-util.el b/phpinspect-util.el
index f79b6c8a5e..3c04f7f7fb 100644
--- a/phpinspect-util.el
+++ b/phpinspect-util.el
@@ -179,7 +179,10 @@ it evaluates to a non-nil value."
          (sequence-pos 0)
          (sequence-sym (gensym))
          (match-sym (gensym))
-         checkers key value)
+         (match-rear-sym (gensym))
+         (checkers (cons nil nil))
+         (checkers-rear checkers)
+         key value)
 
     (while (setq key (pop pattern))
       (unless (keywordp key)
@@ -190,26 +193,37 @@ it evaluates to a non-nil value."
 
       (cond ((eq key :m)
              (unless (eq value '*)
-               (setq checkers
-                     (nconc checkers (list `(equal ,value (elt ,sequence-sym 
,sequence-pos)))))))
+               (setq checkers-rear
+                     (setcdr checkers-rear
+                             (cons `(equal ,value (elt ,sequence-sym 
,sequence-pos)) nil)))))
             ((eq key :f)
-             (setq checkers
-                   (nconc
-                    checkers (list
-                              (if (symbolp value)
-                                  `(,value (elt ,sequence-sym ,sequence-pos))
-                                `(funcall ,value (elt ,sequence-sym 
,sequence-pos)))))))
+             (setq checkers-rear
+                   (setcdr
+                    checkers-rear
+                    (cons
+                     (if (symbolp value)
+                         `(,value (elt ,sequence-sym ,sequence-pos))
+                       `(funcall ,value (elt ,sequence-sym ,sequence-pos)))
+                     nil))))
             (t (error "Invalid keyword: %s" key)))
 
-      (setq checkers (nconc checkers (list `(setq ,match-sym (nconc ,match-sym 
(list (elt ,sequence-sym ,sequence-pos)))))))
+      (setq checkers-rear
+            (setcdr checkers-rear
+                    (cons `(setq ,match-rear-sym
+                                 (setcdr ,match-rear-sym
+                                         (cons (elt ,sequence-sym 
,sequence-pos) nil)))
+                          nil)))
 
       (setq sequence-pos (+ sequence-pos 1)))
 
-    `(let ((,sequence-sym ,sequence)
-           ,match-sym)
+    (setq checkers (cdr checkers))
+
+    `(let* ((,sequence-sym ,sequence)
+            (,match-sym (cons nil nil))
+            (,match-rear-sym ,match-sym))
        (and (= ,sequence-length (length ,sequence))
             ,@checkers)
-       ,match-sym)))
+       (cdr ,match-sym))))
 
 (defun phpinspect--pattern-concat (pattern1 pattern2)
   (let* ((pattern1-sequence-length (/ (length (phpinspect--pattern-code 
pattern1)) 2)))
diff --git a/test/test-util.el b/test/test-util.el
index 63ead980d2..c10e7bd360 100644
--- a/test/test-util.el
+++ b/test/test-util.el
@@ -1,4 +1,4 @@
-;; test-util.el --- Unit tests for phpinspect.el  -*- lexical-binding: t; -*-
+;;; test-util.el --- Unit tests for phpinspect.el  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 

Reply via email to