On 10/31/2013 01:07 AM, Helmut Eller wrote:
On Wed, Oct 30 2013, Christophe Rhodes wrote:

I think I can reproduce the problem.

Given:

/tmp/bar.asd containing:
(asdf:defsystem bar :contents ((:file "baz")))

/tmp/baz.lisp containing:
(defun frob (x) (1+ x))

/tmp/foo.lisp containing:
(require :bar)

and neither /tmp/foo.fasl nor /tmp/bar.fasl existing, then executing
from the toplevel
  (load "/tmp/bar.asd")
and subsequently hitting C-c C-c on the (require :bar) form in foo.lisp
will result in (describe 'frob) thinking that it has a source location
of foo.lisp, rather than baz.lisp.
Indeed. I can reproduce that too.  If we do it without ASDF we
can put
  (load (compile-file "baz.lisp"))
in foo.lisp and press C-c C-c on it.

This happens because SWANK-COMPILE-STRING in swank-sbcl.lisp uses with
WITH-COMPILATION-UNIT to pass :source-namestring to nested invocations
of COMPILE-FILE.  Since LOAD is also called inside that
WITH-COMPILATION-UNIT the invocation in foo.lisp picks up the wrong
value for :source-namestring.

I moved LOAD outside and this problem should no longer occur.  A
potential downside is that (redefinition) warnings that are emitted
during LOAD are no longer picked up by SLIME.

Helmut

I see you made changes in CVS. Does quicklisp pick these up if I update-dist? Or do I need to reinstall Slime from CVS to get this?



I was able to isolate the problem to this very simple example.
I''m running SBCL 1.1.11 and Slime 2013-09-29.

First, I deleted ~/.cache/common-lisp/*

Then I created a new project:

(ql:quickload "quickproject")
(quickproject:make-project "/home/jcunningham/myproj/" :depends-on '(:cl-ppcre))

I loaded the project by creating /tmp/test.lisp with the following line and compiling it:

(asdf:load-system "myproj")

And executed the following:

(describe 'cl-ppcre:regex-apropos)

; compiling (DESCRIBE (QUOTE CL-PPCRE:REGEX-APROPOS))
CL-PPCRE:REGEX-APROPOS
  [symbol]

REGEX-APROPOS names a compiled function:
  Lambda-list: (REGEX &OPTIONAL PACKAGES &KEY (CASE-INSENSITIVE T))
  Derived type: (FUNCTION (T &OPTIONAL T &KEY (:CASE-INSENSITIVE T))
                 (VALUES &OPTIONAL))
  Documentation:
    Similar to the standard function APROPOS but returns a list of all
    symbols which match the regular expression REGEX.  If CASE-INSENSITIVE
    is true and REGEX isn't already a scanner, a case-insensitive scanner
    is used.
  Source file: /tmp/test.lisp

--Jeff