Changeset 5192
- Timestamp:
- Sep 11, 2006, 7:09:36 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/ccl/level-1/l1-streams.lisp (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/level-1/l1-streams.lisp
r5152 r5192 368 368 (write-char-function 'ioblock-no-char-output) 369 369 (encoding nil) 370 (alternate-line-termination nil)) 370 (alternate-line-termination nil) 371 (literal-char-code-limit 256) 372 (encode-output-function nil) 373 (decode-input-function nil) 374 (read-char-no-hang-function nil) 375 (write-simple-string-function nil) 376 (reserved0 nil) 377 (reserved1 nil) 378 (reserved2 nil) 379 (reserved3 nil)) 371 380 372 381 … … 418 427 419 428 420 429 (declaim (inline %ioblock-advance)) 421 430 (defun %ioblock-advance (ioblock read-p) 422 431 (funcall (ioblock-advance-function ioblock) … … 448 457 (uvref (io-buffer-buffer buf) idx)))) 449 458 459 460 450 461 (defun %bivalent-ioblock-read-u8-byte (ioblock) 451 462 (declare (optimize (speed 3) (safety 0))) … … 465 476 (aref (the (simple-array (unsigned-byte 8) (*)) 466 477 (io-buffer-buffer buf)) idx)))) 478 479 480 (declaim (inline %ioblock-read-u8-byte)) 467 481 468 482 (defun %ioblock-read-u8-byte (ioblock) … … 570 584 571 585 572 586 (declaim (inline %ioblock-tyi)) 573 587 (defun %ioblock-tyi (ioblock) 574 588 (declare (optimize (speed 3) (safety 0))) … … 577 591 (prog1 ch 578 592 (setf (ioblock-untyi-char ioblock) nil)) 579 (let* ((buf (ioblock-inbuf ioblock)) 580 (idx (io-buffer-idx buf)) 581 (limit (io-buffer-count buf))) 582 (declare (fixnum idx limit)) 583 (when (= idx limit) 584 (unless (%ioblock-advance ioblock t) 585 (return-from %ioblock-tyi (if (ioblock-eof ioblock) :eof))) 586 (setq idx (io-buffer-idx buf) 587 limit (io-buffer-count buf))) 588 (setf (io-buffer-idx buf) (the fixnum (1+ idx))) 589 (%code-char (aref (the (simple-array (unsigned-byte 8) (*)) (io-buffer-buffer buf)) idx)))))) 593 (let* ((buf (ioblock-inbuf ioblock)) 594 (idx (io-buffer-idx buf)) 595 (limit (io-buffer-count buf))) 596 (declare (fixnum idx limit)) 597 (when (= idx limit) 598 (unless (%ioblock-advance ioblock t) 599 (return-from %ioblock-tyi :eof)) 600 (setq idx (io-buffer-idx buf) 601 limit (io-buffer-count buf))) 602 (setf (io-buffer-idx buf) (the fixnum (1+ idx))) 603 (%code-char (aref (the (simple-array (unsigned-byte 8) (*)) 604 (io-buffer-buffer buf)) idx)))))) 590 605 591 606 (defun %private-ioblock-tyi (ioblock) 592 607 (declare (optimize (speed 3) (safety 0))) 593 608 (check-ioblock-owner ioblock) 594 (if (ioblock-untyi-char ioblock) 595 (prog1 (ioblock-untyi-char ioblock) 596 (setf (ioblock-untyi-char ioblock) nil)) 597 (let* ((buf (ioblock-inbuf ioblock)) 598 (idx (io-buffer-idx buf)) 599 (limit (io-buffer-count buf))) 600 (declare (fixnum idx limit)) 601 (when (= idx limit) 602 (unless (%ioblock-advance ioblock t) 603 (return-from %private-ioblock-tyi (if (ioblock-eof ioblock) :eof))) 604 (setq idx (io-buffer-idx buf) 605 limit (io-buffer-count buf))) 606 (setf (io-buffer-idx buf) (the fixnum (1+ idx))) 607 (%code-char (aref (the (simple-array (unsigned-byte 8) (*)) (io-buffer-buffer buf)) idx))))) 609 (%ioblock-tyi ioblock)) 608 610 609 611 (defun %locked-ioblock-tyi (ioblock) … … 611 613 (with-ioblock-lock-grabbed ((locally (declare (optimize (speed 3) (safety 0))) 612 614 (ioblock-inbuf-lock ioblock))) 613 (if (ioblock-untyi-char ioblock) 614 (prog1 (ioblock-untyi-char ioblock) 615 (%ioblock-tyi ioblock))) 616 617 ;;; Read a character composed of one or more 8-bit code-units. 618 (declaim (inline %ioblock-read-u8-encoded-char)) 619 (defun %ioblock-read-u8-encoded-char (ioblock) 620 (declare (optimize (speed 3) (safety 0))) 621 (let* ((ch (ioblock-untyi-char ioblock))) 622 (if ch 623 (prog1 ch 615 624 (setf (ioblock-untyi-char ioblock) nil)) 616 (let* ((buf (ioblock-inbuf ioblock)) 617 (idx (io-buffer-idx buf)) 618 (limit (io-buffer-count buf))) 619 (declare (fixnum idx limit)) 620 (when (= idx limit) 621 (unless (%ioblock-advance ioblock t) 622 (return-from %locked-ioblock-tyi (if (ioblock-eof ioblock) :eof))) 623 (setq idx (io-buffer-idx buf) 624 limit (io-buffer-count buf))) 625 (setf (io-buffer-idx buf) (the fixnum (1+ idx))) 626 (%code-char (aref (the (simple-array (unsigned-byte 8) (*)) (io-buffer-buffer buf)) idx)))))) 627 628 (declaim (inline %ioblock-tyy-no-hang)) 625 (let* ((1st-unit (%ioblock-read-u8-byte ioblock))) 626 (if (eq 1st-unit :eof) 627 1st-unit 628 (locally 629 (declare (type (unsigned-byte 8) 1st-unit)) 630 (if (< 1st-unit 631 (the (mod #x110000) (ioblock-literal-char-code-limit ioblock))) 632 (%code-char 1st-unit) 633 (funcall (ioblock-decode-input-function ioblock) 634 1st-unit 635 #'%ioblock-read-u8-byte 636 ioblock)))))))) 637 638 639 (declaim (inline %ioblock-tyi-no-hang)) 629 640 630 641 (defun %ioblock-tyi-no-hang (ioblock) … … 810 821 element)) 811 822 823 (declaim (inline %ioblock-write-u8-element)) 824 (defun %ioblock-write-u8-element (ioblock element) 825 (declare (optimize (speed 3) (safety 0))) 826 (unless (eql element (logand #xff element)) 827 (report-bad-arg element '(unsigned-byte 8))) 828 (let* ((buf (ioblock-outbuf ioblock)) 829 (idx (io-buffer-idx buf)) 830 (count (io-buffer-count buf)) 831 (limit (io-buffer-limit buf))) 832 (declare (fixnum idx limit count)) 833 (when (= idx limit) 834 (%ioblock-force-output ioblock nil) 835 (setq idx 0 count 0)) 836 (setf (aref (the (simple-array (unsigned-byte 8) (*)) (io-buffer-buffer buf)) idx) element) 837 (incf idx) 838 (setf (io-buffer-idx buf) idx) 839 (when (> idx count) 840 (setf (io-buffer-count buf) idx)) 841 (setf (ioblock-dirty ioblock) t) 842 element)) 843 844 812 845 (defun %ioblock-write-char (ioblock char) 813 846 (declare (optimize (speed 3) (safety 0))) … … 815 848 (setf (ioblock-charpos ioblock) 0) 816 849 (incf (ioblock-charpos ioblock))) 817 (unless (eq (typecode (io-buffer-buffer (ioblock-outbuf ioblock))) 818 target::subtag-simple-base-string) 819 (setq char (char-code char))) 820 (%ioblock-write-element ioblock char)) 850 (let* ((code (char-code char))) 851 (declare (type (mod #x110000) code)) 852 (if (< code 256) 853 (%ioblock-write-u8-element ioblock code) 854 (error "Character ~s can't be encoded on ~s" char (ioblock-stream ioblock))))) 821 855 822 856 (defun %ioblock-write-byte (ioblock byte) 823 857 (declare (optimize (speed 3) (safety 0))) 824 (when (eq (typecode (io-buffer-buffer (ioblock-outbuf ioblock)))825 target::subtag-simple-base-string)826 (setq byte (code-char byte)))827 858 (%ioblock-write-element ioblock byte)) 828 859 … … 1473 1504 (print-unreadable-object (s out :type t :identity t) 1474 1505 (let* ((ioblock (basic-stream.state s)) 1475 (fd (and ioblock (ioblock-device ioblock)))) 1506 (fd (and ioblock (ioblock-device ioblock))) 1507 (encoding (and ioblock (encoding-name (ioblock-encoding ioblock))))) 1476 1508 (if fd 1477 (format out " (~a/~d)"(%unix-fd-kind fd) fd)1509 (format out "~a (~a/~d)" encoding (%unix-fd-kind fd) fd) 1478 1510 (format out "~s" :closed))))) 1479 1511 … … 2848 2880 (print-unreadable-object (s out :type t :identity t) 2849 2881 (let* ((ioblock (stream-ioblock s nil)) 2850 (fd (and ioblock (ioblock-device ioblock)))) 2882 (fd (and ioblock (ioblock-device ioblock))) 2883 (encoding (and ioblock (encoding-name (ioblock-encoding ioblock))))) 2851 2884 (if fd 2852 (format out " (~a/~d)"(%unix-fd-kind fd) fd)2885 (format out "~s (~a/~d)" encoding (%unix-fd-kind fd) fd) 2853 2886 (format out "~s" :closed))))) 2854 2887
Note:
See TracChangeset
for help on using the changeset viewer.
