> The following code was modified a bit from the CLG code. I hope it
> helps.
>
> #+(and :cmu (not :cmu19a))
> (let ((interactive-eval #'ext:interactive-eval))
> (declare (function interactive-eval))
> (defun ext:interactive-eval (form)
> (let ((values (multiple-value-list (funcall interactive-eval form))))
> (UPDATE-R)
> (values-list values))))
>
> #+:cmu19a
> (fwrappers:define-fwrapper UPDATE-R-FWRAPPER (form)
> (let ((values (multiple-value-list (fwrappers:call-next-function form))))
> (UPDATE-R)
> (values-list values)))
>
> #+:cmu19a
> (fwrappers:fwrap 'ext:interactive-eval #'UPDATE-R-FWRAPPER
> :type :update-r)
>
I'm using 19a. The fwrapper version seems to have no effect. As a
test, I also tried:
(defparameter *count* 0)
(fwrappers:fwrap 'ext:interactive-eval
(fwrappers:define-fwrapper incrementor (form)
(let ((values (multiple-value-list (fwrappers:call-next-function form))))
(incf *count*)
(values-list values)))
:type t)
With both wrappers defined, calling ext:interactive-eval manually
causes the wrappers to be called. However, as far as I can tell,
ext:interactive-eval is NOT called automatically as part of the REPL?
The form that involves redefining ext:interactive-eval causes my
system to segfault.
Cheers,
rif