diff options
author | Andreas Rottmann <a.rottmann@gmx.at> | 2011-03-03 11:09:54 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2011-03-03 11:09:54 +0100 |
commit | 51c0fd808683fdea689a91fb13b367fd98998c7a (patch) | |
tree | e4bb57d6cdb87b5cbd28f88ef49c4bd98481238c | |
parent | 9c3fa20a561e6693314fda9ad713ce70a80b88de (diff) | |
download | guile-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.scm | 12 |
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 |