.
original commit: 9ac7d7d43715ed6314d9ce17fe0d91fe73b6d518
This commit is contained in:
parent
9b949bf42e
commit
b3f6231df6
|
@ -2,13 +2,17 @@
|
||||||
(module port mzscheme
|
(module port mzscheme
|
||||||
(require (lib "etc.ss")
|
(require (lib "etc.ss")
|
||||||
(lib "contract.ss")
|
(lib "contract.ss")
|
||||||
(lib "list.ss"))
|
(lib "list.ss")
|
||||||
|
"private/port.ss")
|
||||||
|
|
||||||
(provide open-output-nowhere
|
(provide open-output-nowhere
|
||||||
make-pipe-with-specials
|
make-pipe-with-specials
|
||||||
make-input-port/read-to-peek
|
make-input-port/read-to-peek
|
||||||
peeking-input-port
|
peeking-input-port
|
||||||
relocate-input-port
|
relocate-input-port
|
||||||
|
transplant-input-port
|
||||||
|
relocate-output-port
|
||||||
|
transplant-output-port
|
||||||
merge-input
|
merge-input
|
||||||
copy-port
|
copy-port
|
||||||
input-port-append
|
input-port-append
|
||||||
|
@ -73,22 +77,6 @@
|
||||||
|
|
||||||
;; ----------------------------------------
|
;; ----------------------------------------
|
||||||
|
|
||||||
(define open-output-nowhere
|
|
||||||
(opt-lambda ([name 'nowhere])
|
|
||||||
(make-output-port
|
|
||||||
name
|
|
||||||
always-evt
|
|
||||||
(lambda (s start end non-block? breakable?) (- end start))
|
|
||||||
void
|
|
||||||
(lambda (special non-block? breakable?) #t)
|
|
||||||
(lambda (s start end) (wrap-evt
|
|
||||||
always-evt
|
|
||||||
(lambda (x)
|
|
||||||
(- end start))))
|
|
||||||
(lambda (special) (wrap-evt always-evt (lambda (x) #t))))))
|
|
||||||
|
|
||||||
;; ----------------------------------------
|
|
||||||
|
|
||||||
(define (copy-port src dest . dests)
|
(define (copy-port src dest . dests)
|
||||||
(unless (input-port? src)
|
(unless (input-port? src)
|
||||||
(raise-type-error 'copy-port "input-port" src))
|
(raise-type-error 'copy-port "input-port" src))
|
||||||
|
@ -468,40 +456,40 @@
|
||||||
void)))
|
void)))
|
||||||
|
|
||||||
(define relocate-input-port
|
(define relocate-input-port
|
||||||
(lambda (p line col pos)
|
(opt-lambda (p line col pos [close? #t])
|
||||||
(let-values ([(init-l init-c init-p) (port-next-location p)])
|
(transplant-to-relocate
|
||||||
(make-input-port
|
transplant-input-port
|
||||||
(object-name p)
|
p line col pos close?)))
|
||||||
(lambda (s) (let ([v (read-bytes-avail!* s p)])
|
|
||||||
(if (eq? v 0)
|
(define transplant-input-port
|
||||||
(wrap-evt p (lambda (x) 0))
|
(opt-lambda (p location-proc pos [close? #t] [count-lines!-proc void])
|
||||||
v)))
|
(make-input-port
|
||||||
(lambda (s skip evt)
|
(object-name p)
|
||||||
(let ([v (peek-bytes-avail!* s skip evt p)])
|
(lambda (s) (let ([v (read-bytes-avail!* s p)])
|
||||||
(if (eq? v 0)
|
(if (eq? v 0)
|
||||||
(choice-evt
|
(wrap-evt p (lambda (x) 0))
|
||||||
(wrap-evt p (lambda (x) 0))
|
v)))
|
||||||
(if evt
|
(lambda (s skip evt)
|
||||||
(wrap-evt evt (lambda (x) #f))
|
(let ([v (peek-bytes-avail!* s skip evt p)])
|
||||||
never-evt))
|
(if (eq? v 0)
|
||||||
v)))
|
(choice-evt
|
||||||
(lambda ()
|
(wrap-evt p (lambda (x) 0))
|
||||||
(close-input-port p))
|
(if evt
|
||||||
(and (port-provides-progress-evts? p)
|
(wrap-evt evt (lambda (x) #f))
|
||||||
(lambda ()
|
never-evt))
|
||||||
(port-progress-evt p)))
|
v)))
|
||||||
(and (port-provides-progress-evts? p)
|
(lambda ()
|
||||||
(lambda (n evt target-evt)
|
(when close?
|
||||||
(port-commit-peeked n evt target-evt p)))
|
(close-input-port p)))
|
||||||
(lambda ()
|
(and (port-provides-progress-evts? p)
|
||||||
(let-values ([(l c p) (port-next-location p)])
|
(lambda ()
|
||||||
(values (and l (+ l (- init-l) line))
|
(port-progress-evt p)))
|
||||||
(and c (if (equal? l init-l)
|
(and (port-provides-progress-evts? p)
|
||||||
(+ c (- init-c) col)
|
(lambda (n evt target-evt)
|
||||||
c))
|
(port-commit-peeked n evt target-evt p)))
|
||||||
(and p (+ p (- init-p) pos)))))
|
location-proc
|
||||||
void
|
count-lines!-proc
|
||||||
pos))))
|
pos)))
|
||||||
|
|
||||||
;; Not kill-safe.
|
;; Not kill-safe.
|
||||||
(define make-pipe-with-specials
|
(define make-pipe-with-specials
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user