From 51c0fd808683fdea689a91fb13b367fd98998c7a Mon Sep 17 00:00:00 2001 From: Andreas Rottmann Date: Thu, 3 Mar 2011 11:09:54 +0100 Subject: [PATCH] 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. --- module/ice-9/boot-9.scm | 12 +++--------- 1 file 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 -- 2.20.1