[cffi-devel] cffi changes are generating deprecation warning in cl-gd now

Liam Healy lnp at healy.washington.dc.us
Tue Jan 28 04:07:11 UTC 2014


Hi Jeff,

It's harmless, it's just telling you that the syntax that cl-gd uses for
structure arguments will eventually (in a future version of CFFI) not work.
The messages describes the problem. The structure is specified as
cl-gd::gd-image  in a function argument or return value. In the old
versions of CFFI, that was interpreted as a pointer to that structure,
because there was no other possibility. Now structures can also be
passed/returned by value using cffi-libffi, so you have to say explicitly
as the error message indicates. They might also need to change the use of
#'mem-aref (which before returned a pointer to the structure but now
returns the structure itself) into a #'mem-aptr.

I'm not subscribed to the cl-gd-devel list, so you should forward this
response there.

Liam


On Mon, Jan 27, 2014 at 4:42 PM, Jeff Cunningham
<jeffrey at jkcunningham.com>wrote:

> Hi;
>
> A short while ago I started noticing this error message showing up
>
> ;; STYLE-WARNING:
> ;;    bare references to struct types are deprecated. Please use (:POINTER
> (:STRUCT CL-GD::GD-IMAGE))
> ;;    or (:STRUCT CL-GD::GD-IMAGE) instead.
>
> It took me awhile to extract a simple demo case, but I've narrowed it down
> to the WITH-THICKNESS macro call I believe.
> I'm not sure which list would be best for this question, so I cross-posted
> it.
>
> Here's a test case.
>
> (ql:quickload "cl-gd")
> (use-package :cl-gd)
>
> (let* ((x1 -86)
>        (x2 529)
>        (y1 -0.13)
>        (y2 1.16)
>        (xv '(0.0 1.0 2.0 3.0 4.0))
>        (yv '(0.99 0.12 0.66 0.24 0.075)))
>   (with-image* (500 250)
>     (allocate-color 255 255 255)
>     (let ((c (allocate-color 0 0 255)))
>       (with-transformation (:x1 x1 :x2 x2 :y1 y1 :y2 y2)
>         (with-thickness (1)
>           (mapl #'(lambda (x y)
>                     (when (and (cdr x) (cdr y))
>                       (draw-line (car x) (car y) (cadr x) (cadr y) :color
> c))) xv yv))
>         (write-image-to-file "test.png" :if-exists :supersede)))))
>
> If you take out the with-thickness macro call the message disappears.
>
> I played around with that macro but don't really understand enough about
> the intricacies of cffi to fix it.
> Does anyone have any ideas? Here's the macro in question:
>
> (defmacro with-thickness ((thickness &key (image '*default-image*)) &body
> body)
>   "Executes BODY with the current line width of IMAGE set to
> THICKNESS. The image's previous line width is guaranteed to be
> restored before the macro exits. Note that the line width is measured
> in pixels and is not affected by WITH-TRANSFORMATION."
>   (cl-gd::with-unique-names (old-thickness)
>     ;; we rebind everything so we have left-to-right evaluation
>     (cl-gd::with-rebinding (thickness image)
>       `(let ((,old-thickness (thickness ,image)))
>          (unwind-protect
>              (progn
>                (setf (thickness ,image) ,thickness))
>            , at body)
>          (setf (thickness ,image) ,old-thickness)))))
>
>
> Much obliged.
>
> --Jeff Cunningham
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cffi-devel/attachments/20140127/e4e9c412/attachment.html>


More information about the cffi-devel mailing list