(used on non-x86 platforms) being a more complete solution then what
is done on x86.
+ On x86/linux large portions of tests/debug.impure.lisp have been commented
+ out as failures. The probable culprit for these problems is in x86-call-context
+ (things work fine on x86/freebsd).
+
More generally, the debugger internals suffer from excessive x86/non-x86
conditionalization and OAOOMization: refactoring the common parts would
be good.
(sparc and x86 at least)
Since SBCL 0.8.20.1 this is hidden unless *SHOW-ENTRY-POINT-DETAILS*
- is true.
+ is true (instead there appear two TEST frames at least on ppc). The
+ underlying cause seems to be that SB-C::TAIL-ANNOTATE will not merge
+ the tail-call for the XEP, since Python has by that time proved that
+ the function can never return; same happens if the function holds an
+ unconditional call to ERROR.
355: change-class of generic-function
(reported by Bruno Haible)
changes in sbcl-0.8.21 (0.9alpha.1?) relative to sbcl-0.8.20:
+ * incompatible change: forms evaluated in the REPL now use the
+ global optimization policy.
+ * incompatible change: user- and system-initialization files are
+ no longer processed with LOAD, but by READ and EVAL; hence the
+ global optimization policy, startup package, readtable, etc,
+ can be set by them.
* internal entry point details and argument counts no longer appear
- in backtraces unless explicitly requested by setting
- SB-DEBUG:*SHOW-ENTRY-POINT-DETAILS*.
+ in backtraces unless explicitly requested by setting
+ SB-DEBUG:*SHOW-ENTRY-POINT-DETAILS*.
* built-in and standard functions no longer have names like "top
- level local call to FOO".
+ level local call to FOO".
* fixed bug 32: functions defined in non-null lexical environments
- now have more legible printed representation
+ now have more legible printed representation
* fixed bug 33: functions defined in non-null lexical environemnts
- are now more amenable to inspection by INSPECT.
+ are now more amenable to inspection by INSPECT.
* workaround for bug 354: XEPs no longer appear in backtraces unless
- explicitly requested.
+ explicitly requested.
* fixed bug: COUNT and EQUAL no longer issue compiler efficiency
notes when operating on objects known to be SIMPLE-BIT-VECTORs.
(reported by Lutz Euler)
"Evaluate FORM, returning whatever it returns and adjusting ***, **, *,
+++, ++, +, ///, //, /, and -."
(setf - form)
- (let ((results
- (multiple-value-list
- (eval-in-lexenv form
- (make-null-interactive-lexenv)))))
+ (let ((results (multiple-value-list (eval form))))
(setf /// //
// /
/ results
(finish-output (symbol-value name)))
(values))
+(defun process-init-file (truename)
+ (when truename
+ (restart-case
+ (with-open-file (s truename :if-does-not-exist nil)
+ (flet ((next ()
+ (let ((form (read s nil s)))
+ (if (eq s form)
+ (return-from process-init-file nil)
+ (eval form)))))
+ (loop
+ (restart-case
+ (handler-bind ((error (lambda (e)
+ (error
+ "Error during processing of ~
+ initialization file ~A:~%~% ~A"
+ truename e))))
+ (next))
+ (continue ()
+ :report "Ignore and continue processing.")))))
+ (abort ()
+ :report "Skip rest of initialization file."))))
+
+(defun process-eval-options (eval-strings)
+ (/show0 "handling --eval options")
+ (flet ((process-1 (string)
+ (multiple-value-bind (expr pos) (read-from-string string)
+ (unless (eq string (read-from-string string nil string :start pos))
+ (error "More the one expression in ~S" string))
+ (eval expr)
+ (flush-standard-output-streams))))
+ (restart-case
+ (dolist (expr-as-string eval-strings)
+ (/show0 "handling one --eval option")
+ (restart-case
+ (handler-bind ((error (lambda (e)
+ (error "Error during processing of --eval ~
+ option ~S:~%~% ~A"
+ expr-as-string e))))
+ (process-1 expr-as-string))
+ (continue ()
+ :report "Ignore and continue with next --eval option.")))
+ (abort ()
+ :report "Skip rest of --eval options."))))
+
;;; the default system top level function
(defun toplevel-init ()
(/show0 "entering TOPLEVEL-INIT")
;; on.)
(restart-case
(progn
- (flet ((process-init-file (truename)
- (when truename
- (unless (load truename)
- (error "~S was not successfully loaded."
- truename))
- (flush-standard-output-streams))))
- (process-init-file sysinit-truename)
- (process-init-file userinit-truename))
-
- ;; Process --eval options.
- (/show0 "handling --eval options in TOPLEVEL-INIT")
- (dolist (expr-as-string (reverse reversed-evals))
- (/show0 "handling one --eval option in TOPLEVEL-INIT")
- (let ((expr (with-input-from-string (eval-stream
- expr-as-string)
- (let* ((eof-marker (cons :eof :eof))
- (result (read eval-stream
- nil
- eof-marker))
- (eof (read eval-stream nil eof-marker)))
- (cond ((eq result eof-marker)
- (error "unable to parse ~S"
- expr-as-string))
- ((not (eq eof eof-marker))
- (error
- "more than one expression in ~S"
- expr-as-string))
- (t
- result))))))
- (eval expr)
- (flush-standard-output-streams))))
- (continue ()
- :report
- "Continue anyway (skipping to toplevel read/eval/print loop)."
+ (process-init-file sysinit-truename)
+ (process-init-file userinit-truename)
+ (process-eval-options (reverse reversed-evals)))
+ (toplevel ()
+ :report "Skip to toplevel READ/EVAL/PRINT loop."
(/show0 "CONTINUEing from pre-REPL RESTART-CASE")
(values)) ; (no-op, just fall through)
(quit ()