SBCL newer than 0.9.3x

Friedrich Dominicus <[email protected]> Fri, 24 Feb 2006 11:02:27 +0100
Newsgroups gmane.lisp.clsql.devel
Organization Q Software Solutions GmbH
Message-ID <[email protected]>
It seems my message has not been seen or the like the following has
happened
I'm sorry to bother you with this. I updated SBCL to the
mentioned version and installed the freshest Debian package I could
get for my machine (AMD64/Debian)

I removed all the .fasl files hanging around and tried a fresh
compilation of clsql, it bailed out with:
When attempting to set the slot's value to (OR NULL T) (SETF of SLOT-VALUE),
the slot TYPE is missing from the object
#<CLSQL-SYS::VIEW-CLASS-DIRECT-SLOT-DEFINITION CLSQL-SYS::VIEW-DATABASE>.
   [Condition of type SIMPLE-ERROR]

Restarts:
  0: [RETRY] Retry performing #<ASDF:LOAD-OP (:FORCE T) {1003E3D141}> on #<ASDF:CL-SOURCE-FILE "ooddl" {1004D13DF1}>.
  1: [ACCEPT] Continue, treating #<ASDF:LOAD-OP (:FORCE T) {1003E3D141}> on #<ASDF:CL-SOURCE-FILE "ooddl" {1004D13DF1}> as having been successful.
  2: [ABORT-REQUEST] Abort handling SLIME request.
  3: [TERMINATE-THREAD] Terminate this thread (#<THREAD "new-repl-thread" {1002884CD1}>)

Backtrace:
  0: ((SB-PCL::FAST-METHOD SLOT-MISSING (T T T T)) #<unavailable argument> #<unavailable argument> #<unavailable argument> #<CLSQL-SYS::VIEW-CLASS-DIRECT-SLOT-DEFINITION CLSQL-SYS::VIEW-DATABASE> TYPE SETF ((OR NULL T)))
  1: ((SB-PCL::FAST-METHOD SLOT-MISSING (T #1="#<...>" . #1#)) #<unavailable argument> #<unavailable argument> #<unavailable argument> #<CLSQL-SYS::VIEW-CLASS-DIRECT-SLOT-DEFINITION CLSQL-SYS::VIEW-DATABASE> TYPE SETF ((OR NULL T)))
  2: ((LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. #1="#<...>" . #1#)) #<unavailable argument> #<unavailable argument> #<unavailable argument> #<unavailable argument> #<unavailable &REST argument>)
  3: (SB-PCL::SET-SLOT-VALUE #<CLSQL-SYS::VIEW-CLASS-DIRECT-SLOT-DEFINITION CLSQL-SYS::VIEW-DATABASE> TYPE (OR NULL T))
  4: ((SB-PCL::FAST-METHOD SB-MOP:COMPUTE-EFFECTIVE-SLOT-DEFINITION (CLSQL-SYS::STANDARD-DB-CLASS T T)) #<unused argument> #S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION (SB-PCL::FAST-METHOD SB-MOP:COMPUTE-EFFECTIVE-SLOT-DEFINITION #)> :PV-CELL NIL :NEXT-METHOD-CALL NIL :ARG-INFO (3)) #<CLSQL-SYS::STANDARD-DB-CLASS CLSQL-SYS:STANDARD-DB-OBJECT> CLSQL-SYS::VIEW-DATABASE (#<CLSQL-SYS::VIEW-CLASS-DIRECT-SLOT-DEFINITION CLSQL-SYS::VIEW-DATABASE>))
  5: (SB-PCL::STD-COMPUTE-SLOTS #<CLSQL-SYS::STANDARD-DB-CLASS CLSQL-SYS:STANDARD-DB-OBJECT>)
  6: ((SB-PCL::FAST-METHOD SB-MOP:COMPUTE-SLOTS (CLSQL-SYS::STANDARD-DB-CLASS)) #<unused argument> #S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION (SB-PCL::FAST-METHOD SB-MOP:COMPUTE-SLOTS #)> :PV-CELL NIL :NEXT-METHOD-CALL NIL :ARG-INFO (1)) #<CLSQL-SYS::STANDARD-DB-CLASS CLSQL-SYS:STANDARD-DB-OBJECT>)
  7: ((SB-PCL::FAST-METHOD SB-MOP:COMPUTE-SLOTS :AROUND (STANDARD-CLASS)) #<unavailable argument> #S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION (SB-PCL::FAST-METHOD SB-MOP:COMPUTE-SLOTS #)> :PV-CELL NIL :NEXT-METHOD-CALL #S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION #> :PV-CELL NIL :NEXT-METHOD-CALL NIL :ARG-INFO (1)) :ARG-INFO (1)) #<CLSQL-SYS::STANDARD-DB-CLASS CLSQL-SYS:STANDARD-DB-OBJECT>)
  8: (SB-PCL::UPDATE-CLASS #<CLSQL-SYS::STANDARD-DB-CLASS CLSQL-SYS:STANDARD-DB-OBJECT> T)
  9: (SB-PCL::UPDATE-CLASS #<CLSQL-SYS::STANDARD-DB-CLASS CLSQL-SYS:STANDARD-DB-OBJECT> T)
 10: (SB-PCL::UPDATE-CLASS #<CLSQL-SYS::STANDARD-DB-CLASS CLSQL-SYS:STANDARD-DB-OBJECT> NIL)
 11: (SB-PCL::UPDATE-CLASS #<CLSQL-SYS::STANDARD-DB-CLASS CLSQL-SYS:STANDARD-DB-OBJECT> NIL)
 12: ((SB-PCL::FAST-METHOD SHARED-INITIALIZE :AFTER (SB-PCL::STD-CLASS T)) (#(NIL 16 5 17) . #()) #<unavailable argument> #<CLSQL-SYS::STANDARD-DB-CLASS CLSQL-SYS:STANDARD-DB-OBJECT> NIL (:DIRECT-SUPERCLASSES NIL :DIRECT-SLOTS ((:INITFUNCTION #<FUNCTION # {10005810B9}> :NAME CLSQL-SYS::VIEW-DATABASE :READERS # :WRITERS NIL :INITARGS # ...)) :DEFINITION-SOURCE #S(SB-C:DEFINITION-SOURCE-LOCATION :NAMESTRING "/usr/share/common-lisp/source/clsql/sql/ooddl.lisp" :TOPLEVEL-FORM-NUMBER 1 :PLIST NIL) :DOCUMENTATION "Superclass for all CLSQL View Classes."))
 13: ((LAMBDA (SB-PCL::.PV-CELL. SB-PCL::.NEXT-METHOD-CALL. SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.DFUN-REST-ARG.)) #<unavailable argument> #<unavailable argument> #<CLSQL-SYS::STANDARD-DB-CLASS CLSQL-SYS:STANDARD-DB-OBJECT> NIL (:DIRECT-SUPERCLASSES NIL :DIRECT-SLOTS ((:INITFUNCTION #<FUNCTION # {10005810B9}> :NAME CLSQL-SYS::VIEW-DATABASE :READERS # :WRITERS NIL :INITARGS # ...)) :DEFINITION-SOURCE #S(SB-C:DEFINITION-SOURCE-LOCATION :NAMESTRING "/usr/share/common-lisp/source/clsql/sql/ooddl.lisp" :TOPLEVEL-FORM-NUMBER 1 :PLIST NIL) :DOCUMENTATION "Superclass for all CLSQL View Classes."))
 14: ((SB-PCL::FAST-METHOD REINITIALIZE-INSTANCE (SB-PCL::SLOT-OBJECT)) #<unavailable argument> #<unavailable argument> #<CLSQL-SYS::STANDARD-DB-CLASS CLSQL-SYS:STANDARD-DB-OBJECT> (:DIRECT-SUPERCLASSES NIL :DIRECT-SLOTS ((:INITFUNCTION #<FUNCTION # {10005810B9}> :NAME CLSQL-SYS::VIEW-DATABASE :READERS # :WRITERS NIL :INITARGS # ...)) :DEFINITION-SOURCE #S(SB-C:DEFINITION-SOURCE-LOCATION :NAMESTRING "/usr/share/common-lisp/source/clsql/sql/ooddl.lisp" :TOPLEVEL-FORM-NUMBER 1 :PLIST NIL) :DOCUMENTATION "Superclass for all CLSQL View Classes."))
 15: ((LAMBDA (SB-PCL::.PV-CELL. SB-PCL::.NEXT-METHOD-CALL. SB-PCL::.ARG0. SB-PCL::.DFUN-REST-ARG.)) #<unavailable argument> #<unavailable argument> #<CLSQL-SYS::STANDARD-DB-CLASS CLSQL-SYS:STANDARD-DB-OBJECT> (:DIRECT-SUPERCLASSES NIL :DIRECT-SLOTS ((:INITFUNCTION #<FUNCTION # {10005810B9}> :NAME CLSQL-SYS::VIEW-DATABASE :READERS # :WRITERS NIL :INITARGS # ...)) :DEFINITION-SOURCE #S(SB-C:DEFINITION-SOURCE-LOCATION :NAMESTRING "/usr/share/common-lisp/source/clsql/sql/ooddl.lisp" :TOPLEVEL-FORM-NUMBER 1 :PLIST NIL) :DOCUMENTATION "Superclass for all CLSQL View Classes."))


AFAIKT it seems this name is now %type? 


I checked this the following way.
I put a break in metaclasses.lisp line 448 and inspect the dsd
variable that has yield:

The object is a STANDARD-OBJECT of type VIEW-CLASS-DIRECT-SLOT-DEFINITION.
0. NAME: TABLEOID
1. INITFORM: NIL
2. INITFUNCTION: #<FUNCTION (LAMBDA (&REST #:REST600)) {10005810B9}>
3. READERS: NIL
4. WRITERS: NIL
5. INITARGS: (:TABLEOID)
6. %TYPE: T
7. %DOCUMENTATION: NIL
8. %CLASS: #<STANDARD-DB-CLASS POLYMORPH-DB-OBJECT>
9. ALLOCATION: :INSTANCE
10. ALLOCATION-CLASS: NIL
11. COLUMN: "unbound"
12. DB-KIND: :SYSTEM
13. DB-READER: NIL
14. DB-WRITER: NIL
15. DB-TYPE: NIL
16. DB-CONSTRAINTS: NIL
17. VOID-VALUE: NIL
18. DB-INFO: "unbound"
19. SPECIFIED-TYPE: T

So the name is type and there is an accessor called
slot-definition-type
(in SBCL now) so would the following be a correct patch for this
SBCL version?

--- metaclasses.lisp    2006-02-17 19:51:31.000000000 +0100
+++ metaclasses.lisp.old        2006-02-17 19:51:18.000000000 +0100
@@ -445,8 +445,8 @@
       (setf (specified-type dsd)
        (slot-definition-type dsd))
       (inspect dsd)
-      (setf #-(or clisp sbcl) (slot-value dsd 'type)
-           #+(or clisp sbcl) (slot-definition-type dsd)
+      (setf #-clisp (slot-value dsd 'type)
+           #+clisp (slot-definition-type dsd)
            (compute-lisp-type-from-slot-specification
             dsd (slot-definition-type dsd))))


Well I just can tell clsql can be compiled again with this patch. No I
have not run the tests yet.

Regards
Friedrich


I tried the same on a 32-bit Platform with the same result. I have to
apply the above given patch to get clsql compiled. 


Regards
Friedrich