From 7e3147666b0bb2366cfaf0ce34a11147f7f55e8f Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Thu, 10 Jun 2010 19:59:17 +0200 Subject: [PATCH] resolve-module #:ensure argument * module/ice-9/boot-9.scm (resolve-module): Add #:ensure kwarg, defaulting to true. If true we make an empty module if none was found (the old behavior). Otherwise we return false. * test-suite/tests/modules.test ("resolve-module"): Add tests for old and new behavior. --- module/ice-9/boot-9.scm | 11 ++++++----- test-suite/tests/modules.test | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/module/ice-9/boot-9.scm b/module/ice-9/boot-9.scm index c88cbdde7..85b44b14f 100644 --- a/module/ice-9/boot-9.scm +++ b/module/ice-9/boot-9.scm @@ -2420,7 +2420,7 @@ If there is no handler at all, Guile prints an error and then exits." ;; Define the-root-module as '(guile). (module-define-submodule! root 'guile the-root-module) - (lambda* (name #:optional (autoload #t) (version #f)) + (lambda* (name #:optional (autoload #t) (version #f) #:key (ensure #t)) (let ((already (nested-ref-module root name))) (cond ((and already @@ -2433,12 +2433,13 @@ If there is no handler at all, Guile prints an error and then exits." (autoload ;; Try to autoload the module, and recurse. (try-load-module name version) - (resolve-module name #f)) + (resolve-module name #f #:ensure ensure)) (else ;; No module found (or if one was, it had no public interface), and - ;; we're not autoloading. Here's the weird semantics: we ensure - ;; there's an empty module. - (or already (make-modules-in root name)))))))) + ;; we're not autoloading. Make an empty module if #:ensure is true. + (or already + (and ensure + (make-modules-in root name))))))))) (define (try-load-module name version) diff --git a/test-suite/tests/modules.test b/test-suite/tests/modules.test index a6a955f3c..5b3f7a45d 100644 --- a/test-suite/tests/modules.test +++ b/test-suite/tests/modules.test @@ -136,6 +136,23 @@ (module-reverse-lookup (current-module) 'foo))) + +;;; +;;; Resolve-module. +;;; + +(with-test-prefix "resolve-module" + + (pass-if "#:ensure #t by default" + (module? (resolve-module (list (gensym))))) + + (pass-if "#:ensure #t explicitly" + (module? (resolve-module (list (gensym)) #:ensure #t))) + + (pass-if "#:ensure #f" + (not (resolve-module (list (gensym)) #:ensure #f)))) + + ;;; ;;; Observers.