~ chicken-core (chicken-5) 0bc75263a0f69b6a661d2a1a91deaea06aee3a90


commit 0bc75263a0f69b6a661d2a1a91deaea06aee3a90
Author:     Evan Hanson <evhan@foldling.org>
AuthorDate: Sat Apr 28 22:52:13 2018 +0200
Commit:     Peter Bex <peter@more-magic.net>
CommitDate: Sun Apr 29 00:02:36 2018 +0200

    Add `current-module' helper macro to "chicken.module"
    
    This special form returns the name of the module currently being
    compiled (or evaluated) as a symbol.
    
    Signed-off-by: Peter Bex <peter@more-magic.net>

diff --git a/chicken-install.scm b/chicken-install.scm
index 74108643..25f735ac 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -929,7 +929,7 @@
 		  (sprintf "Failed to import from `~a'" file))
 	       (eval `(import-syntax ,(string->symbol module-name))))))
          files))
-      (print "generating database")
+      (print "generating database ...")
       (let ((db
              (sort
               (concatenate
@@ -938,14 +938,12 @@
                   (and-let* ((mod (cdr m))
                              (mname (##sys#module-name mod))
                              ((not (memq mname +internal-modules+))))
-                    (print* " " mname)
                     (let-values (((_ ve se) (##sys#module-exports mod)))
                       (append (map (lambda (se) (list (car se) 'syntax mname)) se)
                               (map (lambda (ve) (list (car ve) 'value mname)) ve)))))
                 ##sys#module-table))
               (lambda (e1 e2)
                 (string<? (symbol->string (car e1)) (symbol->string (car e2)))))))
-        (newline)
         (with-output-to-file dbfile
           (lambda ()
             (for-each (lambda (x) (write x) (newline)) db)))
diff --git a/expand.scm b/expand.scm
index d3fcdbbe..d0a7aca6 100644
--- a/expand.scm
+++ b/expand.scm
@@ -1184,6 +1184,14 @@
 		    (syntax-error-hook
 		     'define-interface "invalid exports" (caddr x))))))))))))
 
+(##sys#extend-macro-environment
+ 'current-module '()
+ (##sys#er-transformer
+  (lambda (x r c)
+    (##sys#check-syntax 'current-module x '(_))
+    (and-let* ((mod (##sys#current-module)))
+      `(##core#quote ,(##sys#module-name mod))))))
+
 ;; The chicken.module syntax environment
 (define ##sys#chicken.module-macro-environment (##sys#macro-environment))
 
diff --git a/tests/module-tests.scm b/tests/module-tests.scm
index 83f142d0..ec447e45 100644
--- a/tests/module-tests.scm
+++ b/tests/module-tests.scm
@@ -372,6 +372,14 @@
  "Internal getter returns same thing"
  3 (get-count))
 
+(test-assert
+ (not (current-module)))
+
+(test-assert
+ (module m33 ()
+   (import (scheme) (chicken module))
+   (eq? (current-module) 'm33)))
+
 (test-end "modules")
 
 (test-exit)
Trap