[mcclim-devel] McCLIM and SCL: Some problems and patches...

Rainer Joswig joswig at lisp.de
Sun Oct 26 14:37:16 UTC 2008


Hi,

I have been compiling McCLIM with Scieneer Common Lisp. Worked well -  
a few problems:

********************************************

Flexichain needs SCL support for weak pointers. That's easy:

File utilities.lisp

(defun make-weak-pointer (object)
   "Creates a new weak pointer which points to OBJECT. For
    portability reasons, OBJECT most not be NIL."
   (assert (not (null object)))
   #+:sbcl (sb-ext:make-weak-pointer object)
   #+:cmu (ext:make-weak-pointer object)
   #+:scl (ext:make-weak-pointer object)
   #+:clisp (ext:make-weak-pointer object)
   #+:allegro
   (let ((wv (excl:weak-vector 1)))
     (setf (svref wv 0) object)
     wv)
   #+:openmcl
   (let ((wp (%make-weak-pointer)))
     (setf (gethash wp *weak-pointers*) object)
     wp)
   #+:corman (ccl:make-weak-pointer object)
   #+:lispworks
   (let ((array (make-array 1)))
     (hcl:set-array-weak array t)
     (setf (svref array 0) object)
     array)
   #-(or :sbcl :cmu :clisp :allegro :openmcl :corman :lispworks :scl)
   object)

(defun weak-pointer-value (weak-pointer)
   "If WEAK-POINTER is valid, returns its value. Otherwise, returns  
NIL."
   #+:sbcl (prog1 (sb-ext:weak-pointer-value weak-pointer))
   #+:cmu (prog1 (ext:weak-pointer-value weak-pointer))
   #+:scl (prog1 (ext:weak-pointer-value weak-pointer))
   #+:clisp (prog1 (ext:weak-pointer-value weak-pointer))
   #+:allegro (svref weak-pointer 0)
   #+:openmcl (prog1 (gethash weak-pointer *weak-pointers*))
   #+:corman (ccl:weak-pointer-obj weak-pointer)
   #+:lispworks (svref weak-pointer 0)
   #-(or :sbcl :cmu :clisp :allegro :openmcl :corman :lispworks :scl)
   weak-pointer)

#-(or :sbcl :cmu :clisp :allegro :openmcl :corman :lispworks :scl)
(eval-when (:compile-toplevel :load-toplevel :execute)
   (warn "No support for weak pointers in this implementation. ~
          Things may get big and slow."))


********************************************

File mcclim/designs.lisp

this files uses WITH-MEDIUM-OPTIONS, a macro that is later defined in  
some other file.
The definition that uses WITH-MEDIUM-OPTIONS can be removed, since it  
is also defined later.

********************************************

File mcclim/presentation-defs.lisp

(define-presentation-generic-function %accept accept
     (type-key parameters options type stream view &key))

Above definition needs to be something like this:

(define-presentation-generic-function %accept accept
     (type-key parameters options type stream view &key &allow-other- 
keys))

Since there are uses of ACCEPT with :DEFAULT and :DEFAULT-TYPE .


********************************************

File: mcclim/Drei/Persistent/persistent-undo.lisp

In: DEFMETHOD FLIP-UNDO-RECORD
   (FLEXICHAIN::WEAK-POINTER-VALUE C BUFFER)

WEAK-POINTER-VALUE takes only one argument, not two.


********************************************

After fixing above problems, McCLIM compiled fine with Scieneer Common  
Lisp.
The Listener example was running fine...

Regards,

Rainer Joswig

Rainer Joswig, Hamburg, Germany
http://lispm.dyndns.org/
mailto:joswig at lisp.de







More information about the mcclim-devel mailing list