[Bese-devel] LispWorks and UCW

Friedrich Dominicus frido at q-software-solutions.de
Thu Mar 24 09:42:38 UTC 2005


sorry, for bothering you with this. I had to tweak the mopp.lisp file,
and am now not sure if it's a bug with LispWorks or with the given
code.

As I understand all the symbols needed for portable MOP should get
imported with 
(defmethod provide-mopp-symbol ((symbol symbol) (implementation (eql :lispworks)))
  (when (find-symbol (string symbol) :clos)
    (import-to-mopp (find-symbol (string symbol) :clos))))


Now it happens that this has failed for some symbols, but I suppose
that should not have happened. I know that the following is just a
hackerish solution to the problem:

(eval-when (:compile-toplevel :execute)
  (defclass %meta-class (standard-class) ())
  #-LispWorks
  (defmethod mopp:validate-superclass ((c %meta-class) (s mopp:standard-class)) t)
  #+Lispworks
  (defmethod mopp:validate-superclass ((c %meta-class) (s clos::standard-class)) t)
  #-LispWorks
  (defclass %dsd (mopp:standard-direct-slot-definition)
    ((%slot :accessor %slot :initarg :%slot :initform nil)))
    #+LispWorks
    (defclass %dsd (clos::standard-direct-slot-definition)
      ((%slot :accessor %slot :initarg :%slot :initform nil)))
    

  (defmethod mopp:direct-slot-definition-class ((c %meta-class) &rest initargs)
    (declare (ignore c initargs))
    (find-class '%dsd))

  (defclass %class ()
    ((a-slot :%slot 1))
    (:metaclass %meta-class))

  (let ((definition (if (consp (%slot (find-if (lambda (s)
						 (eql 'a-slot 
                                                      #-LispWorks
                                                      (mopp:slot-definition-name s)
                                                      #+LispWorks
                                                      (clos:slot-definition-name s)
                                                      ))
                                               #-LispWorks
                                               (mopp:class-direct-slots (find-class '%class))
                                               #+LispWorks
                                               (clos:class-direct-slots (find-class '%class))
                                               )))
			(lambda (slot-value) (first slot-value))
			(lambda (slot-value) slot-value))))


but with that I got UCW compiled and running with LispWorks. I'm quite
sure that this is not the "right" solution to the problem. Maybe
someone here has a better suggestion.

I still have some problems understanding UCW. Mostly how the parts
should play together. The relationship between application, component,
sub-components etc is not clear to me. 

I do not understand what slime is used for, I guess it's to see the
error messages. Is this a correct?

And well there is a thing I do  not like. The use of links for
starting actions. I would think for that buttons are the "right"
choice. Now I read someone has hacked around ucw:button? 

Would this someone explain what he has to done to implement that?

Regards
Friedrich



More information about the bese-devel mailing list