Development environments such as Slime benefit from being able attach additional source location information (eg. buffer associations) to functions. Currently Slime does this by patching SBCL in order to be able to attach its own plists to SB-C::DEBUG-SOURCE structures.
I propose we add :SOURCE-PLIST option to WITH-COMPILATION-UNIT, with the following tentative spec:
:SOURCE-PLIST Plist-Form
Attaches the value returned by the Plist-Form to internal source location information of functions and definitions compiled in within the dynamic contour. Primarily for use by development environments, in order to eg. associate function definitions with editor-buffers. Can be accessed as SB-INTROSPECT:DEFINITION-SOURCE-PLIST. If multiple, nested WITH-COMPILATION-UNITs provide :SOURCE-PLISTs, they are appended togather, innermost left, unless :OVERRIDE is true, in which case previous :SOURCE-PLISTs are ignored.
The space-costs of this are nominal: size of DEBUG-SOURCE structures is increased by one slot/word, but there is only one of those per compiled file -- though one per function loaded from source or entered at the toplevel.
I think calling it a :SOURCE-PLIST is a reasonable compromise between more abstract names such as :INFO, the documentary nature of the -PLIST vrt. the appending behaviour, by YMMW.
To illustrate the usage, the significant part of SWANK-COMPILE-STRING[*] could eg. become
(with-compilation-unit (:source-plist (list 'emacs-buffer buffer 'emacs-string string 'emacs-position position)) (with-input-from-string (s string) (load s))))))
I've the SBCL parts of this implemented in my local tree, and most of swank-sbcl adapted for this.
The questions to SBCL and Slime folks respectively:
1. Does the interface seem sane and something we would be happy to support? Are the non-slime use cases this doesn't reasonably cover?
2. Does this fit the needs of Slime? If this existed on other platforms as well, would you be tempted to use this instead of whatever you currently use?
[*] To nitpick, I venture the opinion that SWANK-COMPILE-STRING is a misnomer, as as far as I can tell the intention is something like "evaluate the forms contained in this string as if they had been entered at the toplevel, but making sure all functions are compiled".
Cheers,
-- Nikodemus Schemer: "Buddha is small, clean, and serious." Lispnik: "Buddha is big, has hairy armpits, and laughs."