mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-30 15:00:21 +02:00
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.
This commit is contained in:
parent
9c3fa20a56
commit
51c0fd8086
1 changed files with 3 additions and 9 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue