diff options
-rw-r--r-- | guix/gexp.scm | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/guix/gexp.scm b/guix/gexp.scm index cad57f62ca..8cd44ba534 100644 --- a/guix/gexp.scm +++ b/guix/gexp.scm @@ -757,19 +757,28 @@ attribute that is traversed." (append (let ((attribute (self-attribute gexp))) (validate gexp attribute) attribute) - (append-map (match-lambda - (($ <gexp-input> (? gexp? exp)) - (gexp-attribute exp self-attribute - #:validate validate)) - (($ <gexp-input> (lst ...)) - (append-map (lambda (item) - (gexp-attribute item self-attribute - #:validate - validate)) - lst)) - (_ - '())) - (gexp-references gexp))) + (reverse + (fold (lambda (input result) + (match input + (($ <gexp-input> (? gexp? exp)) + (append (gexp-attribute exp self-attribute + #:validate validate) + result)) + (($ <gexp-input> (lst ...)) + (fold/tree (lambda (obj result) + (match obj + ((? gexp? exp) + (append (gexp-attribute exp self-attribute + #:validate validate) + result)) + (_ + result))) + result + lst)) + (_ + result))) + '() + (gexp-references gexp)))) equal?) '())) ;plain Scheme data type |