mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-30 23:10: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,12 +1987,7 @@ VALUE."
|
||||||
;; Newly used modules must be appended rather than consed, so that
|
;; Newly used modules must be appended rather than consed, so that
|
||||||
;; `module-variable' traverses the use list starting from the first
|
;; `module-variable' traverses the use list starting from the first
|
||||||
;; used module.
|
;; used module.
|
||||||
(set-module-uses! module
|
(set-module-uses! module (append (module-uses module)
|
||||||
(append (filter (lambda (m)
|
|
||||||
(not
|
|
||||||
(equal? (module-name m)
|
|
||||||
(module-name interface))))
|
|
||||||
(module-uses module))
|
|
||||||
(list interface)))
|
(list interface)))
|
||||||
(hash-clear! (module-import-obarray module))
|
(hash-clear! (module-import-obarray module))
|
||||||
(module-modified module))))
|
(module-modified module))))
|
||||||
|
@ -2004,8 +1999,7 @@ VALUE."
|
||||||
(define (module-use-interfaces! module interfaces)
|
(define (module-use-interfaces! module interfaces)
|
||||||
(let ((prev (filter (lambda (used)
|
(let ((prev (filter (lambda (used)
|
||||||
(and-map (lambda (iface)
|
(and-map (lambda (iface)
|
||||||
(not (equal? (module-name used)
|
(not (eq? used iface)))
|
||||||
(module-name iface))))
|
|
||||||
interfaces))
|
interfaces))
|
||||||
(module-uses module))))
|
(module-uses module))))
|
||||||
(set-module-uses! module
|
(set-module-uses! module
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue