diff options
author | Ludovic Courtès <ludo@gnu.org> | 2015-03-22 23:09:43 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2015-03-22 23:18:31 +0100 |
commit | 607e1b51f4b473e69373b9887555d7f6abd4cf10 (patch) | |
tree | b40df89ba2cb1e9a31f1ce97850802d9e8c16cf7 | |
parent | accb682c5027cb91104cce7786f9dc4403adf51c (diff) | |
download | guix-607e1b51f4b473e69373b9887555d7f6abd4cf10.tar.gz |
gexp: Ignore nested gexps in macro expansion.
Before that, the 'references' and 'natives' or the outer gexp in an expression like #~#+#~#$coreutils would include those of the inner gexp. * guix/gexp.scm (gexp)[collect-escapes]: Ignore everything below 'ungexp-native' or 'ungexp-native-splicing'. [collect-native-escapes]: Ignore everything below 'ungexp' or 'ungexp-splicing'.
-rw-r--r-- | guix/gexp.scm | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/guix/gexp.scm b/guix/gexp.scm index 218914c4b4..3081ab0653 100644 --- a/guix/gexp.scm +++ b/guix/gexp.scm @@ -474,13 +474,20 @@ and in the current monad setting (system type, etc.)" ;; Return all the 'ungexp' present in EXP. (let loop ((exp exp) (result '())) - (syntax-case exp (ungexp ungexp-splicing) + (syntax-case exp (ungexp + ungexp-splicing + ungexp-native + ungexp-native-splicing) ((ungexp _) (cons exp result)) ((ungexp _ _) (cons exp result)) ((ungexp-splicing _ ...) (cons exp result)) + ((ungexp-native _ ...) + result) + ((ungexp-native-splicing _ ...) + result) ((exp0 exp ...) (let ((result (loop #'exp0 result))) (fold loop result #'(exp ...)))) @@ -491,13 +498,20 @@ and in the current monad setting (system type, etc.)" ;; Return all the 'ungexp-native' forms present in EXP. (let loop ((exp exp) (result '())) - (syntax-case exp (ungexp-native ungexp-native-splicing) + (syntax-case exp (ungexp + ungexp-splicing + ungexp-native + ungexp-native-splicing) ((ungexp-native _) (cons exp result)) ((ungexp-native _ _) (cons exp result)) ((ungexp-native-splicing _ ...) (cons exp result)) + ((ungexp _ ...) + result) + ((ungexp-splicing _ ...) + result) ((exp0 exp ...) (let ((result (loop #'exp0 result))) (fold loop result #'(exp ...)))) |