~ chicken-core (chicken-5) 88138e982919382d4c98a6582217178015305ea1
commit 88138e982919382d4c98a6582217178015305ea1
Author: Evan Hanson <evhan@foldling.org>
AuthorDate: Tue Oct 17 18:54:02 2017 +1300
Commit: Peter Bex <peter@more-magic.net>
CommitDate: Wed Oct 18 14:05:15 2017 +0200
Move `begin-for-syntax' out of the default macro environment
This moves the `begin-for-syntax' form out of expand.scm and into
chicken-syntax.scm so that it isn't in the default macro environment,
but rather part of (chicken base).
Signed-off-by: Peter Bex <peter@more-magic.net>
diff --git a/chicken-syntax.scm b/chicken-syntax.scm
index afe62229..3abda348 100644
--- a/chicken-syntax.scm
+++ b/chicken-syntax.scm
@@ -266,6 +266,14 @@
(set! ##sys#chicken.base-macro-environment
(let ((me0 (##sys#macro-environment)))
+(##sys#extend-macro-environment
+ 'begin-for-syntax '()
+ (##sys#er-transformer
+ (lambda (x r c)
+ (##sys#check-syntax 'begin-for-syntax x '(_ . #(_ 0)))
+ (##sys#register-meta-expression `(##core#begin ,@(cdr x)))
+ `(##core#elaborationtimeonly (##core#begin ,@(cdr x))))))
+
(##sys#extend-macro-environment
'define-constant
'()
diff --git a/eval.scm b/eval.scm
index 37c5d8ca..983caa33 100644
--- a/eval.scm
+++ b/eval.scm
@@ -835,7 +835,6 @@
require-extension
require-extension-for-syntax
require-library
- begin-for-syntax
export
module
cond-expand
diff --git a/expand.scm b/expand.scm
index 1c66a01f..2482c92c 100644
--- a/expand.scm
+++ b/expand.scm
@@ -997,20 +997,12 @@
`(##core#require ,lib ,(module-requirement name)))))
(cdr x)))))))
-;; TODO Move this out of the initial environment:
-(##sys#extend-macro-environment
- 'begin-for-syntax '()
- (##sys#er-transformer
- (lambda (x r c)
- (##sys#check-syntax 'begin-for-syntax x '(_ . #(_ 0)))
- (##sys#register-meta-expression `(##core#begin ,@(cdr x)))
- `(##core#elaborationtimeonly (##core#begin ,@(cdr x))))))
-
(##sys#extend-macro-environment
'import-for-syntax '()
(##sys#er-transformer
(lambda (x r c)
- `(,(r 'begin-for-syntax) (,(r 'import) ,@(cdr x))))))
+ (##sys#register-meta-expression `(,(r 'import) ,@(cdr x)))
+ `(##core#elaborationtimeonly (,(r 'import) ,@(cdr x))))))
;; The "initial" macro environment, containing only import forms
(define ##sys#initial-macro-environment (##sys#macro-environment))
diff --git a/tests/module-tests.scm b/tests/module-tests.scm
index 33a4b15e..e34cce4a 100644
--- a/tests/module-tests.scm
+++ b/tests/module-tests.scm
@@ -225,7 +225,7 @@
(test-equal
"local module alias scope"
(module m21 ()
- (import scheme)
+ (import scheme chicken)
(begin-for-syntax ; XXX s.a.
(##sys#register-module-alias 'm18 'm19))
(import m18)
diff --git a/tests/scrutiny.expected b/tests/scrutiny.expected
index 0495a6e6..d8c3b8fb 100644
--- a/tests/scrutiny.expected
+++ b/tests/scrutiny.expected
@@ -43,10 +43,10 @@ Warning: at toplevel:
assignment of value of type `fixnum' to toplevel variable `car' does not match declared type `(forall (a) (procedure car ((pair a *)) a))'
Warning: at toplevel:
- expected a single result in `let' binding of `g20', but received 2 results
+ expected a single result in `let' binding of `g19', but received 2 results
Warning: at toplevel:
- in procedure call to `g20', expected a value of type `(procedure () *)' but was given a value of type `fixnum'
+ in procedure call to `g19', expected a value of type `(procedure () *)' but was given a value of type `fixnum'
Note: in toplevel procedure `foo':
expected a value of type boolean in conditional, but was given a value of type `(procedure bar () *)' which is always true:
Trap