* Fix misoptimization: use SB-C::GLOBAL-FUNCTION instead of
CL:FUNCTION. (Reported by Stanislaw Halik)
* Also fix a typo in the COMPARE-AND-SWAP docstring. (Thanks to Larry
Valkama.)
* bug fix: Have RUN-PROGRAM with :INPUT T only run the subprocess in a
new process group if it doesn't need to share stdin with the sbcl
process. (thanks to Leslie Polzer)
* bug fix: Have RUN-PROGRAM with :INPUT T only run the subprocess in a
new process group if it doesn't need to share stdin with the sbcl
process. (thanks to Leslie Polzer)
+ * bug fix: SATISFIES could be misoptimized to refer to a local function.
+ (reported by Stanislaw Halik)
changes in sbcl-1.0.31 relative to sbcl-1.0.30:
* improvement: stack allocation is should now be possible in all nested
changes in sbcl-1.0.31 relative to sbcl-1.0.30:
* improvement: stack allocation is should now be possible in all nested
(defmacro compare-and-swap (place old new &environment env)
"Atomically stores NEW in PLACE if OLD matches the current value of PLACE.
Two values are considered to match if they are EQ. Returns the previous value
(defmacro compare-and-swap (place old new &environment env)
"Atomically stores NEW in PLACE if OLD matches the current value of PLACE.
Two values are considered to match if they are EQ. Returns the previous value
-of PLACE: if the returned value if EQ to OLD, the swap was carried out.
+of PLACE: if the returned value is EQ to OLD, the swap was carried out.
PLACE must be an accessor form whose CAR is one of the following:
PLACE must be an accessor form whose CAR is one of the following:
`(%typep ,object ',spec))
(t
(ecase (first spec)
`(%typep ,object ',spec))
(t
(ecase (first spec)
- (satisfies `(if (funcall #',(second spec) ,object) t nil))
+ (satisfies
+ `(if (funcall (global-function ,(second spec)) ,object) t nil))
((not and)
(once-only ((n-obj object))
`(,(first spec) ,@(mapcar (lambda (x)
((not and)
(once-only ((n-obj object))
`(,(first spec) ,@(mapcar (lambda (x)
(test 'simple-string "%CONCATENATE-TO-STRING")
(test 'base-string "%CONCATENATE-TO-BASE-STRING")
(test 'simple-base-string "%CONCATENATE-TO-BASE-STRING")))
(test 'simple-string "%CONCATENATE-TO-STRING")
(test 'base-string "%CONCATENATE-TO-BASE-STRING")
(test 'simple-base-string "%CONCATENATE-TO-BASE-STRING")))
+
+(with-test (:name :satisfies-no-local-fun)
+ (let ((fun (compile nil `(lambda (arg)
+ (labels ((local-not-global-bug (x)
+ t)
+ (bar (x)
+ (typep x '(satisfies local-not-global-bug))))
+ (bar arg))))))
+ (assert (eq 'local-not-global-bug
+ (handler-case
+ (funcall fun 42)
+ (undefined-function (c)
+ (cell-error-name c)))))))
;;; 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".)
;;; 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".)