[Bese-devel] trouble building latest ucw

Marco Baringer mb at bese.it
Tue Feb 15 12:06:54 UTC 2005


Chris Capel <pdf23ds at gmail.com> writes:

> I'm getting an error with UCW 0.3 patch-242, SBCL 0.8.18, building a
> completely fresh "get" of UCW. It happens when defining the class
> "container" in components/container.lisp. The error is "T is not a
> list", referring to the value given to the backtrack option on the
> slot. Here's the backtrace:
>
>   0: ("#'(LAMBDA (SLOT-VALUE) (FIRST SLOT-VALUE))" T)
>   1: ((SB-MOP:COMPUTE-EFFECTIVE-SLOT-DEFINITION
> (STANDARD-COMPONENT-CLASS T T)) #<unavailable argument>
> #S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION
> (SB-MOP:COMPUTE-EFFECTIVE-SLOT-DEFINITION #) {1E13BC5}> :PV-CELL NIL
> :NEXT-METHOD-CALL NIL :ARG-INFO (3)) #<STANDARD-COMPONENT-CLASS
> CONTAINER> CURRENT-COMPONENT-NAME (#<STANDARD-COMPONENT-DIRECT-SLOT
> CURRENT-COMPONENT-NAME>))
>   2: ((SB-MOP:COMPUTE-SLOTS (SB-PCL::STD-CLASS)) #<unavailable
> argument> #<unavailable argument> #<STANDARD-COMPONENT-CLASS
> CONTAINER>)
>   3: ((SB-MOP:COMPUTE-SLOTS :AROUND (STANDARD-CLASS)) #<unavailable
> argument> #S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION
> (SB-MOP:COMPUTE-SLOTS #) {1E1EA25}> :PV-CELL NIL :NEXT-METHOD-CALL
> #S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION # {1E1E695}> :PV-CELL
> NIL :NEXT-METHOD-CALL NIL :ARG-INFO (1)) :ARG-INFO (1))
> #<STANDARD-COMPONENT-CLASS CONTAINER>)
>   4: (SB-PCL::UPDATE-CLASS #<STANDARD-COMPONENT-CLASS CONTAINER> NIL)
>
> I have no clue what the issue is.

i think i might, though i've only seen this on cmucl so far. here's
the problem (as it appears on cmucl):

we use the function mopp:direct-slot-definition-value since different
implementations pass slot-definiton the initargs in different
ways. the problem is that, in arnesi (up until patch-47), we redefine
this function after we've compiled it. since the function, in its
original definiiton, returns a constant cmucl remebers this and, even
when the function is redefined, doesn't notice that the function can
return things other than :this-will-be-redefiened-below. :(

this issue comes up in compute-effective-slot-definition (which is
where your seeing the issue) for the container class and infact the
symptom was an error about T not being a list or not being a function.

so, to make a long story short: 

1) did your fresh checkout include an update of arnesi? in particular,
do you have arnesi--dev--1.2--patch-47 ?

2) could you perform this little experiment:
   http://paste.lisp.org/display/5615 and tell me if you get Ok. or
   Bad. (if you get Bad. you'll need to upgrade sbcl).

Now that i think a bit more about it there's another thing we could be
runnig into: maybe mopp:direct-slot-definition-value is getting
defined as (lambda (slot-value) (first slot-value)) when it should in
fact be defined as (lambda (slot-value) slot-value). sholud the above
experiment pass successfully then i'd like you to try one more thing:

open up mopp, go to line 359 (or there abouts) and find this block of code:

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

change it to this:

(lambda (slot-value) slot-value)

try rebuilding ucw. if this second test works then i'll have to grab a
copy of 0.8.18 and see what's going on.

hth.
-- 
-Marco
Ring the bells that still can ring.
Forget the perfect offering.
There is a crack in everything.
That's how the light gets in.
	-Leonard Cohen



More information about the bese-devel mailing list