[Bese-devel] UCW-Presentations Fixed (Sort Of)

Clinton Ebadi clinton at unknownlamer.org
Wed Aug 22 01:38:17 UTC 2007


Greetings,

I managed to get UCW-Presentations working against ucw_dev (I've yet
to try ucw_ajax as I wanted to tackle one task at a time). Normally
loading UCW-Presentations caused method dispatch for structs to stop
working which was most immediately reveleaded when auto-flush ran in
swank and failed to dispatch output-stream-p properly which causes the
auto-flush thread to die, and then streams to stop working
entirely. This, naturally, makes it a tad bit difficult to debug
things. Luckily the SBCL inspector still worked so I was able to
sanity check the state and poke around a bit to discover that it
wasn't directly related to streams.

The offending form appeared to be:

(define-ie-type (interface-element interface-element) ((ie-type t))
  ...
  (:metaclass interface-element-class)
  ...)

in form.lisp

After much debugging I made a last ditch effort and changed
interface-element-class to indirect-value-standard-component-class and
the form compiled without making SBCL barf. I changed every occurence,
and lo and behold! All was well. After making sure all was really well
by running the example app through its paces I then moved the
(defclass interface-element-class ...) into indirect-value-class.lisp
after the definition for indirect-value-standard-component-class and
before any method definitions. This, oddly enough, made everything
work.

I am honestly very perplexed by this. I poured through AMOP looking
for a reason why things might behave like this, but found nothing. I
renamed the class, made it a subclass of i-v-s-c-c, etc. and SBCL
still broke horribly. The stranger thing is that if I added a method
to a generic then dispatching for that generic worked again while the
other generics in the image still only dispatched to their t cases,
but this only affected *some* generics (as above I suspect for structs
only, but I didn't test this extensively). I suspect there might be a
bug in PCL or else some very slight MOP protocol violation in
indirect-value-class or standard-component-class that is corrupting
the method cache. I cannot think of another reason.

In the meantime, my slightly-hacked ucw-presentations works. Would you
like me to send a patch bundle that moves the definition so
presentations can be used again? I can also send a patch to the
example file that will make it work properly again as well (mostly
fixing a few explicit package qualitifers and adding a simple-window
around the demo so that js works).

-- 



More information about the bese-devel mailing list