0.9.15.13: make PATHNAME not unsafely-flushable
authorNikodemus Siivola <nikodemus@random-state.net>
Mon, 7 Aug 2006 14:31:45 +0000 (14:31 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Mon, 7 Aug 2006 14:31:45 +0000 (14:31 +0000)
 * Reported by Richard Kreuter on sbcl-help.
 * Add DEFTRANSFORMS for common cases.

NEWS
src/compiler/fndb.lisp
src/compiler/srctran.lisp
tests/pathnames.impure.lisp
version.lisp-expr

diff --git a/NEWS b/NEWS
index 1478cfb..a6b852b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,8 @@ changes in sbcl-0.9.16 relative to sbcl-0.9.15:
   * bug fix: use of MAKE-METHOD in method combination now works even
     in the presence of user-defined method classes.  (reported by
     Bruno Haible and Pascal Costanza)
+  * bug fix: erronous calls to PATHNAME were being optimized away.
+    (reported by Richard Kreuter)
 
 changes in sbcl-0.9.15 relative to sbcl-0.9.14:
   * added support for the ucs-2 external format.  (contributed by Ivan
index 4d0debb..d5e465b 100644 (file)
 (defknown load-logical-pathname-translations (string) t ())
 (defknown logical-pathname-translations (logical-host-designator) list ())
 
-(defknown pathname (pathname-designator) pathname (unsafely-flushable))
+(defknown pathname (pathname-designator) pathname ())
 (defknown truename (pathname-designator) pathname ())
 
 (defknown parse-namestring
index 81c309d..8897534 100644 (file)
        (funcall control *standard-output* ,@arg-names)
        nil)))
 
+(deftransform pathname ((pathspec) (pathname) *)
+  'pathspec)
+
+(deftransform pathname ((pathspec) (string) *)
+  '(values (parse-namestring pathspec)))
+
 (macrolet
     ((def (name)
          `(defoptimizer (,name optimizer) ((control &rest args))
   `(let* ((acons (assoc quality-name policy))
           (result (or (cdr acons) 1)))
      result))
+
index 6993c55..1365bba 100644 (file)
                                            (assert (not (pathname-directory p)))
                                            p))))
 
+;;; reported by Richard Kreuter: PATHNAME used to be unsafely-flushable
+(assert (eq :false (if (ignore-errors (pathname nil)) :true :false)))
+
 \f
 ;;;; success
index b004c9f..8cc77bd 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.9.15.12"
+"0.9.15.13"