X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftoplevel.lisp;h=830c1c25aabdbec929db905fb1dc48a3f853c2b9;hb=abd50c820df25616883a6850df1780044365137e;hp=f77abc194853746e475e20af61e0ac9620163bcd;hpb=4898ef32c639b1c7f4ee13a5ba566ce6debd03e6;p=sbcl.git diff --git a/src/code/toplevel.lisp b/src/code/toplevel.lisp index f77abc1..830c1c2 100644 --- a/src/code/toplevel.lisp +++ b/src/code/toplevel.lisp @@ -25,9 +25,7 @@ ;;; specials initialized by !COLD-INIT ;;; FIXME: These could be converted to DEFVARs. -(declaim (special *gc-inhibit* *need-to-collect-garbage* - *after-gc-hooks* - #!+(or x86 x86-64) *pseudo-atomic-atomic* +(declaim (special #!+(or x86 x86-64) *pseudo-atomic-atomic* #!+(or x86 x86-64) *pseudo-atomic-interrupted* sb!unix::*interrupts-enabled* sb!unix::*interrupt-pending* @@ -271,16 +269,17 @@ steppers to maintain contextual information.") "Evaluate FORM, returning whatever it returns and adjusting ***, **, *, +++, ++, +, ///, //, /, and -." (setf - form) - (let ((results (multiple-value-list (eval form)))) - (setf /// // - // / - / results - *** ** - ** * - * (car results))) - (setf +++ ++ - ++ + - + -) + (unwind-protect + (let ((results (multiple-value-list (eval form)))) + (setf /// // + // / + / results + *** ** + ** * + * (car results))) + (setf +++ ++ + ++ + + + -)) (unless (boundp '*) ;; The bogon returned an unbound marker. ;; FIXME: It would be safer to check every one of the values in RESULTS, @@ -297,8 +296,10 @@ steppers to maintain contextual information.") *error-output* *query-io* *standard-output* - *trace-output*)) - (finish-output (symbol-value name))) + *trace-output* + *terminal-io*)) + ;; FINISH-OUTPUT may block more easily than FORCE-OUTPUT + (force-output (symbol-value name))) (values)) (defun process-init-file (truename) @@ -585,6 +586,7 @@ steppers to maintain contextual information.") (scrub-control-stack) (sb!thread::get-foreground) (unless noprint + (flush-standard-output-streams) (funcall *repl-prompt-fun* *standard-output*) ;; (Should *REPL-PROMPT-FUN* be responsible for doing its own ;; FORCE-OUTPUT? I can't imagine a valid reason for it not to