[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