~ chicken-core (chicken-5) c3a8576ac8e64b1c07336ce7eb2ca958f8569a35
commit c3a8576ac8e64b1c07336ce7eb2ca958f8569a35
Author: Evan Hanson <evhan@foldling.org>
AuthorDate: Sun Jan 3 21:18:11 2016 +1300
Commit: Evan Hanson <evhan@foldling.org>
CommitDate: Tue Mar 8 22:52:32 2016 +1300
Require imported libraries
diff --git a/modules.scm b/modules.scm
index b30753d9..d0acb944 100644
--- a/modules.scm
+++ b/modules.scm
@@ -741,9 +741,12 @@
(import-env (append vsv (import-env)))
(macro-env (append vss (macro-env)))
(let ((unit (module-unit mod)))
- (if (and unit load?)
- `(##core#require-extension (,unit) #f)
- '(##core#undefined)))))
+ (cond ((not load?)
+ '(##core#undefined))
+ ((symbol? unit)
+ `(##core#require-extension (,unit) #f))
+ (else
+ `(##core#require-extension (,name) #f))))))
(cdr x))))))
(define (module-rename sym prefix)
diff --git a/tests/meta-syntax-test.scm b/tests/meta-syntax-test.scm
index 2f4b1c91..1b05ee98 100755
--- a/tests/meta-syntax-test.scm
+++ b/tests/meta-syntax-test.scm
@@ -1,5 +1,14 @@
;;;; meta-syntax-test.scm
+;;
+;; A module's syntax definitions should be accessible through either of
+;; the following import forms:
+;;
+;; (import-for-syntax (foo)) ; meta environment
+;;
+;; (begin-for-syntax ; compiler environment
+;; (import-syntax (foo))) ; note that `import` will not work here
+;;
(module foo (bar listify)
(import scheme chicken)
@@ -20,12 +29,23 @@
(lambda (e r c)
(call-it-123 list)))))
-(module foo-usage (foo-user)
+(module test-import-for-syntax (test)
(import chicken scheme)
- (begin-for-syntax (import (prefix foo foo:)))
- (define-syntax testing
+ (import-for-syntax (prefix foo foo:))
+ (define-syntax test-import-for-syntax
(er-macro-transformer
(lambda (x r c)
`(,(r 'quote) ,@(foo:bar 1 2)))))
- (define (foo-user)
- (testing)))
+ (define (test)
+ (test-import-for-syntax)))
+
+(module test-begin-for-syntax (test)
+ (import chicken scheme)
+ (begin-for-syntax
+ (import-syntax (prefix foo foo:)))
+ (define-syntax test-begin-for-syntax
+ (er-macro-transformer
+ (lambda (x r c)
+ `(,(r 'quote) ,@(foo:bar 1 2)))))
+ (define (test)
+ (test-begin-for-syntax)))
diff --git a/tests/runtests.bat b/tests/runtests.bat
index 5755de13..cd4ab526 100644
--- a/tests/runtests.bat
+++ b/tests/runtests.bat
@@ -264,7 +264,7 @@ a.out
if errorlevel 1 exit /b 1
%compile% -s use-square-functor.scm -J
if errorlevel 1 exit /b 1
-%interpret% -nqe "(import sf1)" -e "(import sf2)"
+%interpret% -nqe "(require-library use-square-functor)" -e "(import sf1)" -e "(import sf2)"
if errorlevel 1 exit /b 1
del /f /q sf1.import.* sf2.import.* lst.import.* mod.import.*
@@ -337,7 +337,7 @@ echo ======================================== module tests (command line options
set module="test"
%compile% test.scm -w -A -j %module% -module %module%
if errorlevel 1 exit /b 1
-%interpret% -e "(import %module%)"
+%interpret% -e "(import-syntax %module%)"
if errorlevel 1 exit /b 1
del /f /q %module%.import.scm
diff --git a/tests/runtests.sh b/tests/runtests.sh
index b02b716e..88b58278 100755
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -200,10 +200,10 @@ $compile syntax-tests-2.scm
./a.out
echo "======================================== meta-syntax tests ..."
-$interpret -bnq meta-syntax-test.scm -e '(import foo)' -e "(assert (equal? '((1)) (bar 1 2)))" -e "(assert (equal? '(list 1 2 3) (listify)))" -e "(import foo-usage)" -e "(assert (equal? '(1) (foo-user)))"
+$interpret -bnq meta-syntax-test.scm -e '(import foo)' -e "(assert (equal? '((1)) (bar 1 2)))" -e "(assert (equal? '(list 1 2 3) (listify)))" -e "(import test-import-for-syntax)" -e "(assert (equal? '(1) (test)))" -e "(import test-begin-for-syntax)" -e "(assert (equal? '(1) (test)))"
$compile_s meta-syntax-test.scm -j foo
$compile_s foo.import.scm
-$interpret -bnq -e '(require-library meta-syntax-test)' -e '(import foo)' -e "(assert (equal? '((1)) (bar 1 2)))" -e "(assert (equal? '(list 1 2 3) (listify)))" -e "(import foo-usage)" -e "(assert (equal? '(1) (foo-user)))"
+$interpret -bnq meta-syntax-test.scm -e '(import foo)' -e "(assert (equal? '((1)) (bar 1 2)))" -e "(assert (equal? '(list 1 2 3) (listify)))" -e "(import test-import-for-syntax)" -e "(assert (equal? '(1) (test)))" -e "(import test-begin-for-syntax)" -e "(assert (equal? '(1) (test)))"
echo "======================================== reexport tests ..."
$interpret -bnq reexport-tests.scm
@@ -235,7 +235,7 @@ $interpret -bnq use-square-functor.scm
$compile use-square-functor.scm
./a.out
$compile -s use-square-functor.scm -J
-$interpret -nqe '(import sf1)' -e '(import sf2)'
+$interpret -nqe '(require-library use-square-functor)' -e '(import sf1)' -e '(import sf2)'
rm -f sf1.import.* sf2.import.* lst.import.* mod.import.*
echo "======================================== compiler syntax tests ..."
@@ -280,7 +280,6 @@ $interpret -i -s r5rs_pitfalls.scm
echo "======================================== r7rs tests ..."
$interpret -i -s r7rs-tests.scm
-
echo "======================================== module tests ..."
$interpret -include-path ${TEST_DIR}/.. -s module-tests.scm
$interpret -include-path ${TEST_DIR}/.. -s module-tests-2.scm
@@ -288,7 +287,7 @@ $interpret -include-path ${TEST_DIR}/.. -s module-tests-2.scm
echo "======================================== module tests (command line options) ..."
module="test-$(date +%s)"
$compile test.scm -A -w -j "$module" -module "$module"
-$interpret -e "(import $module)"
+$interpret -e "(import-syntax $module)"
rm -f "$module.import.scm"
echo "======================================== module tests (compiled) ..."
diff --git a/tests/specialization-test-2.scm b/tests/specialization-test-2.scm
index 9b80922d..d63f8d80 100644
--- a/tests/specialization-test-2.scm
+++ b/tests/specialization-test-2.scm
@@ -2,7 +2,8 @@
(module main ()
-(import scheme chicken foreign foo) ; note: does not load foo!
+(import scheme chicken foreign)
+(import-syntax foo) ; note: does not load foo!
#>
static int inlined(int i) {
Trap