~ 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