up instance creation in those cases.
* optimization: arithmetic operations with multiple constant arguments in now
have them reduced at compile-time. (lp#676414)
+ * optimization: determining current character position on string-streams for
+ pretty-printing was overly slow.
* bug fix: local tail calls to DYNAMIC-EXTENT functions can no longer cause
lifetime analysis to overwrite closed-over variables (lp#681092).
* bug fix: encoding errors from some multibyte external formats such as EUC-JP
(defun string-out-misc (stream operation &optional arg1 arg2)
(declare (ignore arg2))
+ (declare (optimize speed))
(case operation
(:charpos
;; Keeping this first is a silly micro-optimization: FRESH-LINE
(buffer (string-output-stream-buffer stream))
(prev (string-output-stream-prev stream))
(base 0))
+ (declare (type (or null (simple-array character (*))) buffer))
:next
- (let ((pos (position #\newline buffer :from-end t :end pointer)))
+ (let ((pos (when buffer
+ (position #\newline buffer :from-end t :end pointer))))
(when (or pos (not buffer))
;; If newline is at index I, and pointer at index I+N, charpos
;; is N-1. If there is no newline, and pointer is at index N,
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.45.32"
+"1.0.45.33"