[elephant-devel] Fix for LispWorks 5.1

Chun Tian (binghe) binghe.lisp at gmail.com
Sat Jun 20 19:28:17 UTC 2009


Hi, elephant

Currently Elephant 1.0 still cannot compile on LispWorks 5.1, the only  
blocking definition is this one:

(defmethod shared-initialize :around ((instance cacheable-persistent- 
object) slot-names &key make-cached-instance &allow-other-keys)
   ;; User asked us to start in cached mode?  Otherwise default to not.
   (setf (slot-value instance 'pchecked-out) make-cached-instance)
   (setf (slot-value instance 'checked-out) make-cached-instance)
   (call-next-method))

Error message:

**++++ Error in (METHOD
                  SHARED-INITIALIZE
                  :AROUND
                  (ELEPHANT::CACHEABLE-PERSISTENT-OBJECT T)):
   Error during finalization of class #<PERSISTENT-METACLASS CACHEABLE- 
PERSISTENT-OBJECT 21869D3B>: Dynamic-Slot-Boundp-Using-Slotd is not  
defined for slot PCHECKED-OUT in #<CACHEABLE-PERSISTENT-OBJECT oid:NIL>

I found a way to get pass this issue: moving above definition out of  
"class.lisp", to, i.e. "cache.lisp", then everythings go fine. I run  
some BDB tests, seems OK.

I don't know why.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: ele-lw51.diff
Type: application/octet-stream
Size: 1790 bytes
Desc: not available
URL: <https://mailman.common-lisp.net/pipermail/elephant-devel/attachments/20090621/8fb510a5/attachment.obj>
-------------- next part --------------



--binghe

> Hi, Larry
>
> I just checked, Elephant 1.0 on my LWL64 5.0.2 can be compiled and  
> loaded correctly. LWL64 5.1.2 failed on classes.lisp which you met.
>
> In src/elephant/metaclasses.lisp, I found two definitions which  
> mentioned about LispWorks versions:
>
> line 396:
>
> #+(or :lispworks3 :lispworks4 (and :lispworks5 :lispworks5.0))
> (defmethod (setf slot-definition-allocation) (allocation (slot-def  
> persistent-slot-definition))
>  (unless (eq allocation :database)
>    (error "Invalid allocation type ~A for slot-definition- 
> allocation" allocation))
>  allocation)
>
> line 587:
>
> #+lispworks
> (defmethod (setf slot-definition-allocation) (allocation (slot-def  
> persistent-slot-definition))
>  (unless (eq allocation :database)
>    (error "Invalid allocation type ~A for slot-definition- 
> allocation" allocation))
>  allocation)
>
> The error output you saw, is reported by the second method  
> definition above, I believe. I don't know much about Elephant, but I  
> think above two method should both be disabled in LispWorks 5.1,  
> which confirms "slot-definition changes for AMOP compatibility" in  
> LW5.1:
>
> http://www.lispworks.com/documentation/lw51/RNIG/html/readme-364.htm#pgfId-918212
>
> <elephant-lw51-1.diff>
>
>
> With my trivial patch, I go further:
>
> ;;; Compiling file /mnt/hgfs/Lisp/packages/elephant-1.0/src/elephant/ 
> classes.lisp ...
> ;;; Safety = 3, Speed = 1, Space = 1, Float = 1, Interruptible = 0
> ;;; Compilation speed = 1, Debug = 2, Fixnum safety = 3
> ;;; Source level debugging is on
> ;;; Source file recording is  on
> ;;; Cross referencing is on
> ; (TOP-LEVEL-FORM 0)
> ; (TOP-LEVEL-FORM 1)
> ; (DEFVAR ELEPHANT::*DEBUG-SI*)
> ; (METHOD INITIALIZE-INSTANCE :BEFORE (ELEPHANT:PERSISTENT))
> ; ELEPHANT::INITIAL-PERSISTENT-SETUP
> ; ELEPHANT::REGISTER-NEW-INSTANCE
> ; ELEPHANT::CHECK-VALID-STORE-CONTROLLER
> ; (DEFCLASS ELEPHANT:PERSISTENT-COLLECTION)
> ; (DEFCLASS ELEPHANT:PERSISTENT-OBJECT)
> ; (DEFCLASS ELEPHANT::CACHEABLE-PERSISTENT-OBJECT)
> ; (METHOD SHARED-INITIALIZE :AROUND (ELEPHANT:PERSISTENT-METACLASS T))
> ; ELEPHANT::ENSURE-CLASS-INHERITS-FROM
> ; ELEPHANT::SUPERCLASS-MEMBER-P
> ; ELEPHANT::HAS-CACHED-SLOT-SPECIFICATION
> ; (METHOD
>   CLOS:FINALIZE-INHERITANCE
>   :AFTER
>   (ELEPHANT:PERSISTENT-METACLASS))
> ; ELEPHANT::COMPUTE-DERIVED-INDEX-TRIGGERS
> ; (METHOD REINITIALIZE-INSTANCE :AROUND (ELEPHANT:PERSISTENT- 
> METACLASS))
> ; ELEPHANT::BIND-SLOT-DEFS
> ; ELEPHANT::COMPUTE-BINDINGS
> ; (METHOD INITIALIZE-INSTANCE :AROUND (ELEPHANT:PERSISTENT-OBJECT))
> ; (METHOD SHARED-INITIALIZE :AROUND (ELEPHANT:PERSISTENT-OBJECT T))
>
> **++++ Error in (METHOD
>                 SHARED-INITIALIZE
>                 :AROUND
>                 (ELEPHANT::CACHEABLE-PERSISTENT-OBJECT T)):
>  Error during finalization of class #<PERSISTENT-METACLASS CACHEABLE- 
> PERSISTENT-OBJECT 4050351AFB>: Dynamic-Slot-Boundp-Using-Slotd is  
> not defined for slot PCHECKED-OUT in #<CACHEABLE-PERSISTENT-OBJECT  
> oid:NIL>
> ; ELEPHANT::INITIALIZE-PERSISTENT-SLOTS
> ; ELEPHANT::INITIALIZE-SET-SLOTS
> ; ELEPHANT::INITIALIZE-FROM-INITARG
> ; ELEPHANT::GET-INIT-SLOTNAMES
> ; (SUBFUNCTION
>   (DEFCLASS ELEPHANT:DROPPING-PERSISTENT-SLOT-DATA)
>   (DEFINE-CONDITION ELEPHANT:DROPPING-PERSISTENT-SLOT-DATA))
> ; (DEFINE-CONDITION ELEPHANT:DROPPING-PERSISTENT-SLOT-DATA)
> ; (DEFINE-CONDITION ELEPHANT:DROPPING-PERSISTENT-SLOT-DATA)
> ; ELEPHANT::WARN-ABOUT-DROPPED-SLOTS
> ; (METHOD ELEPHANT::RECREATE-INSTANCE-USING-CLASS (T))
> ; (DEFGENERIC ELEPHANT::RECREATE-INSTANCE)
> ; (METHOD ELEPHANT::RECREATE-INSTANCE (ELEPHANT:PERSISTENT-OBJECT))
> ; (METHOD ELEPHANT::RECREATE-INSTANCE (ELEPHANT:PERSISTENT- 
> COLLECTION))
> ; (METHOD
>   UPDATE-INSTANCE-FOR-REDEFINED-CLASS
>   :AROUND
>   (ELEPHANT:PERSISTENT-OBJECT T T T))
> ; (METHOD CHANGE-CLASS :BEFORE (ELEPHANT:PERSISTENT STANDARD-CLASS))
> ; (METHOD
>   UPDATE-INSTANCE-FOR-DIFFERENT-CLASS
>   :AFTER
>   (ELEPHANT:PERSISTENT-OBJECT ELEPHANT:PERSISTENT-OBJECT))
> ; (METHOD
>   CHANGE-CLASS
>   :BEFORE
>   (STANDARD-OBJECT ELEPHANT:PERSISTENT-METACLASS))
> ; (METHOD
>   CLOS:SLOT-VALUE-USING-CLASS
>   (ELEPHANT:PERSISTENT-METACLASS
>    ELEPHANT:PERSISTENT-OBJECT
>    ELEPHANT::PERSISTENT-SLOT-DEFINITION))
> ; (METHOD
>   (SETF CLOS:SLOT-VALUE-USING-CLASS)
>   (T
>    ELEPHANT:PERSISTENT-METACLASS
>    ELEPHANT:PERSISTENT-OBJECT
>    ELEPHANT::PERSISTENT-SLOT-DEFINITION))
> ; (METHOD
>   CLOS:SLOT-BOUNDP-USING-CLASS
>   (ELEPHANT:PERSISTENT-METACLASS
>    ELEPHANT:PERSISTENT-OBJECT
>    ELEPHANT::PERSISTENT-SLOT-DEFINITION))
> ; (METHOD
>   CLOS:SLOT-BOUNDP-USING-CLASS
>   (ELEPHANT:PERSISTENT-METACLASS ELEPHANT:PERSISTENT-OBJECT SYMBOL))
> ; (METHOD
>   CLOS:SLOT-MAKUNBOUND-USING-CLASS
>   (ELEPHANT:PERSISTENT-METACLASS
>    ELEPHANT:PERSISTENT-OBJECT
>    ELEPHANT::PERSISTENT-SLOT-DEFINITION))
> ; ELEPHANT::VALID-PERSISTENT-REFERENCE-P
> ; (SUBFUNCTION
>   (DEFCLASS ELEPHANT:CROSS-REFERENCE-ERROR)
>   (DEFINE-CONDITION ELEPHANT:CROSS-REFERENCE-ERROR))
> ; (DEFINE-CONDITION ELEPHANT:CROSS-REFERENCE-ERROR)
> ; (DEFINE-CONDITION ELEPHANT:CROSS-REFERENCE-ERROR)
> ; ELEPHANT::SIGNAL-CROSS-REFERENCE-ERROR
> ; (METHOD
>   CLOS:SLOT-VALUE-USING-CLASS
>   (ELEPHANT:PERSISTENT-METACLASS ELEPHANT:PERSISTENT-OBJECT T))
> ; (METHOD
>   (SETF CLOS:SLOT-VALUE-USING-CLASS)
>   (T ELEPHANT:PERSISTENT-METACLASS ELEPHANT:PERSISTENT-OBJECT T))
> ; (METHOD
>   CLOS:SLOT-MAKUNBOUND-USING-CLASS
>   (ELEPHANT:PERSISTENT-METACLASS ELEPHANT:PERSISTENT-OBJECT T))
> ; (TOP-LEVEL-FORM 0)
> ; *** 1 error detected, no fasl file produced.
>
> I think above compile error should be fixed by a simple patch, but I  
> don't know how to fix it. Hope other guys better than me can help us  
> go further.
>
> There're some MOP differences between LispWorks 5.1 and early  
> versions which mentioned in LW5.1 release notes:
>
> http://www.lispworks.com/documentation/lw51/RNIG/html/readme-362.htm#pgfId-917070
>
> Regards,
>
> Chun Tian (binghe)
>
> On 2009-2-3, at 09:41, Larry Clapp wrote:
>
>> Is there anything I can do to improve on the below error report?  I'd
>> like to use elephant but it doesn't compile on Lispworks for Linux
>> 5.1.  Am I missing something?  Any help appreciated.
>>
>> -- Larry
>>
>> ----- Forwarded message from Larry Clapp <larry at theclapp.org> -----
>>
>>> From: Larry Clapp <larry at theclapp.org>
>>> Date: Sun, 25 Jan 2009 16:30:36 -0500
>>> To: elephant-devel at common-lisp.net
>>> Subject: Elephant won't compile under Lispworks for Linux 5.1
>>>
>>> This appears to be similar to the error reported back in April 08
>>> (http://common-lisp.net/pipermail/elephant-devel/2008-April/003925.html 
>>> ).
>>>
>>> Search below for "++++ Error".
>>>
>>> -- Larry
>>>
>>>
>>> CL-USER 1 > (asdf :elephant)
>>> ; loading system definition from /home/lmc/lisp/systems/ 
>>> elephant.asd into
>> [snip]
>>> ; Loading fasl file /home/lmc/lisp/elephant/elephant-1.0/src/ 
>>> elephant/metaclasses.ufasl
>>> ;;; Compiling file /home/lmc/lisp/elephant/elephant-1.0/src/ 
>>> elephant/classes.lisp ...
>>> ;;; Safety = 1, Speed = 3, Space = 1, Float = 1, Interruptible = 0
>>> ;;; Compilation speed = 0, Debug = 3, Fixnum safety = 3
>>> ;;; Source level debugging is on
>>> ;;; Source file recording is  on
>>> ;;; Cross referencing is on
>>> ; (TOP-LEVEL-FORM 0)
>>> ; (TOP-LEVEL-FORM 1)
>>> ; (DEFVAR ELEPHANT::*DEBUG-SI*)
>>> ; (METHOD INITIALIZE-INSTANCE :BEFORE (ELEPHANT:PERSISTENT))
>>> ; ELEPHANT::INITIAL-PERSISTENT-SETUP
>>> ; ELEPHANT::REGISTER-NEW-INSTANCE
>>> ; ELEPHANT::CHECK-VALID-STORE-CONTROLLER
>>> ; (DEFCLASS ELEPHANT:PERSISTENT-COLLECTION)
>>> ; (DEFCLASS ELEPHANT:PERSISTENT-OBJECT)
>>>
>>> **++++ Error in (DEFCLASS ELEPHANT::CACHEABLE-PERSISTENT-OBJECT):
>>> Invalid allocation type INSTANCE for slot-definition-allocation
>>> ; (METHOD SHARED-INITIALIZE :AROUND (ELEPHANT:PERSISTENT-METACLASS  
>>> T))
>> [snip]
>>
>> ----- End forwarded message -----
>>
>> _______________________________________________
>> elephant-devel site list
>> elephant-devel at common-lisp.net
>> http://common-lisp.net/mailman/listinfo/elephant-devel
>
> --
> Chun Tian (binghe)
> NetEase.com, Inc.
> P. R. China
>



More information about the elephant-devel mailing list