handle multiple return values and handle reple special results better

This commit is contained in:
David Botton 2024-06-26 00:20:50 -04:00
parent eaf3d4d3ea
commit 0e2aac306b
2 changed files with 24 additions and 16 deletions

View file

@ -84,8 +84,8 @@ provide an interactive console.)"))
(defun capture-eval (form &key (capture-console t)
(capture-result t)
(capture-result-form "=>~A~%")
(eval-form "~A~%=>~A~%")
(capture-result-form "=>~S~%")
(eval-form "~A~%=>~S~%")
(clog-obj nil)
(private-console-win nil)
(eval-in-package "clog-user"))
@ -136,16 +136,23 @@ provide an interactive console.)"))
(*default-title-class* *builder-title-class*)
(*default-border-class* *builder-border-class*)
(*package* (find-package (string-upcase eval-in-package))))
(setf eval-result (eval (read-from-string (format nil "(progn ~A)" form))))
(unless capture-result
(format console capture-result-form eval-result))
(when (typep console 'console-out-stream)
(close console))
(close *query-io*)
(values
(format nil eval-form result eval-result)
*package*
eval-result))))))))))
(setf eval-result (multiple-value-list (eval (read-from-string (format nil "(progn ~A)" form)))))
(unless capture-result
(mapcar (lambda (r)
(format console capture-result-form r))
eval-result))
(when (typep console 'console-out-stream)
(close console))
(close *query-io*)
(let ((res ""))
(mapcar (lambda (r)
(setf res (format nil "~A~A" res (format nil eval-form result r))))
eval-result)
(values
res
*package*
(first eval-result)
eval-result)))))))))))
(if *clog-repl-eval-on-main-thread*
(trivial-main-thread:call-in-main-thread cef :blocking t)
(funcall cef))))

View file

@ -105,10 +105,7 @@
(setf clog-user::*body* nil))))
(clog-terminal:echo target "Use clog-user:*body* to access the clog-builder-repl window.")))
(t
(setf data (format nil "(let ((tmp (progn ~A)))
(setf /// //) (setf // /) (setf / (list tmp))
(setf *** **) (setf ** *) (setf * tmp))" data))
(multiple-value-bind (result new-package)
(multiple-value-bind (result new-package first-eval-result)
(capture-eval data :clog-obj panel
:private-console-win (when *clog-repl-private-console*
(window-param (parent (parent panel))))
@ -117,4 +114,8 @@
:eval-in-package (text-value (package-div panel)))
(setf (text-value (package-div panel))
(string-downcase (package-name new-package)))
(let ((*package* new-package))
(eval `(let ((tmp ',first-eval-result))
(setf /// //) (setf // /) (setf / (list tmp))
(setf *** **) (setf ** *) (setf * tmp))))
(clog-terminal:echo target result)))))