* module/ice-9/r6rs-libraries.scm (resolve-r6rs-interface): In Guile, a
module's public interface is just another module, and that means that
it can import other modules as well. Allow for R6RS modules that
import module whose interfaces import other modules to access all
visible bindings.
* test-suite/tests/rnrs-libraries.test ("import features"): Update
test.
* module/ice-9/boot-9.scm:
* module/ice-9/i18n.scm:
* module/ice-9/poll.scm:
* module/ice-9/popen.scm:
* module/ice-9/r6rs-libraries.scm:
* module/oop/goops.scm:
* module/oop/goops/compile.scm:
* module/oop/goops/dispatch.scm:
* module/srfi/srfi-88.scm:
* module/system/foreign.scm:
* module/texinfo/serialize.scm: Change most uses of 'compile' to
'expand', except where we must avoid it during initial bootstrap
before the module system is loaded. Remove redundant uses of
'compile' where 'expand' is also given. Standardize on the
"(expand load eval)" order of conditions.
* module/ice-9/psyntax.scm (@): Return top-wrap instead of the wrap
applied to the '@' form, so that the symbol will be interpreted as a
top-level identifier and never refer to any lexical variable.
(@@): Change the syntax used to support R6RS 'library' forms to:
(@@ @@ (mod ...) body). Change the behavior of the documented
(@@ (mod ...) id) form to be the same as that of @, except for the use
of 'private' instead of 'public' in the psyntax mod: use syntax->datum
on the identifier, and return top-wrap instead of the wrap applied to
the '@@' form.
This fixes <http://bugs.gnu.org/10756> reported by Ludovic Courtès.
* module/ice-9/psyntax-pp.scm: Regenerate.
* module/ice-9/r6rs-libraries.scm (library): Use '@@ @@' syntax instead
of the older '@@' syntax.
* test-suite/tests/syncase.test (changes to expansion environment): Use
'@@ @@' syntax.
* module/Makefile.am: Add explicit dependencies for boot-9.go on the
files that it includes: quasisyntax.scm and r6rs-libraries.scm.
* module/ice-9/boot-9.scm (export!): New syntax, as export is to
module-export!, export! is to module-replace!. I thought that taking
up the name `replace' would be presumptuous, hence the name mismatch.
* module/ice-9/r6rs-libraries.scm (library): Calculate not only
re-exports, but replacements as well.
* module/ice-9/r6rs-libraries.scm (resolve-r6rs-interface): To avoid having to
create alias libraries for all the SRFIs, we simply ignore the name
components, so (srfi :n foo bar) will resolve to (srfi :n).
* module/ice-9/r6rs-libraries.scm (library): Unwrap the `for' sub-form
during export resolution the same way that `import' does.
* test-suite/tests/rnrs-libraries.test ("implicit phasing"): New test
prefix and tests.
* module/ice-9/boot-9.scm (define-module): Add `expand' to the
situations, so that we ensure the current module changes at expand
time.
* module/ice-9/r6rs-libraries.scm (library): Expand the body within @@
expressions.