(setf (dstate-output-state dstate)
:block-boundary))))
-;;; Add hooks to track to track the source code in SEGMENT during
-;;; disassembly. SFCACHE can be either NIL or it can be a
-;;; SOURCE-FORM-CACHE structure, in which case it is used to cache
-;;; forms from files.
+;;; Add hooks to track the source code in SEGMENT during disassembly.
+;;; SFCACHE can be either NIL or it can be a SOURCE-FORM-CACHE
+;;; structure, in which case it is used to cache forms from files.
(defun add-source-tracking-hooks (segment debug-fun &optional sfcache)
(declare (type segment segment)
(type (or null sb!di:debug-fun) debug-fun)
(error "can't compile a lexical closure"))
(compile nil lambda)))
-(defun compiled-fun-or-lose (thing &optional (name thing))
+(defun valid-extended-function-designator-for-disassemble-p (thing)
(cond ((legal-fun-name-p thing)
(compiled-fun-or-lose (fdefinition thing) thing))
((functionp thing)
((and (listp thing)
(eq (car thing) 'lambda))
(compile nil thing))
- (t
- (error "can't make a compiled function from ~S" name))))
+ (t nil)))
+
+(defun compiled-fun-or-lose (thing &optional (name thing))
+ (let ((fun (valid-extended-function-designator-for-disassemble-p thing)))
+ (if fun
+ fun
+ (error 'simple-type-error
+ :datum thing
+ :expected-type '(satisfies valid-extended-function-designator-for-disassemble-p)
+ :format-control "can't make a compiled function from ~S"
+ :format-arguments (list name)))))
(defun disassemble (object &key
(stream *standard-output*)