~ chicken-core (chicken-5) 9767d784c45621732bbdd080260cfc011cd5da7b


commit 9767d784c45621732bbdd080260cfc011cd5da7b
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Thu Dec 10 16:22:47 2009 +0100
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Thu Dec 10 16:22:47 2009 +0100

    - deprecated `define-compiled-syntax'
    - `define-syntax' is now a core macro and can be renamed and reexported

diff --git a/chicken-syntax.scm b/chicken-syntax.scm
index b7ad3133..31db6dff 100644
--- a/chicken-syntax.scm
+++ b/chicken-syntax.scm
@@ -1066,6 +1066,15 @@
       (,(r 'define) ,@(cdr form))))))
 
 
+;;; compiled syntax (DEPRECATED)
+
+(##sys#extend-macro-environment
+ 'define-compiled-syntax '()
+ (##sys#er-transformer
+  (lambda (form r c)
+    `(,(r 'define-syntax) ,@(cdr form)))))
+
+
 ;;; use
 
 (##sys#extend-macro-environment
diff --git a/compiler.scm b/compiler.scm
index 4010ad8f..3251ed86 100644
--- a/compiler.scm
+++ b/compiler.scm
@@ -5,8 +5,8 @@
 ;
 ;
 ;-----------------------------------------------------------------------------------------------------------
-; Copyright (c) 2000-2007, Felix L. Winkelmann
 ; Copyright (c) 2008-2009, The Chicken Team
+; Copyright (c) 2000-2007, Felix L. Winkelmann
 ; All rights reserved.
 ;
 ; Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
@@ -141,10 +141,7 @@
 ; (##core#app <exp> {<exp>})
 ; ([##core#]syntax <exp>)
 ; (<exp> {<exp>})
-; (define-syntax <symbol> <expr>)
-; (define-syntax (<symbol> . <llist>) <expr> ...)
-; (define-compiled-syntax <symbol> <expr>)
-; (define-compiled-syntax (<symbol> . <llist>) <expr> ...)
+; (##core#define-syntax <symbol> <expr>)
 ; (##core#define-compiler-syntax <symbol> <expr>)
 ; (##core#let-compiler-syntax ((<symbol> <expr>) ...) <expr> ...)
 ; (##core#module <symbol> #t | (<name> | (<name> ...) ...) <body>)
@@ -720,7 +717,7 @@
 			   (##sys#canonicalize-body (cddr x) se2 compiler-syntax-enabled)
 			   e se2 dest)))
 			       
-		       ((define-syntax define-compiled-syntax)
+		       ((##core#define-syntax)
 			(##sys#check-syntax
 			 (car x) x
 			 (if (pair? (cadr x))
@@ -738,8 +735,7 @@
 			   (##sys#current-environment)
 			   (##sys#er-transformer (eval/meta body)))
 			  (walk
-			   (if (or ##sys#enable-runtime-macros
-				   (eq? 'define-compiled-syntax (car x)))
+			   (if ##sys#enable-runtime-macros
 			       `(##sys#extend-macro-environment
 				 ',var
 				 (##sys#current-environment)
@@ -1332,7 +1328,7 @@
 	(let ([fds (cdr spec)])
 	  (if (every string? fds)
 	      (set! foreign-declarations (append foreign-declarations fds))
-	      (syntax-error "invalid declaration" spec) ) ) )
+	      (syntax-error 'declare "invalid declaration" spec) ) ) )
        ((c-options)
 	(emit-control-file-item `(c-options ,@(strip (cdr spec)))) )
        ((link-options)
diff --git a/eval.scm b/eval.scm
index 7f539917..5ed213dc 100644
--- a/eval.scm
+++ b/eval.scm
@@ -1,7 +1,7 @@
 ;;;; eval.scm - Interpreter for CHICKEN
 ;
-; Copyright (c) 2000-2007, Felix L. Winkelmann
 ; Copyright (c) 2008-2009, The Chicken Team
+; Copyright (c) 2000-2007, Felix L. Winkelmann
 ; All rights reserved.
 ;
 ; Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
@@ -619,17 +619,9 @@
 			     (##sys#canonicalize-body (cddr x) se2 #f)
 			     e #f tf cntr se2)))
 			       
-			 ((define-syntax define-compiled-syntax)
-			  (##sys#check-syntax
-			   'define-syntax x
-			   (if (and (pair? (cdr x)) (pair? (cadr x)))
-			       '(_ (variable . lambda-list) . #(_ 1))
-			       '(_ variable _))
-			   #f se)
-			  (let* ((var (if (pair? (cadr x)) (caadr x) (cadr x)))
-				 (body (if (pair? (cadr x))
-					   `(,(rename 'lambda se) ,(cdadr x) ,@(cddr x))
-					   (caddr x)))
+			 ((##core#define-syntax)
+			  (let* ((var (cadr x))
+				 (body (caddr x))
 				 (name (rename var se)))
 			    (##sys#register-syntax-export 
 			     name (##sys#current-module)
diff --git a/expand.scm b/expand.scm
index d575f777..1bf1984c 100644
--- a/expand.scm
+++ b/expand.scm
@@ -497,8 +497,9 @@
 		    (loop 
 		     (cdr body) 
 		     (cons (if (pair? (cadr def))
-			       `(define-syntax ,(caadr def)
-				  (,(macro-alias 'lambda se) ,(cdadr def) ,@(cddr def)))
+			       `(,(macro-alias 'define-syntax se)
+				 ,(caadr def)
+				 (,(macro-alias 'lambda se) ,(cdadr def) ,@(cddr def)))
 			       def)
 			   defs) 
 		     #f)))
@@ -532,7 +533,8 @@
 					       (##sys#expand-curried-define head (cddr x) se))) ]
 				 [else
 				  (##sys#check-syntax
-				   'define x '(define (variable . lambda-list) . #(_ 1)) #f se)
+				   'define x
+				   '(define (variable . lambda-list) . #(_ 1)) #f se)
 				  (loop rest
 					(cons (car head) vars)
 					(cons `(##core#lambda ,(cdr head) ,@(cddr x)) vals)
@@ -972,6 +974,25 @@
 	       (##sys#check-syntax 'define body '#(_ 1))
 	       (loop (list (car head) `(,(r 'lambda) ,(cdr head) ,@body))))))))))
 
+(##sys#extend-macro-environment
+ 'define-syntax
+ '()
+ (##sys#er-transformer
+  (lambda (form r c)
+    (let ((head (cadr form))
+	  (body (cddr form)) )
+      (cond ((not (pair? head))
+	     (##sys#check-syntax 'define-syntax head 'symbol)
+	     (##sys#check-syntax 'define-syntax body '#(_ 1))
+	     (##sys#register-export head (##sys#current-module))
+	     `(##core#define-syntax ,head ,(car body)))
+	    (else
+	     (##sys#check-syntax 'define-syntax head '(_ . lambda-list))
+	     (##sys#check-syntax 'define-syntax body '#(_ 1))
+	     `(##core#define-syntax 
+	       ,(car head)
+	       (,(r 'lambda) ,(cdr head) ,@body))))))))
+
 (##sys#extend-macro-environment
  'and
  '()
diff --git a/manual/Modules and macros b/manual/Modules and macros
index 483b5b0d..73f02a65 100644
--- a/manual/Modules and macros	
+++ b/manual/Modules and macros	
@@ -48,14 +48,6 @@ The effect of destructively modifying the s-expression passed to a
 transformer procedure is undefined.
 
 
-==== define-compiled-syntax
-
-<macro>(define-compiled-syntax IDENTIFIER TRANSFORMER)</macro>
-
-Equivalent to {{define-syntax}}, but when compiled, will also define the macro
-at runtime.
-
-
 ==== syntax
 
 <macro>(syntax EXPRESSION)</macro>
diff --git a/tests/module-tests.scm b/tests/module-tests.scm
index 7372423d..816030b7 100644
--- a/tests/module-tests.scm
+++ b/tests/module-tests.scm
@@ -38,7 +38,7 @@
 
 (module baz ((x s:list))
   (import (prefix scheme s:))
-  (define-syntax x
+  (s:define-syntax x
     (syntax-rules ()
       ((_ x) (s:list x)))))
 
diff --git a/tests/syntax-tests.scm b/tests/syntax-tests.scm
index b36d5fc7..95ac3334 100644
--- a/tests/syntax-tests.scm
+++ b/tests/syntax-tests.scm
@@ -371,3 +371,16 @@
 ;;; canonicalization of body captures 'begin (reported by Abdulaziz Ghuloum)
 
 (let ((begin (lambda (x y) (bomb)))) 1 2)
+
+
+;;; redefinition of defining forms
+
+(module m0001 (foo bar)
+  (import (prefix scheme s:))
+  (s:define-syntax foo (syntax-rules () ((_ x) (s:list x))))
+  (s:define bar 99))
+
+(module m0002 ()
+  (import scheme m0001 extras)
+  (pp (foo bar)))
+
Trap