[slime-devel] Re: eval-string bug?

Helmut Eller e9626484 at stud3.tuwien.ac.at
Sat Jan 24 09:21:54 UTC 2004


Luke Gorrie <luke at bluetail.com> writes:

> Maybe a better idea would have been to go for chaos? We send N
> requests to Lisp at a time, and it replies in any order (with an ID
> tag to identify the result), we can get multiple unknown threads
> hitting the debugger at the same time, etc.

I tried to remove the state machine some time ago, but wasn't very
successful.  The id argument in eval-string stems from that attempt.

Here some problems I encountered:

The current state stack contains (state-name . variables) pairs.  It
wasn't obvious to me where I should store the variables instead.
Including the variables in the request itself doesn't work, because
the variables contain things like window configurations.  Storing them
in a buffer -- e.g., the variables of the debugging state in the sldb
buffer -- doesn't work because the user can delete the buffer.  So I
stored them on a stack again :-)

Another problem was that there where no 'activate' events anymore.
When you exited from the debugger at level 3 to level 2, Emacs didn't
notice it.  My idea was to generate the activate events at the Lisp
side.  So I changed the Lisp sldb-loop and sent an 'activate-debugger'
event every time before reading the next request. The sldb-loop looked
like this:

 (send-to-emacs '(:initialize-debugger ...))
 (loop
   (send-to-emacs '(:activate-debugger ...))
   (read-from-emacs))

This too was problematic, because the :initialize-debugger event could
cause a RPC from Emacs to Lisp (e.g., fetching the backtrace).  But
the result of the RPC arrived after the :activate-event.  I gave at
this point.

I think we cannot blindly accept every event at any time.  Maybe we
need something like a mailbox with Erlang-style selective receive :-)

Helmut.










More information about the slime-devel mailing list