Congratulations! You've met the autoloader, now level up...
In order to reduce initial system boot times (and also to partially optimize for booting over the network), not all functions corresponding to symbols in the base ABCL system are loaded initially. Instead, the symbol function slot contains a stub which when first executed as a function loads the necessary code, which as a side effect also populates the symbol plist.
Users of the implementation may currently interact with this mechanism meaningfullly through the EXT:AUTOLOADP and EXT:RESOLVE functions, which tell you if a symbol needs to be autoloaded and to resolve it, respectively.
Using these functions we may define
(defun maybe-resolve-symbol-plist (symbol)
(when (autoloadp symbol)
(resolve symbol))
(symbol-plist symbol))
which you can then use in your code to change the source locations.
yers,
Mark
--
A: Because it messes up the order in which people normally read text.Q: Why is top-posting such a bad idea?
A: Top-posting.
Q: What is the most annoying thing in email?
Thanks.
More details, I found that after the REPL started:
; SLIME 2011-10-19
CL-USER> (symbol-plist 'disassemble)
NIL
CL-USER> (disassemble 'disassemble)
; Compiled from "disassemble.lisp"
... very long output
NIL
CL-USER> (symbol-plist 'disassemble)
(SYSTEM::%SOURCE (#P"L:/abcl-src-1.1.1/src/org/armedbear/lisp/disassemble.lisp" . 1693))
After I called DISASSEMBLE, the result of (symbol-plist 'disassemble) was not NIL. How can I make the result of the first (symbol-plist 'disassemble) no NIL?