packages: Optimize 'package-transitive-supported-systems'.

This version is 13% faster than the one above when timing:

  (fold-packages (lambda (p x)
		   (package-transitive-supported-systems p))
		 '())

* guix/packages.scm (package-transitive-supported-systems): Make
'systems' a set instead of calling 'lset-intersection' repeatedly.
This commit is contained in:
Ludovic Courtès 2018-07-02 22:15:35 +02:00
parent c729901583
commit 24420f5ffa
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 10 additions and 9 deletions

View File

@ -766,15 +766,16 @@ in INPUTS and their transitive propagated inputs."
(mlambdaq (package)
"Return the intersection of the systems supported by PACKAGE and those
supported by its dependencies."
(set->list
(fold (lambda (input systems)
(match input
((label (? package? p) . _)
(lset-intersection
string=? systems (package-transitive-supported-systems p)))
(fold set-insert systems
(package-transitive-supported-systems p)))
(_
systems)))
(package-supported-systems package)
(bag-direct-inputs (package->bag package)))))
(list->set (package-supported-systems package))
(bag-direct-inputs (package->bag package))))))
(define* (supported-package? package #:optional (system (%current-system)))
"Return true if PACKAGE is supported on SYSTEM--i.e., if PACKAGE and all its