~ chicken-core (chicken-5) bed246d421d88fa31dc2c92f3a6b3f500d0e4554


commit bed246d421d88fa31dc2c92f3a6b3f500d0e4554
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Thu Mar 25 08:45:02 2010 +0100
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Thu Mar 25 08:45:02 2010 +0100

    include-syntax for modules

diff --git a/expand.scm b/expand.scm
index a64dbb5a..0f51aa29 100644
--- a/expand.scm
+++ b/expand.scm
@@ -1372,7 +1372,12 @@
       ,(if (eq? '* (##sys#strip-syntax (caddr x))) 
 	   #t 
 	   (caddr x))
-      ,@(cdddr x)))))
+      ,@(let ((body (cdddr x)))
+	  (if (and (pair? body) 
+		   (null? (cdr body))
+		   (string? (car body)))
+	      `((##core#include ,(car body)))
+	      body))))))
 
 (##sys#extend-macro-environment
  'begin-for-syntax
diff --git a/manual/Modules and macros b/manual/Modules and macros
index 3a7035ae..2c33a089 100644
--- a/manual/Modules and macros	
+++ b/manual/Modules and macros	
@@ -240,6 +240,7 @@ CHICKEN's module system has the following features and shortcomings:
 ==== module
 
 <macro>(module NAME (EXPORT ...) BODY ...)</macro><br>
+<macro>(module NAME (EXPORT ...) FILENAME)</macro>
 <macro>(module NAME * BODY ...)</macro>
 
 Defines a module with the name {{NAME}}, a set of exported bindings
@@ -252,8 +253,11 @@ the toplevel or in other modules. The latter case exports
 remaining identifiers in the list to be visible in the expansion of
 the macro (this is a hint to the module expander to export bindings
 referenced by syntax-definitions which make use of them, but which
-would normally be internal to the module - that allows some
-optimization and also records).
+would normally be internal to the module - which gives more
+opportunities for optimization).
+
+When the {{BODY}} consists of a single string, it is handled
+as {{(include FILENAME)}}.
 
 Nested modules, modules not at toplevel (i.e. local modules) or
 mutually recursive modules are not supported.
@@ -270,8 +274,11 @@ will export all definitions.
 Note that the module system is only a device for controlling the
 mapping of identifiers to value or syntax bindings. Modules do not
 instantiate separate environments that contain their own bindings, as
-do many other module systems. Redefinition of value or syntax bindings
-will modify the original, imported definition.
+do many other module systems. Redefinition or assignment of value or
+syntax bindings will modify the original, imported definition.
+
+Syntax expansions may result in module-definitions, but must be
+at toplevel.
 
 
 ==== export
Trap