Problems with nested structs and the newer cffi

Liam Healy lnp at healy.washington.dc.us
Sun Aug 18 21:41:27 UTC 2013


I've extended with-foreign-slots to return slot pointers in this fashion
(basically I took this macro with minor modifications but named it
with-foreign-slots).

Liam

On Thu, Apr 25, 2013 at 10:23 PM, Liam Healy <lnp at healy.washington.dc.us>wrote:

> On Thu, Apr 25, 2013 at 4:33 AM, Chris Bagley <chris.bagley at gmail.com>wrote:
>
>> I ran into similar issues to Willem and have taken to using the following
>> macro:
>>
>> (defmacro with-foreign-slots* ((vars ptr type) &body body)
>>   "Create local symbol macros for each var in VARS to reference
>> foreign slots in PTR of TYPE. Similar to WITH-SLOTS.
>> Each var can be of the form: slot-name - in which case slot-name will
>> be bound to the value of the slot or: (:pointer slot-name) - in which
>> case slot-name will be bound to the pointer to that slot."
>>   (let ((ptr-var (gensym "PTR")))
>>     `(let ((,ptr-var ,ptr))
>>        (symbol-macrolet
>>            ,(loop :for var :in vars :collect
>>                  (if (listp var)
>>                      (if (eq (first var) :pointer)
>>                          `(,(second var) (foreign-slot-pointer
>>                                           ,ptr-var ',type ',(second var)))
>>                          (error "Malformed var names must be:~%name~%
>> -or- ~%(:pointer name)"))
>>                      `(,var (foreign-slot-value
>>                              ,ptr-var ',type ',var))))
>>          , at body))))
>>
>> This, for me, balances the needs quite nicely and feels in line with the
>> style of cffi. Thoughts or  modifications?
>>
>
> I had thought about doing something like this when looking into Willem's
> problems. I like it, but I think the "*" in the name is unnecessary. It is
> upwardly compatible with the current with-foreign-slots, isn't it? That is,
> if it were to replace with-foreign-slots, it would expand correctly for
> current usage (to values).  I think we should replace that macro with this.
>
> Liam
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cffi-devel/attachments/20130818/0c499550/attachment.html>


More information about the cffi-devel mailing list