Error handling fixes
authordrewc <drewc@tech.coop>
Thu, 28 Aug 2008 20:17:41 +0000 (13:17 -0700)
committerdrewc <drewc@tech.coop>
Thu, 28 Aug 2008 20:17:41 +0000 (13:17 -0700)
darcs-hash:20080828201741-39164-3681c55dbcfda08944e3a285cbca9e4e4a12f17f.gz

src/attribute.lisp
src/description-class.lisp
src/description.lisp

index d332f60..8f3f862 100644 (file)
                (with-function-access 
                  (slot-value-using-class class attribute property))
                (funcall fn layer (attribute-description attribute)))
-           (funcall fn layer (attribute-description attribute))))))
+           (handler-case (funcall fn layer (attribute-description attribute))
+             (error ()
+               (warn "Error calling ~A" fn)))))))
                    
              
 
index fb6e7ff..de1fc0c 100644 (file)
@@ -92,7 +92,7 @@
                (mapcar 
                 (lambda (slot)
                   (or (find-attribute description 
-                                      (slot-definition-name slot))
+                                      (slot-definition-name slot) nil)
                       (let* ((*init-time-description* description)
                              (attribute-class (or 
                                                (ignore-errors 
                                initargs )
                         (setf (slot-value description (attribute-name attribute)) 
                               (attribute-class attribute))
-                        (apply #'change-class attribute  (attribute-class attribute)
+                        (apply #'change-class attribute  (find-class (attribute-class attribute))
                                initargs)))))))))
 
 
   (print-unreadable-object (object stream :type t :identity t)
     (princ  (ignore-errors (description-print-name (find-layer object))) stream)))
 
-(defun find-description (name)
-  (find-layer (find-class (defining-description name))))
+(defun find-description (name &optional (errorp t))
+  (let ((class (find-class (defining-description name) errorp)))
+    (when class (find-layer class))))
 
 
 
index b64f611..bb1f88a 100644 (file)
           #'attribute-active-p
           (description-attributes description)))
 
-(defun find-attribute (description attribute-name)
-  (find attribute-name (description-attributes description)
-       :key #'attribute-name))
+(defun find-attribute (description attribute-name &optional (errorp t))
+  (or (find attribute-name (description-attributes description)
+           :key #'attribute-name)
+      (when errorp (error "No attribute named ~A found in ~A" attribute-name description))))
 
 (define-layered-function description-active-descriptions (description)
   (:method ((description standard-description-object))