X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Finterr.lisp;h=82cc54991d9cf1ca97abbdf21b91f3941383fd33;hb=43c6634142a96e1d1bab2efe1a39cd8234903c41;hp=c3f039f838cb0c53ac0709ff56d89db7c69ad025;hpb=08d05510b51708853ca998154d8096b21d85edab;p=sbcl.git diff --git a/src/code/interr.lisp b/src/code/interr.lisp index c3f039f..82cc549 100644 --- a/src/code/interr.lisp +++ b/src/code/interr.lisp @@ -236,12 +236,14 @@ :operands (list this that))) (deferr object-not-type-error (object type) - (error (if (and (%instancep object) - (layout-invalid (%instance-layout object))) - 'layout-invalid - 'type-error) - :datum object - :expected-type type)) + (if (invalid-array-p object) + (invalid-array-error object) + (error (if (and (%instancep object) + (layout-invalid (%instance-layout object))) + 'layout-invalid + 'type-error) + :datum object + :expected-type type))) (deferr layout-invalid-error (object layout) (error 'layout-invalid @@ -391,6 +393,24 @@ (/show0 "trapped DEBUG-CONDITION") (values "" nil))))) + +(defun find-caller-of-named-frame (name) + (unless *finding-name* + (handler-case + (let ((*finding-name* t)) + (do ((frame (sb!di:top-frame) (sb!di:frame-down frame))) + ((null frame)) + (when (and (sb!di::compiled-frame-p frame) + (eq name (sb!debug::clean-debug-fun-name + (sb!di:debug-fun-name + (sb!di:frame-debug-fun frame))))) + (let ((caller (sb!di:frame-down frame))) + (sb!di:flush-frames-above caller) + (return caller))))) + ((or error sb!di:debug-condition) () + nil) + (sb!di:debug-condition () + nil)))) ;;;; INTERNAL-ERROR signal handler @@ -494,7 +514,7 @@ (error 'undefined-alien-function-error)) #!-win32 -(define-alien-variable current-memory-fault-address unsigned-long) +(define-alien-variable current-memory-fault-address unsigned) #!-win32 (defun memory-fault-error ()