[mcclim-cvs] CVS mcclim/Apps/Listener

rgoldman rgoldman at common-lisp.net
Tue Sep 4 20:45:54 UTC 2007


Update of /project/mcclim/cvsroot/mcclim/Apps/Listener
In directory clnet:/tmp/cvs-serv20834

Modified Files:
	dev-commands.lisp 
Log Message:
Made com-show-class-slots check to make sure that inheritance was finalized
on the class object that the user is inquiring about.  ACL is not aggressive
about finalizing class inheritance, and if you invoke class-slots on a 
class that's not finalized, you get an error.  
The CLIM-Listener will check for this condition and finalize the object
class, if necessary.


--- /project/mcclim/cvsroot/mcclim/Apps/Listener/dev-commands.lisp	2007/06/02 20:30:53	1.42
+++ /project/mcclim/cvsroot/mcclim/Apps/Listener/dev-commands.lisp	2007/09/04 20:45:54	1.43
@@ -672,25 +672,29 @@
                          class))))
 
 (define-command (com-show-class-slots :name "Show Class Slots"
-				      :command-table show-commands
+                                      :command-table show-commands
                                       :menu "Class Slots"
-				      :provide-output-destination-keyword t)
+                                      :provide-output-destination-keyword t)
     ((class-name 'clim:symbol :prompt "class name"))
-  (let ((class (find-class class-name nil)))
-    (if (null class)
-	(format t "~&~A is not a defined class.~%" class-name)
-      (let ((slots (clim-mop:class-slots class)))
-	(if (null slots)
-	    (note "~%This class has no slots.~%~%")
-            (progn
-            ; oddly, looks much better in courier, because of all the capital letters.
-;            (with-text-family (t :sans-serif)
-              (invoke-as-heading
-               (lambda ()
-                 (format t "~&Slots for ")
-                 (with-output-as-presentation (t (clim-mop:class-name class) 'class-name :single-box t)
-                   (princ (clim-mop:class-name class)))))
-              (present-the-slots class) ))))))
+  (let* ((class (find-class class-name nil))
+         (finalized-p (and class
+                           (progn
+                             (clim-mop:finalize-inheritance class)
+                             (clim-mop:class-finalized-p class))))
+         (slots (and finalized-p (clim-mop:class-slots class))))
+    (cond
+     ((null class)
+      (note "~A is not a defined class.~%" class-name))
+     ((not finalized-p)
+      (note "Class ~A is not finalized." class-name))
+     ((null slots)
+      (note "~%This class has no slots.~%~%"))
+     (t (invoke-as-heading
+         (lambda ()
+           (format t "~&Slots for ")
+           (with-output-as-presentation (t (clim-mop:class-name class) 'class-name :single-box t)
+             (princ (clim-mop:class-name class)))))
+        (present-the-slots class)))))
 
 (defparameter *ignorable-internal-class-names*
   '(standard-object))




More information about the Mcclim-cvs mailing list