1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-09 23:40:29 +02:00

define* in resolve-interface

* module/ice-9/boot-9.scm (resolve-interface): Use define* with proper
  keyword arguments, for great justice.
This commit is contained in:
Andy Wingo 2010-05-21 23:42:54 +02:00
parent 6b7d701e73
commit 36d58fc31e

View file

@ -2469,25 +2469,15 @@ If there is no handler at all, Guile prints an error and then exits."
;; or its public interface is not available. Signal "no binding" ;; or its public interface is not available. Signal "no binding"
;; error if selected binding does not exist in the used module. ;; error if selected binding does not exist in the used module.
;; ;;
(define (resolve-interface name . args) (define* (resolve-interface name #:key
(select #f)
(define (get-keyword-arg args kw def) (hide '())
(cond ((memq kw args) (prefix #f)
=> (lambda (kw-arg) (renamer (if prefix
(if (null? (cdr kw-arg)) (symbol-prefix-proc prefix)
(error "keyword without value: " kw)) identity))
(cadr kw-arg))) version)
(else (let* ((module (resolve-module name #t version))
def)))
(let* ((select (get-keyword-arg args #:select #f))
(hide (get-keyword-arg args #:hide '()))
(renamer (or (get-keyword-arg args #:renamer #f)
(let ((prefix (get-keyword-arg args #:prefix #f)))
(and prefix (symbol-prefix-proc prefix)))
identity))
(version (get-keyword-arg args #:version #f))
(module (resolve-module name #t version))
(public-i (and module (module-public-interface module)))) (public-i (and module (module-public-interface module))))
(and (or (not module) (not public-i)) (and (or (not module) (not public-i))
(error "no code for module" name)) (error "no code for module" name))