0.8.6.8:
authorChristophe Rhodes <csr21@cam.ac.uk>
Thu, 27 Nov 2003 22:44:36 +0000 (22:44 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Thu, 27 Nov 2003 22:44:36 +0000 (22:44 +0000)
Fix for GET-SETF-EXPANSION problem (Nikodemus Siivola sbcl-devel
2003-11-27)

NEWS
src/code/early-setf.lisp
tests/setf.impure.lisp [new file with mode: 0644]
version.lisp-expr

diff --git a/NEWS b/NEWS
index 6ca7ff3..3568e39 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2195,6 +2195,11 @@ changes in sbcl-0.8.6 relative to sbcl-0.8.5:
     ** HANDLER-CASE failed to accept declarations in handler clauses
        in some circumstances.
 
+changes in sbcl-0.8.7 relative to sbcl-0.8.6:
+  * bug fix: GET-SETF-EXPANSION no longer throws an internal type
+    error when called without an explicit environment argument.
+    (thanks to Nikodemus Siivola)
+
 planned incompatible changes in 0.8.x:
   * (not done yet, but planned:) When the profiling interface settles
     down, it might impact TRACE. They both encapsulate functions, and
index 6549d41..e4f43ed 100644 (file)
@@ -91,7 +91,8 @@ GET-SETF-EXPANSION directly."
 
 ;;; If a macro, expand one level and try again. If not, go for the
 ;;; SETF function.
-(declaim (ftype (function (t sb!c::lexenv)) expand-or-get-setf-inverse))
+(declaim (ftype (function (t (or null sb!c::lexenv)))
+               expand-or-get-setf-inverse))
 (defun expand-or-get-setf-inverse (form environment)
   (multiple-value-bind (expansion expanded)
       (sb!xc:macroexpand-1 form environment)
diff --git a/tests/setf.impure.lisp b/tests/setf.impure.lisp
new file mode 100644 (file)
index 0000000..77c4ac5
--- /dev/null
@@ -0,0 +1,27 @@
+;;;; tests related to setf
+
+;;;; This file is impure because we want to be able to use DEFUN.
+
+;;;; This software is part of the SBCL system. See the README file for
+;;;; more information.
+;;;;
+;;;; While most of SBCL is derived from the CMU CL system, the test
+;;;; files (like this one) were written from scratch after the fork
+;;;; from CMU CL.
+;;;;
+;;;; This software is in the public domain and is provided with
+;;;; absolutely no warranty. See the COPYING and CREDITS files for
+;;;; more information.
+
+(in-package :cl-user)
+
+(defvar *foo* nil)
+(defun (setf foo) (bar)
+    (setf *foo* bar))
+
+;;; Regression test for get-setf-expansion without explicit
+;;; environment object.
+(assert (multiple-value-list (get-setf-expansion '(foo))))
+
+;;; success
+(quit :unix-status 104)
\ No newline at end of file
index e8d8df7..1ea7adf 100644 (file)
@@ -17,4 +17,4 @@
 ;;; 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.6.7"
+"0.8.6.8"