diff options
Diffstat (limited to 'Lisp/moxie/repl.lisp.old')
-rw-r--r-- | Lisp/moxie/repl.lisp.old | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/Lisp/moxie/repl.lisp.old b/Lisp/moxie/repl.lisp.old deleted file mode 100644 index 8ae7408..0000000 --- a/Lisp/moxie/repl.lisp.old +++ /dev/null @@ -1,87 +0,0 @@ -(in-package :moxie) - -(defvar *repl-motd* - "Welcome to Moxie! - -To get help, enter :HELP at the prompt.") - -(defvar *repl-help* - "Top level commands: - :R [num] Invoke restart NUM, or list restarts. - :HELP :H :? Display this message.") - -(defvar *repl-level* 0) - -(defun start-repl (&optional (use-result-stream t)) - (let ((*moxie-result-stream* (or (and use-result-stream (make-result-stream)) - *error-output*))) - (format t "~%~A~%" *repl-motd*) - (send-command :repl-result `(:prompt ,(repl-prompt))))) - -(defmethod moxie-event-handler ((event (eql :eval)) &rest args) - (let* ((*debugger-hook* #'repl-dbg) - (*repl-level* (1+ *repl-level*)) - (lex-level *repl-level*)) - (dolist (form args) - (force-output) - (restart-case (eval form) - (abort () - :report (lambda (stream) - ;; I know this looks weird, but because the formatter is called - ;; from the condition handler's environment, and because - ;; *repl-level* is special, at the time of evaluation, - ;; *repl-level* may be higher than lex-level. - (if (eql lex-level *repl-level*) - (format stream "Abort handling of current request.") - (format stream "Return to REPL level ~A." lex-level))) - (send-command :repl-result `(:prompt ,(repl-prompt)))))))) - -(defun repl-dbg (condition debugger-hook) - "This debugger hook just sends a message to Moxie when the debugger has -been entered, so Moxie can keep track of the prompt." - (declare (ignore debugger-hook)) - (send-command :repl-dbg `(:condition ,condition))) - -(defmacro eval-hook (&rest forms) - "Ensure all FORMS are valid for evaluation before calling EVAL-HOOK-HELPER." - (let ((helped-forms (mapcar (lambda (x) `(quote ,x)) forms))) - `(eval-hook-helper ,@helped-forms))) - -(defun eval-hook-helper (&rest forms) - "Evaluate all FORMS, sending the results to the Moxie output stream. When finished -processing, send the prompt." - (do* ((f forms (cdr f)) - (form (car f) (car f))) - ((null f)) - (case form - (:r (let ((restarts (compute-restarts)) - (num (cadr f))) - (if (and (integerp num) - (> num 0) (<= num (length restarts))) - (progn - (setf f (cdr f)) - (invoke-restart (elt restarts (1- num)))) - (print-restarts restarts)))) - ((:? :h :help) (format t "~A~%" *repl-help*)) - (t (let (values) - (setq - form) - (setq values (multiple-value-list (eval -))) - (setq /// // // / / values *** ** ** * * (car /)) - (send-command :repl-result `(:values ,@values)))))) - (send-command :repl-result `(:prompt ,(repl-prompt)))) - -(defun print-restarts (restarts) - (format t "Available restarts: ~%") - (do ((c restarts (cdr c)) - (i 1 (1+ i))) - ((null c)) - (format t " ~A ~A~%" i (car c))) - (format t "Invoke restarts with :R [num]~%")) - -(defun repl-prompt () - "Compute the prompt for Moxie's REPL." - (format nil "~A~@[[~A]~]> " - (if (eql *package* (find-package :cl-user)) - "CL-USER" - (package-name *package*)) - (when (> *repl-level* 1) *repl-level*)))
\ No newline at end of file |