1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-13 15:10:34 +02:00

case-lambda in dup->{in,out,}port, dup

* module/ice-9/boot-9.scm (dup->port, dup->inport, dup->outport, dup):
  Use case-lambda. Not particularly elegant.
This commit is contained in:
Andy Wingo 2010-05-21 23:36:47 +02:00
parent 52c9a3381d
commit 02851b26c7

View file

@ -917,23 +917,39 @@ If there is no handler at all, Guile prints an error and then exits."
(if (> revealed 0) (if (> revealed 0)
(set-port-revealed! port (- revealed 1))))) (set-port-revealed! port (- revealed 1)))))
(define (dup->port port/fd mode . maybe-fd) (define dup->port
(let ((port (fdopen (apply dup->fdes port/fd maybe-fd) (case-lambda
mode))) ((port/fd mode)
(if (pair? maybe-fd) (fdopen (dup->fdes port/fd) mode))
(set-port-revealed! port 1)) ((port/fd mode new-fd)
port)) (let ((port (fdopen (dup->fdes port/fd new-fd) mode)))
(set-port-revealed! port 1)
port))))
(define (dup->inport port/fd . maybe-fd) (define dup->inport
(apply dup->port port/fd "r" maybe-fd)) (case-lambda
((port/fd)
(dup->port port/fd "r"))
((port/fd new-fd)
(dup->port port/fd "r" new-fd))))
(define (dup->outport port/fd . maybe-fd) (define dup->outport
(apply dup->port port/fd "w" maybe-fd)) (case-lambda
((port/fd)
(dup->port port/fd "w"))
((port/fd new-fd)
(dup->port port/fd "w" new-fd))))
(define (dup port/fd . maybe-fd) (define dup
(case-lambda
((port/fd)
(if (integer? port/fd) (if (integer? port/fd)
(apply dup->fdes port/fd maybe-fd) (dup->fdes port/fd)
(apply dup->port port/fd (port-mode port/fd) maybe-fd))) (dup->port port/fd (port-mode port/fd))))
((port/fd new-fd)
(if (integer? port/fd)
(dup->fdes port/fd new-fd)
(dup->port port/fd (port-mode port/fd) new-fd)))))
(define (duplicate-port port modes) (define (duplicate-port port modes)
(dup->port port modes)) (dup->port port modes))