;; seem to add much value, and it takes a lot of space. Perhaps
;; we could do this dispatch with a big CASE statement instead?
(defun ,fn-name (name ,fp ,context ,sc-offsets)
- ;; FIXME: Perhaps put in OPTIMIZE declaration to make this
- ;; byte coded.
- ;;
;; FIXME: It would probably be good to do *STACK-TOP-HINT*
;; tricks to hide this internal error-handling logic from the
;; poor high level user, so his debugger tells him about
;; he ended up inside the system error-handling logic.
(declare (ignorable name ,fp ,context ,sc-offsets))
(let (,@(let ((offset -1))
- (mapcar #'(lambda (var)
- `(,var (sb!di::sub-access-debug-var-slot
- ,fp
- (nth ,(incf offset)
- ,sc-offsets)
- ,context)))
+ (mapcar (lambda (var)
+ `(,var (sb!di::sub-access-debug-var-slot
+ ,fp
+ (nth ,(incf offset)
+ ,sc-offsets)
+ ,context)))
required))
,@(when rest-pos
`((,(nth (1+ rest-pos) args)
- (mapcar #'(lambda (sc-offset)
- (sb!di::sub-access-debug-var-slot
- ,fp
- sc-offset
- ,context))
+ (mapcar (lambda (sc-offset)
+ (sb!di::sub-access-debug-var-slot
+ ,fp
+ sc-offset
+ ,context))
(nthcdr ,rest-pos ,sc-offsets))))))
,@body))
(setf (svref *internal-errors* ,(error-number-or-lose name))
(deferr unknown-error (&rest args)
(error "unknown error:~{ ~S~})" args))
-(deferr object-not-function-error (object)
+(deferr object-not-fun-error (object)
(error 'type-error
:datum object
:expected-type 'function))
:datum object
:expected-type 'fixnum))
-(deferr object-not-function-or-symbol-error (object)
- (error 'type-error
- :datum object
- :expected-type '(or function symbol)))
-
(deferr object-not-vector-error (object)
(error 'type-error
:datum object
:datum object
:expected-type 'symbol))
-(deferr undefined-symbol-error (fdefn-or-symbol)
+(deferr undefined-fun-error (fdefn-or-symbol)
(error 'undefined-function
:name (etypecase fdefn-or-symbol
(symbol fdefn-or-symbol)
(fdefn (fdefn-name fdefn-or-symbol)))))
-(deferr object-not-coerceable-to-function-error (object)
- (error 'type-error
- :datum object
- :expected-type 'coerceable-to-function))
-
-(deferr invalid-argument-count-error (nargs)
+(deferr invalid-arg-count-error (nargs)
(error 'simple-program-error
:format-control "invalid number of arguments: ~S"
:format-arguments (list nargs)))
-(deferr bogus-argument-to-values-list-error (list)
+(deferr bogus-arg-to-values-list-error (list)
(error 'simple-type-error
:datum list
:expected-type 'list
:format-control "attempt to THROW to a tag that does not exist: ~S"
:format-arguments (list tag)))
-(deferr nil-function-returned-error (function)
+(deferr nil-fun-returned-error (function)
(error 'simple-control-error
:format-control
"A function with declared result type NIL returned:~% ~S"
:datum object
:expected-type (layout-class layout)))
-(deferr odd-key-arguments-error ()
+(deferr odd-key-args-error ()
(error 'simple-program-error
:format-control "odd number of &KEY arguments"))
-(deferr unknown-key-argument-error (key-name)
+(deferr unknown-key-arg-error (key-name)
(error 'simple-program-error
:format-control "unknown &KEY argument: ~S"
:format-arguments (list key-name)))
(deferr invalid-array-index-error (array bound index)
- (error 'simple-error
+ (error 'simple-type-error
:format-control
- "invalid array index ~D for ~S (should be nonnegative and <~D)"
- :format-arguments (list index array bound)))
+ "invalid array index ~W for ~S (should be nonnegative and <~W)"
+ :format-arguments (list index array bound)
+ :datum index
+ :expected-type `(integer 0 (,bound))))
(deferr object-not-simple-array-error (object)
(error 'type-error
(handler-case
(let* ((*finding-name* t)
(frame (sb!di:frame-down (sb!di:frame-down (sb!di:top-frame))))
- (name (sb!di:debug-function-name
- (sb!di:frame-debug-function frame))))
+ (name (sb!di:debug-fun-name
+ (sb!di:frame-debug-fun frame))))
(sb!di:flush-frames-above frame)
(values name frame))
(error ()
(sb!di::compiled-frame-escaped frame))
(sb!di:flush-frames-above frame)
(/show0 "returning from within DO loop")
- (return (values (sb!di:debug-function-name
- (sb!di:frame-debug-function frame))
+ (return (values (sb!di:debug-fun-name
+ (sb!di:frame-debug-fun frame))
frame)))))
(error ()
(/show0 "trapped ERROR")
\f
;;;; INTERNAL-ERROR signal handler
+(defvar *internal-error-args*)
+
(defun internal-error (context continuable)
(declare (type system-area-pointer context))
(declare (ignore continuable))
(sb!alien:sap-alien context (* os-context-t)))))
(/show0 "about to bind ERROR-NUMBER and ARGUMENTS")
(multiple-value-bind (error-number arguments)
- (sb!vm:internal-error-arguments alien-context)
- (/show0 "back from INTERNAL-ERROR-ARGUMENTS, ERROR-NUMBER=..")
+ (sb!vm:internal-error-args alien-context)
+
+ ;; There's a limit to how much error reporting we can usefully
+ ;; do before initialization is complete, but try to be a little
+ ;; bit helpful before we die.
+ (/show0 "back from INTERNAL-ERROR-ARGS, ERROR-NUMBER=..")
(/hexstr error-number)
- (/show0 "ARGUMENTS=..")
+ (/show0 "cold/low ARGUMENTS=..")
(/hexstr arguments)
+ (unless *cold-init-complete-p*
+ (%primitive print "can't recover from error in cold init, halting")
+ (%primitive sb!c:halt))
+
(multiple-value-bind (name sb!debug:*stack-top-hint*)
(find-interrupted-name)
(/show0 "back from FIND-INTERRUPTED-NAME")
(cond ((null handler)
(error 'simple-error
:format-control
- "unknown internal error, ~D? args=~S"
+ "unknown internal error, ~D, args=~S"
:format-arguments
(list error-number
- (mapcar #'(lambda (sc-offset)
- (sb!di::sub-access-debug-var-slot
- fp sc-offset alien-context))
+ (mapcar (lambda (sc-offset)
+ (sb!di::sub-access-debug-var-slot
+ fp sc-offset alien-context))
arguments))))
((not (functionp handler))
(error 'simple-error
:format-arguments
(list error-number
handler
- (mapcar #'(lambda (sc-offset)
- (sb!di::sub-access-debug-var-slot
- fp sc-offset alien-context))
+ (mapcar (lambda (sc-offset)
+ (sb!di::sub-access-debug-var-slot
+ fp sc-offset alien-context))
arguments))))
(t
(funcall handler name fp alien-context arguments)))))))))
+
+(defun control-stack-exhausted-error ()
+ (let ((sb!debug:*stack-top-hint* nil))
+ (infinite-error-protect
+ (format *error-output*
+ "Control stack guard page temporarily disabled: proceed with caution~%")
+ (error 'control-stack-exhausted))))
+
+
+