Work around bug that makes DECLARE and SYNTAX-RULES not mix.
authorTaylor R Campbell <campbell@mumble.net>
Sun, 5 Sep 2010 18:23:04 +0000 (18:23 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Sun, 5 Sep 2010 18:23:04 +0000 (18:23 +0000)
src/runtime/mit-syntax.scm
src/runtime/syntax-declaration.scm

index 79fa16a1a6440307dbea260c84210a9f329bab33..478122779d9e792dcbcc3ec126825b78865b8867 100644 (file)
@@ -344,13 +344,13 @@ USA.
 
 (define (classifier:declare form environment definition-environment)
   definition-environment
-  (syntax-check '(KEYWORD * (SYMBOL * DATUM)) form)
+  (syntax-check '(KEYWORD * (IDENTIFIER * DATUM)) form)
   (make-declaration-item
    (lambda ()
      (classify/declarations (cdr form) environment))))
 
 (define (classifier:local-declare form environment definition-environment)
-  (syntax-check '(KEYWORD (* (SYMBOL * DATUM)) + FORM) form)
+  (syntax-check '(KEYWORD (* (IDENTIFIER * DATUM)) + FORM) form)
   (let ((body
         (classify/body (cddr form)
                        environment
index 19e4bdac50247edb9c4cddf4bd4e7525d2c2a4ea..f1cbbecc3c6f448c4461fbe44c3035c64f849f7a 100644 (file)
@@ -41,7 +41,14 @@ USA.
 (define (map-declaration-identifiers procedure declaration)
   (if (not (pair? declaration))
       (error "Ill-formed declaration:" declaration))
-  (let ((entry (assq (car declaration) known-declarations)))
+  (let* ((declaration
+         ;++ This is a kludge -- rather than strip syntactic closures,
+         ;++ it should be aware of the environment.
+         (if (symbol? (car declaration))
+             declaration
+             (cons (strip-syntactic-closures (car declaration))
+                   (cdr declaration))))
+        (entry (assq (car declaration) known-declarations)))
     (if (and entry (syntax-match? (cadr entry) (cdr declaration)))
        ((cddr entry) declaration procedure)
        (begin