streams. (thanks to Nikodemus Siivola)
* bug fix: result form in DO is not contained in the implicit
TAGBODY.
+ * incompatible change: ICR structure is changed; the value part of
+ CONTINUATION is now called LVAR; corresponding functions are
+ renamed (e.g. SB-C::CONTINUATION-TYPE has become SB-C::LVAR-TYPE).
* fixed some bugs revealed by Paul Dietz' test suite:
** the RETURN clause in LOOP is now equivalent to DO (RETURN ...).
** ROUND and FROUND now give the right answer when given very
;; since we don't want to use IGNORABLE on what might be a special
;; var.
(multiple-value-bind (forms decls) (parse-body body :doc-string-allowed nil)
- (let ((n-list (gensym)))
- `(do* ((,n-list ,list (cdr ,n-list)))
- ((endp ,n-list)
- ,@(if result
- `((let ((,var nil))
- ,var
- ,result))
- '(nil)))
- (let ((,var (car ,n-list)))
- ,@decls
- (tagbody
- ,@forms))))))
+ (let ((n-list (gensym "N-LIST"))
+ (start (gensym "START")))
+ `(block nil
+ (let ((,n-list ,list))
+ (tagbody
+ ,start
+ (unless (endp ,n-list)
+ (let ((,var (car ,n-list)))
+ ,@decls
+ (setq ,n-list (cdr ,n-list))
+ (tagbody ,@forms))
+ (go ,start))))
+ ,(if result
+ `(let ((,var nil))
+ ,var
+ ,result)
+ nil)))))
\f
;;;; conditions, handlers, restarts
:datum ,svar
:expected-type '(satisfies input-stream-p)
:format-control "~S isn't an input stream"
- :format-arguments ,(list svar)))
+ :format-arguments (list ,svar)))
,svar)))))
(defmacro out-synonym-of (stream &optional check-type)
(let ((svar (gensym)))
:datum ,svar
:expected-type '(satisfies output-stream-p)
:format-control "~S isn't an output stream."
- :format-arguments ,(list svar)))
+ :format-arguments (list ,svar)))
,svar)))))
;;; WITH-mumble-STREAM calls the function in the given SLOT of the
(delete clambda (tail-set-funs tails)))
(setf (lambda-tail-set clambda) nil))
(setf (component-lambdas component)
- (delete clambda (component-lambdas component)))))
+ (delq clambda (component-lambdas component)))))
;; If the lambda is an XEP, then we null out the ENTRY-FUN in its
;; ENTRY-FUN so that people will know that it is not an entry
(do-blocks (block component)
(setf (block-delete-p block) t))
(dolist (fun (component-lambdas component))
- (setf (functional-kind fun) nil)
- (setf (functional-entry-fun fun) nil)
- (setf (leaf-refs fun) nil)
- (delete-functional fun))
+ (unless (eq (functional-kind fun) :deleted)
+ (setf (functional-kind fun) nil)
+ (setf (functional-entry-fun fun) nil)
+ (setf (leaf-refs fun) nil)
+ (delete-functional fun)))
(do-blocks (block component)
(delete-block block))
(values))
(defoptimizer (integer-length derive-type) ((x))
(let ((x-type (lvar-type x)))
- (when (and (numeric-type-p x-type)
- (csubtypep x-type (specifier-type 'integer)))
+ (when (numeric-type-p x-type)
;; If the X is of type (INTEGER LO HI), then the INTEGER-LENGTH
;; of X is (INTEGER (MIN lo hi) (MAX lo hi), basically. Be
;; careful about LO or HI being NIL, though. Also, if 0 is
(setf (fdefinition 'close) #'pcl-close)
\f
-(fmakunbound 'input-stream-p)
+(let ()
+ (fmakunbound 'input-stream-p)
-(defgeneric input-stream-p (stream)
- #+sb-doc
- (:documentation "Can STREAM perform input operations?"))
+ (defgeneric input-stream-p (stream)
+ #+sb-doc
+ (:documentation "Can STREAM perform input operations?"))
-(defmethod input-stream-p ((stream ansi-stream))
- (ansi-stream-input-stream-p stream))
+ (defmethod input-stream-p ((stream ansi-stream))
+ (ansi-stream-input-stream-p stream))
-(defmethod input-stream-p ((stream fundamental-input-stream))
- t)
+ (defmethod input-stream-p ((stream fundamental-input-stream))
+ t))
\f
-(fmakunbound 'output-stream-p)
+(let ()
+ (fmakunbound 'output-stream-p)
-(defgeneric output-stream-p (stream)
- #+sb-doc
- (:documentation "Can STREAM perform output operations?"))
+ (defgeneric output-stream-p (stream)
+ #+sb-doc
+ (:documentation "Can STREAM perform output operations?"))
-(defmethod output-stream-p ((stream ansi-stream))
- (ansi-stream-output-stream-p stream))
+ (defmethod output-stream-p ((stream ansi-stream))
+ (ansi-stream-output-stream-p stream))
-(defmethod output-stream-p ((stream fundamental-output-stream))
- t)
+ (defmethod output-stream-p ((stream fundamental-output-stream))
+ t))
\f
;;; character input streams
;;;
(optimize (speed 3) (safety 1) (debug 1)))
(let ((v3 (min -1720 b))) (max v3 (logcount (if (= v3 b) b b)))))
+(defun #:foo (d)
+ (let ((v7 (flet ((%f16 () (labels ((%f3 () -8)) (%f3))))
+ (labels ((%f7 () (%f16))) d))))
+ 132887443))
+
;;; RESULT-FORM in DO is not contained in the implicit TAGBODY
(assert (eq (handler-case (eval `(do ((x '(1 2 3) (cdr x)))
((endp x) (go :loop))
;;; 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".)
-"0.8.3.80"
+"0.8.3.81"