;;; possible types are ".lisp" and ".cl", and both "foo.lisp" and
;;; "foo.cl" exist?)
(defun try-default-type (pathname type)
- (let ((pn (make-pathname :type type :defaults pathname)))
+ (let ((pn (translate-logical-pathname (make-pathname :type type :defaults pathname))))
(values pn (probe-file pn))))
;;; a helper function for LOAD: Handle the case of INTERNAL-LOAD where
'(unsigned-byte 8)))
(load-as-fasl filespec verbose print)
(load-as-source filespec verbose print))
- (let (;; FIXME: MERGE-PATHNAMES doesn't work here for
- ;; FILESPEC="TEST:Load-Test" and
- ;; (LOGICAL-PATHNAME-TRANSLATIONS "TEST")
- ;; = (("**;*.*.*" "/foo/bar/**/*.*")).
- ;; Physicalizing the pathname before merging
- ;; is a workaround, but the ANSI spec talks about
- ;; MERGE-PATHNAMES accepting (and returning)
- ;; logical pathnames, so a true fix would probably
- ;; include fixing MERGE-PATHNAMES, then probably
- ;; revisiting this code.
- (ppn (physicalize-pathname (pathname filespec))))
- (if (wild-pathname-p ppn)
- (let ((files (directory ppn)))
- #!+high-security
- (when (null files)
- (error 'file-error :pathname filespec))
- (dolist (file files t)
- (internal-load ppn
- file
- internal-if-does-not-exist
- verbose
- print)))
- (let ((tn (probe-file ppn)))
- (if (or tn (pathname-type ppn))
- (internal-load ppn
- tn
- internal-if-does-not-exist
- verbose
- print)
- (internal-load-default-type
- ppn
- internal-if-does-not-exist
- verbose
- print)))))))))
+ (let* ((pathname (pathname filespec))
+ (physical-pathname (translate-logical-pathname pathname)))
+ (if (or (probe-file physical-pathname) (pathname-type physical-pathname))
+ (internal-load physical-pathname
+ (truename physical-pathname)
+ internal-if-does-not-exist
+ verbose
+ print)
+
+ (internal-load-default-type pathname
+ internal-if-does-not-exist
+ verbose
+ print)))))))
\f
;;; Load a code object. BOX-NUM objects are popped off the stack for
;;; the boxed storage section, then SIZE bytes of code are read in.