diff --git a/code/print.lisp b/code/print.lisp index c7ba1531b071a636859f5a0dc402b22c77ec4406..97412ca643dec8d945aa3838907ed42c186d0980 100644 --- a/code/print.lisp +++ b/code/print.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman or slisp-group@cs.cmu.edu. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/print.lisp,v 1.58 1993/08/17 22:32:59 ram Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/print.lisp,v 1.59 1993/08/20 08:10:25 ram Exp $") ;;; ;;; ********************************************************************** ;;; @@ -1104,19 +1104,26 @@ ;;; Otherwise, call PCL if it's loaded. If not, print unreadably. (defun output-instance (instance stream) - (let ((class (class-of instance))) - (cond ((typep class 'basic-structure-class) - (funcall (or (basic-structure-class-print-function class) - #'default-structure-print) - instance stream *current-level*)) - ((and (fboundp 'dylan::dylan-instance-p) - (dylan::dylan-instance-p instance)) - (dylan::%print-dylan-instance instance stream)) - ((fboundp 'print-object) - (print-object instance stream)) - (t - (print-unreadable-object (instance stream :identity t) - (write-string "Unprintable Instance" stream)))))) + (let ((layout (typecase instance + (funcallable-instance (%instance-ref instance 0)) + (instance (%funcallable-instance-layout instance))))) + + (if (typep layout 'layout) + (let ((class (layout-class layout))) + (cond ((typep class 'basic-structure-class) + (funcall (or (basic-structure-class-print-function class) + #'default-structure-print) + instance stream *current-level*)) + ((and (fboundp 'dylan::dylan-instance-p) + (dylan::dylan-instance-p instance)) + (dylan::%print-dylan-instance instance stream)) + ((fboundp 'print-object) + (print-object instance stream)) + (t + (print-unreadable-object (instance stream :identity t) + (write-string "Unprintable Instance" stream))))) + (print-unreadable-object (instance stream :identity t) + (write-string "Unprintable Instance" stream))))) ;;;; Integer, ratio, and complex printing. (i.e. everything but floats)