Long story: motivation
I have a CL code that breaks on SORT or MAPCAR with some error that a number (let's say, 25) is not a list. This tells me something is wrong with the data structure that I pass them. So, I put (BREAK) in the code before the place where error occurs. It looks something like this:
(sort
(progn
(break)
(mapcar (lambda (pair)
(list (car pair) (cdr pair)))
(hash-table-plist (state-removed state)))
#'<
:key #'car)
(To give a bit more context, the idea here is to transform hash table (STATE-REMOVED STATE) into a list of pairs sorted by a key, the error is that instead of HASH-TABLE-PLIST I should use HASH-TABLE-ALIST)
Once the code hits (BREAK) it sends me into the debugger. At this stage I could step through the code, but I decided to inspect the STATE. Unfortunately, the STATE itself is obtained by WITH-SLOTS-macro from an object which is a slot in another object, and the whole function is actually generated by the SKETCH macro from the sketch library... Long story short, to get to (STATE-REMOVED STATE) I need to go through the layers of slot accesses in the inspector.
TL;DR: actual question
And here is a problem: now I want to call HASH-TABLE-PLIST either on the object which I'm inspecting or on a slot of this object. How can I access either of them (just for comparison, in Smalltalk debugger I always have access to self pseudo-variable to get stuff out)? There is slime-inspector-eval, but how do I pass things for which I don't have explicit local bindings? Documentation on slime-inspector-eval doesn't say much.