diff --git a/src/ikarus.boot b/src/ikarus.boot index 077ab74..a7029e3 100644 Binary files a/src/ikarus.boot and b/src/ikarus.boot differ diff --git a/src/ikarus.compiler.ss b/src/ikarus.compiler.ss index 5bc3827..7a911ea 100644 --- a/src/ikarus.compiler.ss +++ b/src/ikarus.compiler.ss @@ -1800,15 +1800,14 @@ (define port-tag #x3F) (define output-port-tag #x7F) (define input-port-tag #xBF) - ;(define input/output-port-tag #xFF) (define port-mask #x3F) (define disp-port-buffer 4) (define disp-port-index 8) (define disp-port-size 12) (define disp-port-handler 16) - (define disp-port-output-buffer 20) - (define disp-port-output-index 24) - (define disp-port-output-size 28) + (define disp-port-unused1 20) + (define disp-port-unused2 24) + (define disp-port-unused3 28) (define port-size 32) diff --git a/src/ikarus.io-ports.ss b/src/ikarus.io-ports.ss index a2326da..751b6c2 100644 --- a/src/ikarus.io-ports.ss +++ b/src/ikarus.io-ports.ss @@ -55,7 +55,7 @@ ;;; (define $make-input-port (lambda (handler buffer) - ($make-port/input handler buffer 0 ($bytevector-length buffer) #f 0 0))) + ($make-port/input handler buffer 0 ($bytevector-length buffer)))) ;;; (define make-input-port (lambda (handler buffer) @@ -67,7 +67,7 @@ ;;; (define $make-output-port (lambda (handler buffer) - ($make-port/output handler #f 0 0 buffer 0 ($bytevector-length buffer)))) + ($make-port/output handler buffer 0 ($bytevector-length buffer)))) ;;; (define make-output-port (lambda (handler buffer) @@ -77,22 +77,6 @@ (error 'make-output-port "~s is not a bytevector" buffer)) (error 'make-output-port "~s is not a procedure" handler)))) ;;; - ;(define $make-input/output-port - ; (lambda (handler input-buffer output-buffer) - ; ($make-port/both handler - ; input-buffer 0 ($bytevector-length input-buffer) - ; output-buffer 0 ($bytevector-length output-buffer)))) - ;;; - ;(define make-input/output-port - ; (lambda (handler input-buffer output-buffer) - ; (if (procedure? handler) - ; (if (bytevector? input-buffer) - ; (if (bytevector? output-buffer) - ; ($make-input/output-port handler input-buffer output-buffer) - ; (error 'make-input/output-port "~s is not a bytevector" output-buffer)) - ; (error 'make-input/output-port "~s is not a bytevector" input-buffer)) - ; (error 'make-input/output-port "~s is not a procedure" handler)))) - ;;; (define port-handler (lambda (x) (if (port? x) @@ -120,19 +104,19 @@ (define port-output-buffer (lambda (x) (if (output-port? x) - ($port-output-buffer x) + ($port-buffer x) (error 'port-output-buffer "~s is not an output-port" x)))) ;;; (define port-output-index (lambda (x) (if (output-port? x) - ($port-output-index x) + ($port-index x) (error 'port-output-index "~s is not an output-port" x)))) ;;; (define port-output-size (lambda (x) (if (output-port? x) - ($port-output-size x) + ($port-size x) (error 'port-output-size "~s is not an output-port" x)))) ;;; (define set-port-input-index! @@ -166,8 +150,8 @@ (if (output-port? p) (if (fixnum? i) (if ($fx>= i 0) - (if ($fx<= i ($port-output-size p)) - ($set-port-output-index! p i) + (if ($fx<= i ($port-size p)) + ($set-port-index! p i) (error 'set-port-output-index! "index ~s is too big" i)) (error 'set-port-output-index! "index ~s is negative" i)) (error 'set-port-output-index! "~s is not a valid index" i)) @@ -178,10 +162,10 @@ (if (output-port? p) (if (fixnum? i) (if ($fx>= i 0) - (if ($fx<= i ($bytevector-length ($port-output-buffer p))) + (if ($fx<= i ($bytevector-length ($port-buffer p))) (begin - ($set-port-output-index! p 0) - ($set-port-output-size! p i)) + ($set-port-index! p 0) + ($set-port-size! p i)) (error 'set-port-output-size! "size ~s is too big" i)) (error 'set-port-output-size! "size ~s is negative" i)) (error 'set-port-output-size! "~s is not a valid size" i)) diff --git a/src/ikarus.io-primitives.unsafe.ss b/src/ikarus.io-primitives.unsafe.ss index 037fde0..40f5267 100644 --- a/src/ikarus.io-primitives.unsafe.ss +++ b/src/ikarus.io-primitives.unsafe.ss @@ -42,10 +42,10 @@ (define $write-byte (lambda (b p) (let ([idx (port-output-index p)]) - (if ($fx< idx ($port-output-size p)) + (if ($fx< idx ($port-size p)) (begin - ($bytevector-set! ($port-output-buffer p) idx b) - ($set-port-output-index! p ($fxadd1 idx))) + ($bytevector-set! ($port-buffer p) idx b) + ($set-port-index! p ($fxadd1 idx))) (($port-handler p) 'write-byte b p))))) (define $read-char diff --git a/src/ikarus.io.output-files.ss b/src/ikarus.io.output-files.ss index 241f397..40d02e3 100644 --- a/src/ikarus.io.output-files.ss +++ b/src/ikarus.io.output-files.ss @@ -76,15 +76,15 @@ [(write-byte b p) (if (and (fixnum? b) ($fx<= 0 b) ($fx<= b 255)) (if (output-port? p) - (let ([idx ($port-output-index p)]) - (if ($fx< idx ($port-output-size p)) + (let ([idx ($port-index p)]) + (if ($fx< idx ($port-size p)) (begin - ($bytevector-set! ($port-output-buffer p) idx b) - ($set-port-output-index! p ($fxadd1 idx))) + ($bytevector-set! ($port-buffer p) idx b) + ($set-port-index! p ($fxadd1 idx))) (if open? (let ([bytes (do-write-buffer fd port-name - ($port-output-buffer p) idx 'write-char)]) - ($set-port-output-index! p 0) + ($port-buffer p) idx 'write-char)]) + ($set-port-index! p 0) ($write-byte b p)) (error 'write-byte "port ~s is closed" p)))) (error 'write-byte "~s is not an output-port" p)) @@ -102,16 +102,16 @@ (if (output-port? p) (if open? (let ([bytes (do-write-buffer fd port-name - ($port-output-buffer p) - ($port-output-index p) + ($port-buffer p) + ($port-index p) 'flush-output-port)]) - ($set-port-output-index! p 0)) + ($set-port-index! p 0)) (error 'flush-output-port "port ~s is closed" p)) (error 'flush-output-port "~s is not an output-port" p))] [(close-port p) (when open? (flush-output-port p) - ($set-port-output-size! p 0) + ($set-port-size! p 0) (set! open? #f) (unless (foreign-call "ikrt_close_file" fd) (error 'close-output-port "cannot close ~s" port-name)))] diff --git a/src/ikarus.io.output-strings.ss b/src/ikarus.io.output-strings.ss index 5643032..151afbe 100644 --- a/src/ikarus.io.output-strings.ss +++ b/src/ikarus.io.output-strings.ss @@ -112,16 +112,16 @@ [(write-byte b p) (if (and (fixnum? b) ($fx<= 0 b) ($fx<= b 255)) (if (output-port? p) - (let ([idx ($port-output-index p)]) - (if ($fx< idx ($port-output-size p)) + (let ([idx ($port-index p)]) + (if ($fx< idx ($port-size p)) (begin - ($bytevector-set! ($port-output-buffer p) idx b) - ($set-port-output-index! p ($fxadd1 idx))) + ($bytevector-set! ($port-buffer p) idx b) + ($set-port-index! p ($fxadd1 idx))) (if open? - (let ([buff ($port-output-buffer p)]) + (let ([buff ($port-buffer p)]) (set! buffer-list (cons (bv-copy buff) buffer-list)) ($bytevector-set! buff 0 b) - ($set-port-output-index! p 1)) + ($set-port-index! p 1)) (error 'write-byte "port ~s is closed" p)))) (error 'write-byte "~s is not an output-port" p)) (error 'write-byte "~s is not a byte" b))] @@ -142,8 +142,8 @@ [(get-output-string p) (utf8-bytevector->string (concat - ($port-output-buffer p) - ($port-output-index p) + ($port-buffer p) + ($port-index p) buffer-list))] [else (error 'output-handler "unhandled message ~s" (cons msg args))]))) diff --git a/src/makefile.ss b/src/makefile.ss index dfc2dc6..26619dd 100755 --- a/src/makefile.ss +++ b/src/makefile.ss @@ -699,13 +699,6 @@ [$set-port-index! $ports] [$set-port-size! $ports] - [$port-output-buffer $ports] - [$port-output-index $ports] - [$port-output-size $ports] - [$set-port-output-index! $ports] - [$set-port-output-size! $ports] - - [$closure-code $codes] [$code->closure $codes] [$code-reloc-vector $codes] diff --git a/src/pass-specify-rep-primops.ss b/src/pass-specify-rep-primops.ss index 335ad84..396c5e0 100644 --- a/src/pass-specify-rep-primops.ss +++ b/src/pass-specify-rep-primops.ss @@ -1421,27 +1421,25 @@ [(P x) (sec-tag-test (T x) vector-mask vector-tag #f output-port-tag)] [(E x) (nop)]) -(define (make-port handler buf/i idx/i sz/i buf/o idx/o sz/o tag) +(define (make-port handler buf/i idx/i sz/i tag) (with-tmp ([p (prm 'alloc (K (align port-size)) (K vector-tag))]) (prm 'mset p (K (- vector-tag)) (K tag)) (prm 'mset p (K (- disp-port-buffer vector-tag)) (T buf/i)) (prm 'mset p (K (- disp-port-index vector-tag)) (T idx/i)) (prm 'mset p (K (- disp-port-size vector-tag)) (T sz/i)) (prm 'mset p (K (- disp-port-handler vector-tag)) (T handler)) - (prm 'mset p (K (- disp-port-output-buffer vector-tag)) (T buf/o)) - (prm 'mset p (K (- disp-port-output-index vector-tag)) (T idx/o)) - (prm 'mset p (K (- disp-port-output-size vector-tag)) (T sz/o)) + (prm 'mset p (K (- disp-port-unused1 vector-tag)) (K 0)) + (prm 'mset p (K (- disp-port-unused2 vector-tag)) (K 0)) + (prm 'mset p (K (- disp-port-unused3 vector-tag)) (K 0)) p)) (define-primop $make-port/input unsafe - [(V handler buf/i idx/i sz/i buf/o idx/o sz/o) - (make-port handler buf/i idx/i sz/i buf/o idx/o sz/o - input-port-tag)]) + [(V handler buf/i idx/i sz/i) + (make-port handler buf/i idx/i sz/i input-port-tag)]) (define-primop $make-port/output unsafe - [(V handler buf/i idx/i sz/i buf/o idx/o sz/o) - (make-port handler buf/i idx/i sz/i buf/o idx/o sz/o - output-port-tag)]) + [(V handler buf/o idx/o sz/o) + (make-port handler buf/o idx/o sz/o output-port-tag)]) (define-primop $port-handler unsafe [(V x) (prm 'mref (T x) (K (- disp-port-handler vector-tag)))]) @@ -1459,20 +1457,6 @@ (prm 'mset (T x) (K (- disp-port-index vector-tag)) (K 0)) (prm 'mset (T x) (K (- disp-port-size vector-tag)) (T i)))]) -(define-primop $port-output-buffer unsafe - [(V x) (prm 'mref (T x) (K (- disp-port-output-buffer vector-tag)))]) -(define-primop $port-output-index unsafe - [(V x) (prm 'mref (T x) (K (- disp-port-output-index vector-tag)))]) -(define-primop $port-output-size unsafe - [(V x) (prm 'mref (T x) (K (- disp-port-output-size vector-tag)))]) -(define-primop $set-port-output-index! unsafe - [(E x i) (prm 'mset (T x) (K (- disp-port-output-index vector-tag)) (T i))]) -(define-primop $set-port-output-size! unsafe - [(E x i) - (seq* - (prm 'mset (T x) (K (- disp-port-output-index vector-tag)) (K 0)) - (prm 'mset (T x) (K (- disp-port-output-size vector-tag)) (T i)))]) - /section) (section ;;; interrupts-and-engines