[developers] [spr30362] bug using climxm
Andreas Fuchs
afuchs at franz.com
Tue Apr 15 14:33:38 CEST 2008
Stephan Oepen <oe at ifi.uio.no> wrote:
> hi andreas,
Hi Stephan,
I'm very sorry for the late reply; I had caught the flu and spent the
last 2 weeks in bed with a fever.
> however, i get a new error in CLIM, for code that used to work okay:
>
> Error: Row or column in table does not contain any cells
>
> see the file attached below for further information. it seems to be in
> the scope of our function lkb::draw-discriminants-window(), which looks
> like this:
>
> (defun draw-discriminants-window (frame stream &rest rest)
>
> (declare (ignore rest))
>
> ;;
> ;; in case we are displaying the window with an uninitialized frame
> ;;
> (when (null (compare-frame-edges frame))
> (return-from draw-discriminants-window))
>
> (let ((discriminants (compare-frame-discriminants frame)))
> (clim:with-text-style (stream (comparison-discriminant-font))
> (clim:formatting-table (stream :x-spacing "X")
> (loop
> for item in discriminants
> for record = (discriminant-record item)
> when record do (clim:clear-output-record record)
> unless (discriminant-hidep item) do
> (clim:formatting-row (stream)
> (setf (discriminant-record item)
> (clim:with-new-output-record (stream)
> (clim:with-output-recording-options (stream :record t)
> (clim:with-output-as-presentation
> (stream item 'discriminant)
> (clim:updating-output
> (stream :cache-value (discriminant-state item))
> (clim:formatting-cell
> (stream :align-x :center :min-width "+")
> (write-string
> (discriminant-state-as-string item) stream)))
> (clim:updating-output
> (stream :cache-value (discriminant-toggle item))
> (clim:formatting-cell
> (stream :align-x :center :min-width "+")
> (write-string
> (discriminant-toggle-as-string item) stream)))
> (clim:formatting-cell (stream :align-x :left)
> (format stream "~a" (discriminant-key item)))
> (clim:formatting-cell (stream :align-x :left)
> (format
> stream
> "~@[~a~]" (discriminant-value item))))))))
> ;;
> ;; _fix_me_
> ;; there ought to be a way of drawing things in the intended
> ;; colour right from the start; apparently, neither rob nor i
> ;; could work that out quickly; CLIM can be a pain :-(.
> ;; (9-oct-02; oe)
> (let ((record (discriminant-record item)))
> (when (discriminant-gold item)
> (recolor-record record (if (update-match-p frame)
> clim:+magenta+
> clim:+blue+))
> (clim:replay record stream))))))))
I'm afraid I can't reproduce that using simple test data and a reduced
test case. Maybe there is something that prevents a discriminant from
being displayed properly. To make it possible to reproduce this, could
you find out where (that is, on which row, or for which discriminant) it
breaks? I think inserting debug print statements in the loop above
should be enough...
> i imagine there may be something wrong in this code, and that the newer
> CLIM is more sensitive to this error? i can continue from the error(),
> using `Retry displaying pane', incidentally, and then everything works
> fine. so maybe a timing error or something?
That could be. I see only a "Retry assertion" restart in the log file
you sent, is that the restart you invoke to continue?
> can you easily spot the nature of this problem (be it in my code or the
> latest CLIM patches)? unfortunately, this is pretty urgent: without a
> quick fix, i would need to be instructed on how to revert the patch.
To revert the CLIM patch, the same instructions as for the pre-release
versions apply: In your Allegro CL installation directory, remove
code/clim*.001, and rename the backup of climxm.so (if you have it) to
code/climxm.so.
Cheers,
Andreas.
More information about the developers
mailing list