~ 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