On Apr 1, 2005 4:48 PM, rpgoldman@sift.info rpgoldman@sift.info wrote:
The proximate cause seems to be PRINT-DOCUMENTATION, which pulls the documentation and then tries to print it, as can be seen in this error:
CL-USER(171): (documentation *taems-model* t) Error: Attempt to access the plist field of #<TAEMS-MODEL @ #x72023142> which is not a symbol. [condition type: SIMPLE-ERROR]
Restart actions (select using :continue): 0: Return to Top Level (an "abort" restart). 1: Abort entirely from this process.
Does this mean that ACL is not doing the Right Thing with the documentation function? Or is CLOUSEAU wrong to assume that everything will have documentation? Seems like documentation might not be defined on objects, if I read the CLHS correctly.
I'd say that ACL does indeed have a problem with documentation. According to CLHS, "The generic function documentation returns the documentation string associated with the given object if it is available; otherwise it returns nil." On SBCL you also get a warning saying that the type of documentation you asked for is not supported. But throwing an exception seems wrong; CLHS says that DOCUMENTATION has no exceptional situations.
And, judging by the cryptic nature of the error, I'm almost certain that it's an ACL bug.
The following change to PRINT-DOCUMENTATION seems to fix my problem. Not sure how right it is, though.
(defun print-documentation (object pane) "Print OBJECT's documentation, if any, to PANE" (when (catch 'no-docs (handler-bind ((warning #'muffle-warning) (error #'(lambda (c) (declare (ignore c)) (throw 'no-docs nil)))) (documentation object t))) (with-heading-style (pane) (format pane "~&Documentation: ")) (princ (documentation object t) pane)))
That catch-throw trickery looks a little ugly, but the change shouldn't hurt anything on any other implementations, so I'll commit it. Thanks.
-Peter