civodul pushed a commit to branch master
in repository guix.

commit 402d0a9b9d290a2e3c549932c8d7262622c58ce1
Author: Ludovic Courtès <[email protected]>
AuthorDate: Sun Apr 14 16:13:01 2024 +0200

    packages: Reduce code bloat due to list allocation in input fields.
    
    * guix/packages.scm (add-input-labels): New procedure.
    (sanitize-inputs): Add case for (list …).
    
    Change-Id: Ice8241508ded51efd38867b97ca19c262b8c4363
---
 guix/packages.scm | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/guix/packages.scm b/guix/packages.scm
index cd5df9130b..4385e4f930 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -438,16 +438,26 @@ from forcing GEXP-PROMISE."
          inputs)
         (else (map add-input-label inputs))))
 
+(define (add-input-labels . inputs)
+  "Add labels to all of INPUTS."
+  (map add-input-label inputs))
+
 (define-syntax sanitize-inputs
   ;; This is written as a macro rather than as a 'define-inlinable' procedure
   ;; because as of Guile 3.0.9, peval can handle (null? '()) but not
   ;; (null? (list x y z)); that residual 'null?' test contributes to code
   ;; bloat.
-  (syntax-rules (quote)
+  (syntax-rules (quote list)
     "Sanitize INPUTS by turning it into a list of name/package tuples if it's
 not already the case."
     ((_ '()) '())
-    ((_ inputs) (maybe-add-input-labels inputs))))
+    ((_ (list args ...))
+     ;; As of 3.0.9, (list ...) is open-coded, which can lead to a long list
+     ;; of instructions.  To reduce code bloat in package modules where input
+     ;; fields may create such lists, move list allocation to the callee.
+     (add-input-labels args ...))
+    ((_ inputs)
+     (maybe-add-input-labels inputs))))
 
 (define-syntax current-location-vector
   (lambda (s)

Reply via email to