non-proper lists. Reported by Madhu.
recursively interning and replacing strings in a list. (arglist): Replace all strings in arglists with symbols. * contrib/swank-arglists.lisp (decode-required-arg): Move LispWorks specific code into swank-lispworks.lisp.
frame-source-location-for-emacs. Update callers accordingly.
slot-boundp-using-class, slot-value-using-class and slot-makunbound-using-class to account for MOP differences.
additional argument. Update backends accordingly. * swank.lisp (*fasl-directory*): New variable. (fasl-pathname): New function. (compile-file-for-emacs): Use it.
* swank.lisp (setup-stream-indirection): Use it
buffer-file-name to Lisp, not only the directory. Update callers accordingly
([test] interrupt-at-toplevel, [test] interrupt-in-debugger): Those don't work well if there's no REPL thread. * swank-backend.lisp (wait-for-input, wait-for-one-stream): Don't use PEEK-CHAR because we can't interrupt that cleanly. * swank.lisp (simple-serve-requests): Run the REPL inside WITH-CONNECTION. * swank-lispworks.lisp (emacs-connected): Don't install the signal handler here ... (install-sigint-handler): ... use this instead
settings (SBCL only.) Now, `M-- C-c C-c' will compile a function with maximum _speed_ settings (still SBCL only) --- useful to elicit compiler notes. * slime.el (slime-compilation-debug-level): Renamed to `slime-compilation-policy'. (slime-normalize-optimization-level): Renamed to `slime-compute-policy'. * swank.lisp (compile-string-for-emacs): Takes a policy now. (compile-multiple-strings-for-emacs): Ditto. * swank-backend.lisp (swank-compile-string): Change :DEBUG key arg to :POLICY. * swank-scl.lisp, swank-openmcl.lisp, swank-lispworks.lisp * swank-ecl.lisp, swank-corman.lisp, swank-cmucl.lisp, * swank-clisp.lisp, swank-allegro.lisp, swank-sbcl.lisp: Changed accordingly.
string-upcase on lambda-list-argruments, because not all elements must be symbols.
Fetch locals and catch tags with a single RPC. * slime.el (sldb-frame-details): Use it. * swank-backend.lisp (frame-catch-tags): Provide a default implementation. Delete the dummy defs in various backends.
(swank-frame): Deleted. Update implemenetations accordingly. (print-frame): Renamed back from print-swank-frame. * swank.lisp (backtrace): Don't clutter the backtrace with '(:restartable :unknown). For practical purposes :unknown is the same as nil. * slime.el (sldb-compute-frame-face): Only accept nil or t for the :restartable prop.
values of BODY. (compile-from-temp-file): Return T on success. * swank.lisp (collect-notes): Check return type of FUNCTION.
values as COMPILE-FILE. Update backends accordingly.
* slime.el (slime-eol-conversion-fixup): New function. (slime-goto-location-position): Use it. Also add a new position type :offset, so that we don't adjust offsets in strings that were sent over the wire (which uses LF eol-convention). * swank-abcl.lisp * swank-allegro.lisp * swank-clisp.lisp * swank-cmucl.lisp * swank-corman.lisp * swank-ecl.lisp * swank-lispworks.lisp * swank-openmcl.lisp * swank-sbcl.lisp * swank-scl.lisp: Create :offset style positions where needed. * swank-lispworks.lisp (skip-comments): New function. (dspec-stream-position): Use it.
`sldb-non-restartable-frame-line-face'. The former is the face for frames that are surely restartable, the latter for frames that are surely not restartable. If restartability of a frame cannot be reliably determined, the face `sldb-frame-line-face' is used. At the moment, determination of frame restartability is supported by the SBCL backend only. * slime.el (sldb-frame.string): New. (sldb-frame.number): New. (sldb-frame.plist): New. (sldb-prune-initial-frames): Use them. (sldb-insert-frames): Ditto. (sldb-compute-frame-face): New. (sldb-insert-frame): Use `sldb-compute-frame-face' to insert frames with one of the faces described above. * swank.lisp (defslimefun backtrace): Changed return value; each frame is now accompanied with a PLIST which at the moment can contain :RESTARTABLE NIL/T/:UNKNOWN depending on whether the frame is restartable, or not. * swank-backend.lisp (defstruct swank-frame): New structure. (compute-backtrace): Is now supposed to return a list of SWANK-FRAMEs. (print-frame): Renamed to PRINT-SWANK-FRAME. * swank-sbcl.lisp, swank-cmucl.lisp, swank-lispworks.lisp, * swank-allegro.lisp, swank-scl.lisp, swank-openmcl.lisp, * swank-abcl.lisp, swank-clisp.lisp: Adapted to swank-backend changes.
for :fd-handler and :sigio style where we only process events as long we don't block. (wait-for-event/event-loop, read-event) (decode-message, receive-if): Ditto. (process-events): Renamed from read-from-emacs. (handle-requests): Renamed from handle-request. Take timeout argument. Update callers. (process-available-input): Deleted.
* swank.lisp (swank-debugger-hook): Bind a user visible restart to invoke the native debugger. (*global-debugger*): Make this nil by default. (sldb-loop): Minor cleanups. (sldb-break-with-default-debugger): Invoke the native debugger on top of the slime debugger. * slime.el (sldb-setup): Always pop to the debugger buffer. (sldb-activate): Optionally select the window. * swank-sbcl.lisp (sb-thread::get-foreground): Override this as the default implementation is unusable for Slime. * swank-lispworks.lisp (environment-display-notifier): Just return t.
* swank-cmucl.lisp, swank-scl.lisp: ditto.
* swank-backend.lisp (*pending-slime-interrupts*): New variable. (check-slime-interrupts): New function. * swank-lispworks.lisp (receive-if): Use it. * swank-sbcl.lisp, swank-openmcl.lisp: Ditto. * swank.lisp (*slime-interrupts-enabled*): New variable. (with-slime-interrupts, without-slime-interrupts): New macros. (invoke-or-queue-interrupt): New function. (interrupt-worker-thread, eval-for-emacs, swank-debugger-hook) (debug-nth-thread, wait-for-event, read-from-emacs): Use them.
thread to periodically flush streams instead of relying on soft-force-output.
Make force-output and finish-output do the same.
"interactive-p" which should be true for streams which are flushed periodically by the Lisp system. Update the relevant accordingly.
* swank.lisp (make-output-function): Synchronize with Emacs on every 100th chunk of output. (wait-for-event,wait-for-event/event-loop,event-match-p): New functions. Used to selectively wait for some events and to queue the other events. (dispatch-event, read-from-socket-io): Tag non-queueable events with :call. (read-from-control-thread, read-from-emacs): Process :call events only; enqueue the others. (*log-output*): Don't use synonym-streams here. Dereference the symbol until we get at the real stream. (log-event): Escape non-ascii characters more carefully. * swank-backend.lisp (receive-if): New function. Update backends accordingly. (not yet for ABCL and SCL) * slime.el (slime-dispatch-event): Handle ping event.
…eane.) Only implemented for SBCL. * slime.el (slime-compile-with-maximum-debug): New variable. (slime-compile-defun, slime-compile-region): Use it. * swank.lisp (compile-string-for-emacs): Accept new debug argument. Update backend accordingly.