* $port-output-index, $port-output-size, $set-port-output-index! and
$set-port-output-size! are gone.
This commit is contained in:
		
							parent
							
								
									023d0831d7
								
							
						
					
					
						commit
						d8b81869c9
					
				
							
								
								
									
										
											BIN
										
									
								
								src/ikarus.boot
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								src/ikarus.boot
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -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)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)))]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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))])))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue