gexp: Properly report substitution errors.
authorLudovic Courtès <ludo@gnu.org>
Sun, 1 Jan 2017 17:17:29 +0000 (18:17 +0100)
committerLudovic Courtès <ludo@gnu.org>
Sun, 1 Jan 2017 22:30:30 +0000 (23:30 +0100)
* guix/gexp.scm (gexp)[substitute-ungexp]: Wrap body in 'with-syntax'
and pass EXP as the last argument to 'syntax-error'.
[substitute-ungexp-splicing]: Pass EXP as the last argument to
'syntax-error'.

guix/gexp.scm

index 6f63afe..79a7b18 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -846,9 +846,9 @@ environment."
       (match (assoc exp substs)
         ((_ id)
          id)
-        (_
-         #'(syntax-error "error: no 'ungexp' substitution"
-                         #'ref))))
+        (_                                        ;internal error
+         (with-syntax ((exp exp))
+           #'(syntax-error "error: no 'ungexp' substitution" exp)))))
 
     (define (substitute-ungexp-splicing exp substs)
       (syntax-case exp ()
@@ -860,7 +860,7 @@ environment."
                         #,(substitute-references #'(rest ...) substs))))
            (_
             #'(syntax-error "error: no 'ungexp-splicing' substitution"
-                            #'ref))))))
+                            exp))))))
 
     (define (substitute-references exp substs)
       ;; Return a variant of EXP where all the cars of SUBSTS have been