Guarantee that capture-syntactic-environment preserves error context.
authorChris Hanson <org/chris-hanson/cph>
Wed, 7 Mar 2018 04:48:07 +0000 (20:48 -0800)
committerChris Hanson <org/chris-hanson/cph>
Wed, 7 Mar 2018 04:48:07 +0000 (20:48 -0800)
src/runtime/syntax.scm

index a5517186917c56dd2031da9e2ae1990071091d37..8ccc853525317b4ff775fa5e0e516e2c0a30ecf9 100644 (file)
@@ -296,22 +296,28 @@ USA.
   (make-unsettable-parameter unspecific))
 
 (define (with-error-context form senv hist thunk)
-  (parameterize* (list (cons error-context (list form senv hist)))
+  (parameterize* (list (cons error-context (vector form senv hist)))
                 thunk))
 
 ;;; External signaller for macros.
 (define (syntax-error message . irritants)
   (let ((context (error-context)))
-    (error:syntax (car context) (cadr context) (caddr context)
-                 message irritants)))
+    (error:syntax (vector-ref context 0)
+                 (vector-ref context 1)
+                 (vector-ref context 2)
+                 message
+                 irritants)))
 \f
 ;;;; Utilities
 
-(define (capture-syntactic-environment expander)
+(define (capture-syntactic-environment procedure)
   `(,(classifier->keyword
       (lambda (form senv hist)
-       (declare (ignore form))
-       (classify-form (expander senv) senv hist)))))
+       (classify-form (with-error-context form senv hist
+                        (lambda ()
+                          (procedure senv)))
+                      senv
+                      hist)))))
 
 (define (reverse-syntactic-environments senv procedure)
   (capture-syntactic-environment