1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 11:40:18 +02:00

Allow (library ...) form in cond-expand inside R7RS define-library.

Guile (3.0.8) reports a compilation error when cond-expand tries to
check existence of a missing library:

    scheme@(guile-user)> (define-library (test)
                           (cond-expand
                            ((library (scheme sort))
                             (import (scheme sort)))))
    While compiling expression:
    no code for module (scheme sort)

It looks like bug #40252 was not fully eliminated.

Also, (library ...) cannot handle module names like (srfi 1), though
(import (srfi 1)) works fine. For example, this code fails:

    scheme@(guile-user)> (define-library (test)
                           (cond-expand
                            ((library (srfi 1))
                             (import (srfi 1)))))
    While compiling expression:
    In procedure symbol->string: Wrong type argument in position 1
    (expecting symbol): 1

There are probably other cases when (library ...) and (import ...) does
not work identically: (library ...) uses resolve-interface while
(import ...) uses resolve-r6rs-interface.

This patch fixes both issues.

* module/ice-9/r7rs-libraries.scm (define-library): Replace
'resolve-interface' call by 'resolve-r6rs-interface', wrapped in
'cond-expand'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Mihail Iosilevich 2022-06-12 13:13:32 +03:00 committed by Ludovic Courtès
parent e8a41aee29
commit 158da6966b

View file

@ -55,7 +55,10 @@
((not req)
(not (has-req? #'req)))
((library lib-name)
(->bool (resolve-interface (syntax->datum #'lib-name))))
(->bool
(false-if-exception
(resolve-r6rs-interface
(syntax->datum #'lib-name)))))
(id
(identifier? #'id)
;; FIXME: R7RS (features) isn't quite the same as