diff options
author | Mihail Iosilevich <yosik@paranoid.email> | 2022-06-12 13:13:32 +0300 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2022-06-16 09:36:31 +0200 |
commit | 158da6966b9ea2e949ae714863861d4f5bc5a56e (patch) | |
tree | 3739d5b7ddd24447d9ae0d8f6e93e3162193bd98 /module | |
parent | e8a41aee2932d1332cd4010398c41be56d4c4be3 (diff) | |
download | guile-158da6966b9ea2e949ae714863861d4f5bc5a56e.tar.gz |
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>
Diffstat (limited to 'module')
-rw-r--r-- | module/ice-9/r7rs-libraries.scm | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/module/ice-9/r7rs-libraries.scm b/module/ice-9/r7rs-libraries.scm index c4c4da22f..63a300a26 100644 --- a/module/ice-9/r7rs-libraries.scm +++ b/module/ice-9/r7rs-libraries.scm @@ -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 |