Helmut Eller heller@common-lisp.net writes:
- Matthias Koeppe [2005-12-02 16:42+0100] writes:
Any objections to this proposed change? (BTW, what's the rationale of stripping the filename extension here?)
Without the extension it's possible to load fasl files with the same command, just as you can load fasl files with CL:LOAD.
I see, this is what I suspected. As Edi Weitz pointed out, the various Lisp implementations use several default source extensions, so it is not easy to decide which source file can be loaded without specifying the extension. Therefore, I have revised my approach to improve slime-load-file. What do you think of this change?
2005-12-03 Matthias Koeppe mkoeppe@mail.math.uni-magdeburg.de
* slime.el (slime-load-file): Load the FASL file if it exists. Offer to recompile it if FASL file exists but is not current. Don't try to use or update FASL files of .asd files (using slime-load-file-no-compile-regexps), since .asd files are never compiled and often there exists a .lisp file with the same name. (slime-load-file-no-compile-regexps): New variable.
--- slime.el.~1.566.~ 2005-12-01 13:32:54.000000000 +0100 +++ slime.el 2005-12-03 20:06:52.667146000 +0100 @@ -6515,18 +6515,47 @@ (slime-eval-async `(swank:undefine-function ,symbol-name) (lambda (result) (message "%s" result))))
+(defvar slime-load-file-no-compile-regexps + '(".asd$") + "If a source file matches a regexp in this list, +`slime-load-file' will not offer to compile this file.") + (defun slime-load-file (filename) "Load the Lisp file FILENAME." (interactive (list (read-file-name "Load file: " nil nil - nil (if (buffer-file-name) - (file-name-sans-extension - (file-name-nondirectory - (buffer-file-name))))))) - (let ((lisp-filename (slime-to-lisp-filename (expand-file-name filename)))) - (slime-eval-with-transcript `(swank:load-file ,lisp-filename)))) - - + nil + (if (buffer-file-name) + (file-name-nondirectory + (buffer-file-name)))))) + (let ((lisp-filename + (slime-to-lisp-filename (expand-file-name filename)))) + (flet ((load-it (filename) + (slime-eval-with-transcript + `(swank:load-file ,filename)))) + (if (some #'(lambda (regexp) + (string-match regexp filename)) + slime-load-file-no-compile-regexps) + (load-it filename) + (let ((fasl-filename + (slime-eval + `(cl:namestring (cl:compile-file-pathname ,lisp-filename)))) + (fasl-file-exists + (slime-eval + `(cl:not + (cl:not (cl:probe-file + (cl:compile-file-pathname ,lisp-filename))))))) + (cond + ((not fasl-file-exists) + (load-it lisp-filename)) + ((not (slime-eval `(swank:requires-compile-p ,lisp-filename))) + (load-it fasl-filename)) + ((y-or-n-p "An old FASL file exists. Compile first and \ +load FASL file instead of source file? ") + (slime-eval-async + `(swank:compile-file-for-emacs ,lisp-filename t))) + (t + (load-it lisp-filename))))))))
;;;; Profiling --- swank.lisp.~1.353.~ 2005-12-01 13:32:55.000000000 +0100 +++ swank.lisp 2005-12-03 19:15:26.677303000 +0100 @@ -2382,7 +2382,7 @@ "Returns true if NEW-FILE is newer than OLD-FILE." (> (file-write-date new-file) (file-write-date old-file)))
-(defun requires-compile-p (source-file) +(defslimefun requires-compile-p (source-file) (let ((fasl-file (probe-file (compile-file-pathname source-file)))) (or (not fasl-file) (file-newer-p source-file fasl-file))))