commit: Allow local names in WITH-FOREIGN-SLOTS

Madhu enometh at meer.net
Mon Sep 6 01:03:40 UTC 2021


I've patched in the code I have on top of the commit and created

https://github.com/cffi/cffi/pull/186

Including some changed doc. Please review and feel free to edit.  I'd
appreciate stackmith's comments too - this may be more complex than
stacksmiths code, and I'm a bit doubtful about that.



*  Luís Oliveira <luismbo at gmail.com> <CAB-HnLT_fAE5tQCx-bqYWxZjFW4dHeDCZ9tsz=AUCmUZtB+Tbw at mail.gmail.com>
Wrote on Sun, 5 Sep 2021 17:26:00 +0100

> I agree with your proposed improvement. Could you prepare a pull
> request?
> On Sun, 5 Sep 2021 at 04:16, Madhu <enometh at meer.net> wrote:
>>
>> I notice this commit to CFFI:
>>
>> * commit 743a90251e5a4407147a20bd8354df03a87ca46d
>> Author:     stacksmith <stacksmith at users.noreply.github.com>
>> AuthorDate: Thu Aug 19 06:34:28 2021 -0700
>> Commit:     GitHub <noreply at github.com>
>> CommitDate: Thu Aug 19 14:34:28 2021 +0100
>>
>>     Allow local names in WITH-FOREIGN-SLOTS
>>
>>     It remains compatible with existing code, but accepts additional
>> formats for bindings:
>>     1) (name slot-name) - just like WITH-SLOTS;
>>     2) (name :pointer slot-name) - a pointer version.
>>
>>
>> On Thu, 16 Apr 2020 15:24:52 +0530 I had propsed a similar patch to Luis
>> With a slightly different signature.
>>
>> |
>> https://github.com/enometh/cffi/commit/023676a25128786174bbaa8a5df7fdc1d27c3bd3
>> | It seems a natural extension to me, though I was not able to
>> | document it to my satisfaction and I don't know if it would be too
>> | confusing to others.  WDYT - (could clean it up and push it on a
>> | separate branch if you had comments.)
>>
>> The doctring from that patch is reproduced here:
>>
>> --
>> (with-foreign-slots (bindings ptr type) body) - Now each binding can
>> be one of these forms:
>>
>> SLOT-NAME -- binds SLOT-NAME to (FOREIGN-SLOT-VALUE SLOT-NAME)
>>
>> (:POINTER SLOT-NAME) -- binds SLOT-NAME to (FOREIGN-SLOT-POINTER
>> SLOT-NAME)
>>
>> (VAR-NAME SLOT-NAME) -- binds VAR-NAME to (FOREIGN-SLOT-VALUE
>> SLOT-NAME)
>>
>> (:POINTER (VAR-NAME SLOT-NAME)) -- binds VAR-NAME
>> to (FOREIGN-SLOT-POINTER SLOT-NAME)
>>
>> (VAR-NAME (:POINTER SLOT-NAME)) -- binds VAR-NAME to
>> (FOREIGN-SLOT-POINTER SLOT-NAME)
>> ---
>>
>> This proposed syntax is different from what has been implemented by
>> stacksmith: The last two forms above correspond to the form
>>
>>  (name :pointer slot-name)
>>
>> Common Lisp bindings follow a standard syntax LHS RHS
>> and should always be destructurable to a LHS RHS
>>
>> I believe introducing a nonstandard binding form with 3 elements is
>> not in the spirit of common lisp syntax and it will only necessitate
>> unnecessary special-casing for further macrology
>>
>> I would encourage stacksmith to consider this point and try to adopt
>> the syntax I proposed for extending with-foreign-slots
>>
>> Or would it be possible to support both these forms in addition to the
>> new 3 element binding form
>>
>> It is still early and perhaps that the syntax can be fixed before it
>> is cast in stone - I'm hoping Luis can cooperate
>>



More information about the cffi-devel mailing list