~ chicken-r7rs (master) b3dd78f9e17fdc06e05c3a8e652ef817a09ec467
commit b3dd78f9e17fdc06e05c3a8e652ef817a09ec467
Author: Evan Hanson <evhan@foldling.org>
AuthorDate: Tue Sep 20 10:53:19 2016 +1200
Commit: Evan Hanson <evhan@foldling.org>
CommitDate: Tue Sep 20 10:53:20 2016 +1200
Only import meta-language bindings implicitly in r7rs libraries
This prevents libraries from unwittingly redefining identifiers from
scheme.base, since an unqualified import of r7rs reexports that
library's bindings.
diff --git a/r7rs-compile-time.scm b/r7rs-compile-time.scm
index 1cc707b..a610a55 100644
--- a/r7rs-compile-time.scm
+++ b/r7rs-compile-time.scm
@@ -97,6 +97,16 @@
(parameterize ((case-sensitive (not ci?)))
(##sys#include-forms-from-file path))))))
+(define implicit-r7rs-library-bindings
+ '(begin
+ cond-expand
+ export
+ import
+ import-for-syntax
+ include
+ include-ci
+ syntax-rules))
+
(define (parse-library-definition form dummy-export) ; expects stripped syntax
(match form
((_ name decls ...)
@@ -164,8 +174,8 @@
;; Another gruesome hack: provide feature so "use" works properly
(##sys#provide (##core#quote ,real-name))
;; Set up an R7RS environment for the module's body.
- (import-for-syntax r7rs) ; overwrites "syntax-rules"
- (import r7rs) ; overwrites existing "import" and "import-for-syntax"
+ (import-for-syntax (only r7rs ,@implicit-r7rs-library-bindings))
+ (import (only r7rs ,@implicit-r7rs-library-bindings))
,(parse-decls decls))))
(_ (syntax-error 'define-library "invalid library definition" form))))
Trap