diff options
author | Ludovic Courtès <ludo@gnu.org> | 2024-04-08 23:09:36 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2024-05-04 19:14:24 +0200 |
commit | b011ef4378aa40bb25db3022906eac378472cd83 (patch) | |
tree | 87410d38a72652bc0d844823b58f56f32108e719 | |
parent | 2f93e1682a02d76c59762ffaa99ee2abe4dea928 (diff) | |
download | guix-b011ef4378aa40bb25db3022906eac378472cd83.tar.gz guix-b011ef4378aa40bb25db3022906eac378472cd83.zip |
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.scm | 19 |
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 |