From: Christophe R. <cr...@us...> - 2003-10-19 20:28:13
|
Update of /cvsroot/sbcl/sbcl/src/code In directory sc8-pr-cvs1:/tmp/cvs-serv25807/src/code Modified Files: module.lisp Log Message: 0.8.4.34: Make MODULE-PROVIDE-CONTRIB obey the protocol ... hacky solution as per CSR sbcl-devel 2003-10-18 Index: module.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/module.lisp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- module.lisp 17 Oct 2003 14:27:45 -0000 1.6 +++ module.lisp 19 Oct 2003 18:08:08 -0000 1.7 @@ -22,7 +22,7 @@ "This is a list of module names that have been loaded into Lisp so far. It is used by PROVIDE and REQUIRE.") -(defvar sb!ext::*MODULE-PROVIDER-FUNCTIONS* '(module-provide-contrib) +(defvar *module-provider-functions* '(module-provide-contrib) "See function documentation for REQUIRE") @@ -54,7 +54,7 @@ (load ele))) (t (unless (some (lambda (p) (funcall p module-name)) - sb!ext::*module-provider-functions*) + *module-provider-functions*) (error "Don't know how to load ~A" module-name))))) (set-difference *modules* saved-modules))) @@ -63,11 +63,23 @@ (defun module-provide-contrib (name) "Stringify and downcase NAME, then attempt to load the file $SBCL_HOME/name/name" - (let ((filesys-name (string-downcase (string name)))) - (load - (merge-pathnames (make-pathname :directory (list :relative filesys-name) - :name filesys-name :type nil) - (truename (posix-getenv "SBCL_HOME"))))) - t) - - + (let* ((filesys-name (string-downcase (string name))) + (unadorned-path + (merge-pathnames + (make-pathname :directory (list :relative filesys-name) + :name filesys-name) + (truename (posix-getenv "SBCL_HOME")))) + (fasl-path (merge-pathnames + (make-pathname :type *fasl-file-type*) + unadorned-path)) + (lisp-path (merge-pathnames (make-pathname :type "lisp") + unadorned-path))) + ;; KLUDGE: there's a race condition here; the file we probe could + ;; be removed by the time we get round to trying to load it. + ;; Maybe factor out the logic in the LOAD guesser as to which file + ;; was meant, so that we can use it here on open streams instead? + (when (or (probe-file unadorned-path) + (probe-file fasl-path) + (probe-file lisp-path)) + (load unadorned-path) + t))) |