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 <luis...@gmail.com> <CAB-HnLT_fAE5tQCx-bqYWxZjFW4dHeDCZ9tsz=aucmuztb+...@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 <enom...@meer.net> wrote: >> >> I notice this commit to CFFI: >> >> * commit 743a90251e5a4407147a20bd8354df03a87ca46d >> Author: stacksmith <stacksm...@users.noreply.github.com> >> AuthorDate: Thu Aug 19 06:34:28 2021 -0700 >> Commit: GitHub <nore...@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 >>