Make LOCAL-DECLARE a macro.
authorJoe Marshall <eval.apply@gmail.com>
Sun, 7 Oct 2012 19:55:57 +0000 (12:55 -0700)
committerJoe Marshall <eval.apply@gmail.com>
Sun, 7 Oct 2012 19:55:57 +0000 (12:55 -0700)
src/runtime/mit-macros.scm
src/runtime/mit-syntax.scm
src/runtime/runtime.pkg
src/runtime/syntax-definitions.scm
src/runtime/syntax-output.scm

index 245e5869f88305ef4fdcc8e3a9e9d6114fd2b696..549effe2f91007ac7506c0a5abed3f5f2c31a315 100644 (file)
@@ -631,6 +631,17 @@ USA.
              ,r-unspecific)
            (,r-shallow-fluid-bind ,swap! ,body ,swap!)))))))
 
+(define-syntax :local-declare
+  (er-macro-transformer
+   (lambda (form rename compare)
+     compare
+     (syntax-check '(KEYWORD (* (IDENTIFIER * DATUM)) + FORM) form)
+     (let ((r-let (rename 'LET))
+          (r-declare (rename 'DECLARE)))
+       `(,r-let ()
+               (,r-declare ,@(cadr form))
+               ,@(cddr form))))))
+
 (define (unspecific-expression)
   `(,keyword:unspecific))
 
index 17522c64bf4e715f77a4d01533199168e240e8d7..6788ff5e587d38f427792a4ce9d3854981ce33af 100644 (file)
@@ -332,17 +332,6 @@ USA.
    (lambda ()
      (classify/declarations (cdr form) environment))))
 
-(define (classifier:local-declare form environment definition-environment)
-  (syntax-check '(KEYWORD (* (IDENTIFIER * DATUM)) + FORM) form)
-  (let ((body
-        (classify/body (cddr form)
-                       environment
-                       definition-environment)))
-    (make-expression-item
-     (lambda ()
-       (output/local-declare (classify/declarations (cadr form) environment)
-                            (compile-body-item body))))))
-
 (define (classify/declarations declarations environment)
   (map (lambda (declaration)
         (classify/declaration declaration environment))
index 494c163b459b9a68cd129e3b605ca11acc5256c0..86e9258836938f73efe59e98120841b7dd25ce7f 100644 (file)
@@ -4699,7 +4699,6 @@ USA.
          output/lambda
          output/let
          output/letrec
-         output/local-declare
          output/named-lambda
          output/post-process-expression
          output/runtime-reference
@@ -4742,7 +4741,6 @@ USA.
          classifier:er-macro-transformer
          classifier:let-syntax
          classifier:letrec-syntax
-         classifier:local-declare
          classifier:non-hygienic-macro-transformer
          classifier:rsc-macro-transformer
          classifier:sc-macro-transformer
@@ -4785,6 +4783,7 @@ USA.
          (let*-syntax :let*-syntax)
          (letrec :letrec)
          (letrec* :letrec*)
+         (local-declare :local-declare)
          (quasiquote :quasiquote)
          (receive :receive)
          supported-srfi-features)
index 0a1e21b5d9facf8e5ffc5a8bfec8ca738fba54de..0378104cc2d04c25f3e2e9fd93c3b533c1a58263 100644 (file)
@@ -46,7 +46,6 @@ USA.
   (define-classifier 'ER-MACRO-TRANSFORMER classifier:er-macro-transformer)
   (define-classifier 'LET-SYNTAX classifier:let-syntax)
   (define-classifier 'LETREC-SYNTAX classifier:letrec-syntax)
-  (define-classifier 'LOCAL-DECLARE classifier:local-declare)
   (define-classifier 'NON-HYGIENIC-MACRO-TRANSFORMER
     classifier:non-hygienic-macro-transformer)
   (define-classifier 'RSC-MACRO-TRANSFORMER classifier:rsc-macro-transformer)
index 272891d93b3ea3acd4fa216641326ea251fa9f0b..027741ef800e6976cef8a360f2aa593152e6e556 100644 (file)
@@ -150,9 +150,6 @@ USA.
 (define (output/runtime-reference name)
   (output/access-reference name system-global-environment))
 
-(define (output/local-declare declarations body)
-  (make-declaration declarations body))
-
 (define lambda-tag:unnamed '|#[unnamed-procedure]|)
 (define lambda-tag:let '|#[let-procedure]|)
 (define lambda-tag:fluid-let '|#[fluid-let-procedure]|)