branch: externals/phpinspect
commit a99f73b83d32f88408339c932d7a9440d311a3c9
Author: Hugo Thunnissen <[email protected]>
Commit: Hugo Thunnissen <[email protected]>
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.