summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2024-04-08 23:09:36 +0200
committerLudovic Courtès <ludo@gnu.org>2024-05-04 19:14:24 +0200
commitb011ef4378aa40bb25db3022906eac378472cd83 (patch)
tree87410d38a72652bc0d844823b58f56f32108e719
parent2f93e1682a02d76c59762ffaa99ee2abe4dea928 (diff)
downloadguix-patches-b011ef4378aa40bb25db3022906eac378472cd83.tar
guix-patches-b011ef4378aa40bb25db3022906eac378472cd83.tar.gz
packages: Reduce bloat induced by ‘sanitize-inputs’.
At -O1, peval does the bulk of the optimization work and it cannot reduce things like (null? (list 1 2)), unlike what happens in CPS at -O2. Thus, reduce the part of ‘sanitize-inputs’ that’s inlined. * guix/packages.scm (maybe-add-input-labels): New procedure. (sanitize-inputs): Turn into a macro; use ‘maybe-add-input-labels’. Change-Id: Id2283bb5a2f5d714722200bdcfe0b0bfa606923f
-rw-r--r--guix/packages.scm19
1 files changed, 15 insertions, 4 deletions
diff --git a/guix/packages.scm b/guix/packages.scm
index bd72b284b1..6f276160f2 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -429,15 +429,26 @@ from forcing GEXP-PROMISE."
;; <https://lists.gnu.org/archive/html/guix-devel/2017-03/msg00790.html>.
(fold delete %supported-systems '("mips64el-linux" "powerpc-linux" "riscv64-linux")))
-(define-inlinable (sanitize-inputs inputs)
- "Sanitize INPUTS by turning it into a list of name/package tuples if it's
-not already the case."
- (cond ((null? inputs) inputs)
+(define (maybe-add-input-labels inputs)
+ "Add labels to INPUTS unless it already has them."
+ (cond ((null? inputs)
+ inputs)
((and (pair? (car inputs))
(string? (caar inputs)))
inputs)
(else (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)
+ "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))))
+
(define-syntax current-location-vector
(lambda (s)
"Like 'current-source-location' but expand to a literal vector with