summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Rottmann <a.rottmann@gmx.at>2011-03-03 11:09:54 +0100
committerAndy Wingo <wingo@pobox.com>2011-03-03 11:09:54 +0100
commit51c0fd808683fdea689a91fb13b367fd98998c7a (patch)
treee4bb57d6cdb87b5cbd28f88ef49c4bd98481238c
parent9c3fa20a561e6693314fda9ad713ce70a80b88de (diff)
downloadguile-51c0fd808683fdea689a91fb13b367fd98998c7a.tar.gz
Use module identity to filter for existing modules
This fixes a problem with R6RS's `import' in particuliar: when importing a subset of a library/module, the interface created for that purpose inherits the name of the module it is derived from. The low-level primitives that are used for importing would then disregard earlier imports from the same module. An example for this bug can be seen with the following library definition: (library (test-guile2) (export foo) (import (only (rnrs base) define) (only (rnrs base) error)) (define (foo . args) #t)) In the above, the import of `define' would be disregarded when `error' is imported, thus leading to a syntax error, since `(foo . args)' is treated as an application, since the binding of `define' would be not present. * module/ice-9/boot-9.scm (module-use!): Remove the filtering of the existing imports of the module by name; a check for identity is already done beforehand. (module-use-interfaces!): Filter the existing imports by identity instead of filtering them by their names.
-rw-r--r--module/ice-9/boot-9.scm12
1 files changed, 3 insertions, 9 deletions
diff --git a/module/ice-9/boot-9.scm b/module/ice-9/boot-9.scm
index 9f621d9df..fbad99b8c 100644
--- a/module/ice-9/boot-9.scm
+++ b/module/ice-9/boot-9.scm
@@ -1987,13 +1987,8 @@ VALUE."
;; Newly used modules must be appended rather than consed, so that
;; `module-variable' traverses the use list starting from the first
;; used module.
- (set-module-uses! module
- (append (filter (lambda (m)
- (not
- (equal? (module-name m)
- (module-name interface))))
- (module-uses module))
- (list interface)))
+ (set-module-uses! module (append (module-uses module)
+ (list interface)))
(hash-clear! (module-import-obarray module))
(module-modified module))))
@@ -2004,8 +1999,7 @@ VALUE."
(define (module-use-interfaces! module interfaces)
(let ((prev (filter (lambda (used)
(and-map (lambda (iface)
- (not (equal? (module-name used)
- (module-name iface))))
+ (not (eq? used iface)))
interfaces))
(module-uses module))))
(set-module-uses! module