guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

08/22: gexp: Add 'sexp->gexp'.


From: guix-commits
Subject: 08/22: gexp: Add 'sexp->gexp'.
Date: Tue, 30 Mar 2021 17:00:15 -0400 (EDT)

civodul pushed a commit to branch core-updates
in repository guix.

commit da86e90efe796ee68ee0a5ccaf46f45cadb52336
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Sun Feb 28 21:29:53 2021 +0100

    gexp: Add 'sexp->gexp'.
    
    * guix/gexp.scm (sexp->gexp): New procedure.
    * tests/gexp.scm ("sexp->gexp"): New test.
---
 guix/gexp.scm  | 11 +++++++++++
 tests/gexp.scm |  7 +++++++
 2 files changed, 18 insertions(+)

diff --git a/guix/gexp.scm b/guix/gexp.scm
index a4e6590..526a21f 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -39,6 +39,7 @@
   #:use-module (ice-9 match)
   #:export (gexp
             gexp?
+            sexp->gexp
             with-imported-modules
             with-extensions
             let-system
@@ -1844,6 +1845,16 @@ of name/gexp-input tuples, and OUTPUTS, a list of 
strings."
 
           (ungexp body))))
 
+(define (sexp->gexp sexp)
+  "Turn SEXP into a gexp without any references.
+
+Using this is a way for the caller to tell that SEXP doesn't need to be
+scanned for file-like objects, thereby reducing processing costs.  This is
+particularly useful if SEXP is a long list or a deep tree."
+  (make-gexp '() '() '()
+             (lambda () sexp)
+             (source-properties sexp)))
+
 (define* (gexp->script name exp
                        #:key (guile (default-guile))
                        (module-path %load-path)
diff --git a/tests/gexp.scm b/tests/gexp.scm
index 834e78b..64c3107 100644
--- a/tests/gexp.scm
+++ b/tests/gexp.scm
@@ -96,6 +96,13 @@
          (null? (gexp-inputs exp))
          (gexp->sexp* exp))))
 
+(test-equal "sexp->gexp"
+  '(a b (c d) e)
+  (let ((exp (sexp->gexp '(a b (c d) e))))
+    (and (gexp? exp)
+         (null? (gexp-inputs exp))
+         (gexp->sexp* exp))))
+
 (test-equal "unquote"
   '(display `(foo ,(+ 2 3)))
   (let ((exp (gexp (display `(foo ,(+ 2 3))))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]