Fwd: Re: [cffi-devel] cffi changes are generating deprecation warning in cl-gd now
Jeff Cunningham
jeffrey at jkcunningham.com
Tue Jan 28 16:39:25 UTC 2014
I received this response from Liam Healy over in cffi-devel and am
posting his response. I have also done as Edi suggested and submitted an
issue on cl-gd at github.
--Jeff
-------- Original Message --------
Subject: Re: [cffi-devel] cffi changes are generating deprecation
warning in cl-gd now
Date: Mon, 27 Jan 2014 21:07:11 -0700
From: Liam Healy <lnp at healy.washington.dc.us>
To: Jeff Cunningham <jeffrey at jkcunningham.com>
CC: CFFI <cffi-devel at common-lisp.net>, cl-gd-devel at common-lisp.net
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 <mailto: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/cl-gd-devel/attachments/20140128/76031ef9/attachment.html>
More information about the Cl-gd-devel
mailing list