<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">I have found the problem with VoidPointer3 generating accessors.</div><div class=""><br class=""></div><div class="">No idea how to contribute back a fix but this is what I've found.</div><div class=""><br class=""></div><div class="">FFITypeArrayType>>annonymousClassCreator</div><div class=""><span class="Apple-tab-span" style="white-space:pre">      </span>^ String streamContents: [ :stream |</div><div class=""><span class="Apple-tab-span" style="white-space:pre">              </span>stream </div><div class=""><span class="Apple-tab-span" style="white-space:pre">                      </span>nextPutAll: '(FFITypeArray ofType: ';</div><div class=""><span class="Apple-tab-span" style="white-space:pre">                     </span>print: (self objectClass type isPointer ifTrue: [self externalTypeWithArity printString] ifFalse: ['#',self objectClass type class]);</div><div class=""><span class="Apple-tab-span" style="white-space:pre">                     </span>nextPutAll: ' size: ';</div><div class=""><span class="Apple-tab-span" style="white-space:pre">                    </span>print: self objectClass numberOfElements;</div><div class=""><span class="Apple-tab-span" style="white-space:pre">                 </span>nextPutAll: ')' ]</div><div class=""><br class=""></div><div class="">Recalling that we are trying to come up with an accessor that can pull out a void*[3], this produces</div><div class=""><br class=""></div><div class="">'(FFITypeArray ofType: #FFIVoid size: 3)'</div><div class=""><br class=""></div><div class="">which produces an error as FFIVoid's size is undefined.  In general, this will be wrong for any pointer type and will probably get the size calculation wrong.</div><div class=""><br class=""></div><div class="">Doing a little digging I find that </div><div class=""><br class=""></div><div class="">FFITypeArray>>ofType: aType size: aSize </div><div class=""><br class=""></div><div class="">delegates resolution of aType to FFIExternalType>>resolveType:aType and this can take all kinds of different things including the native type name.</div><div class=""><br class=""></div><div class="">It would be better if this generated the native name for pointers.</div><div class=""><br class=""></div><div class="">(FFITypeArray ofType: 'void*' size: 3)</div><div class=""><br class=""></div><div class="">So I changed it to:</div><div class=""><br class=""></div><div class=""><div class="">FFITypeArrayType>>annonymousClassCreator</div><div class=""><span class="Apple-tab-span" style="white-space:pre">       </span>^ String streamContents: [ :stream |</div><div class=""><span class="Apple-tab-span" style="white-space:pre">              </span>stream </div><div class=""><span class="Apple-tab-span" style="white-space:pre">                      </span>nextPutAll: '(FFITypeArray ofType: ';</div><div class=""><span class="Apple-tab-span" style="white-space:pre">                     </span>print: (self objectClass type isPointer </div><div class=""><span class="Apple-tab-span" style="white-space:pre">                             </span>ifTrue: [self externalTypeWithArity printString] </div><div class=""><span class="Apple-tab-span" style="white-space:pre">                            </span>ifFalse: ['#',self objectClass type class]);</div><div class=""><span class="Apple-tab-span" style="white-space:pre">                      </span>nextPutAll: ' size: ';</div><div class=""><span class="Apple-tab-span" style="white-space:pre">                    </span>print: self objectClass numberOfElements;</div><div class=""><span class="Apple-tab-span" style="white-space:pre">                 </span>nextPutAll: ')' ]</div></div><div class=""><br class=""></div><div class="">and this seems to work fine.</div><div class=""><br class=""></div><div class="">Onwards...</div><br class=""><div><blockquote type="cite" class=""><div class="">On Oct 19, 2017, at 7:18 AM, Todd Blanchard <<a href="mailto:tblanchard@mac.com" class="">tblanchard@mac.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="content-type" content="text/html; charset=utf-8" class=""><div dir="auto" class="">That’s great - it’s been kind of magical but a couple things have changed since you wrote it and some bugs have crept into ffi.<div class=""><br class=""></div><div class="">Right now I’m finding the generated accessor for the VoidPointer3 is actually generating a void 3 accessor and that doesn’t work. I spent all day yesterday tracking it to the accessor generating code.<br class=""><br class=""><div class="">Sent from the road</div><div class=""><br class="">On Oct 18, 2017, at 22:29, Ben Coman <<a href="mailto:btc@openinworld.com" class="">btc@openinworld.com</a>> wrote:<br class=""><br class=""></div><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><br class=""><div class="gmail_extra"><br class=""><div class="gmail_quote">On Thu, Oct 19, 2017 at 1:05 AM, Todd Blanchard <span dir="ltr" class=""><<a href="mailto:tblanchard@mac.com" target="_blank" class="">tblanchard@mac.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="">I'm working through Ben's great blog post about playing with libclang and I am puzzled by something.</div></blockquote><div class=""><br class=""></div><div class="">Thx Todd. Knowing someone is looking at it encourages me to expand it.  </div><div class="">I'm interested in looking at your specific questions, but it might not be until next week after this stint of long work days.</div><div class=""><br class=""></div><div class="">cheers -ben</div><div class=""><br class=""></div><div class=""> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><br class=""></div><div class=""><div class="">invalidateSessionData</div><div class="">   handle atAllPut: 0. </div></div><div class=""><br class=""></div><div class="">zero;s out the handle.  Cool.  However, </div><div class=""><br class=""></div><div class="">handle isNull </div><div class=""><br class=""></div><div class="">does not return true despite it being used in the getString method as </div><div class=""><br class=""></div><div class=""><div class="">^ handle isNull</div><div class="">         ifTrue: ['external memory invalidated by session restart']</div><div class="">         ifFalse:[LibClang clang_getCString__cxString: self].</div></div><div class=""><br class=""></div><div class="">Looks like there should be an isNull on ByteArray that returns true if all bytes are zero but it isn't  there.  Was it dropped for some reason?</div><div class=""><div class="h5"><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Oct 18, 2017, at 2:58 AM, Dimitris Chloupis <<a href="mailto:kilon.alios@gmail.com" target="_blank" class="">kilon.alios@gmail.com</a>> wrote:</div><br class="m_7832725649801949586Apple-interchange-newline"><div class=""><div dir="ltr" class="">Sure the documentation could be better, that is definetly important, but is already good enough and UFFI is a very technical subject much more suited to a mailing list . Its not physical possible to cover the massive potential of UFFI.  </div><br class=""><div class="gmail_quote"><div dir="ltr" class="">On Wed, Oct 18, 2017 at 9:32 AM Stephane Ducasse <<a href="mailto:stepharo.self@gmail.com" target="_blank" class="">stepharo.self@gmail.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Please do not hesitate to do Pull Requests.<br class="">
Luc told me that he wants to do a pass on it and Esteban promises that to me<br class="">
but he is super busy.<br class="">
<br class="">
Stef<br class="">
<br class="">
<br class="">
On Wed, Oct 18, 2017 at 5:54 AM, Todd Blanchard <<a href="mailto:tblanchard@mac.com" target="_blank" class="">tblanchard@mac.com</a>> wrote:<br class="">
> Wonderful!  Thanks.<br class="">
><br class="">
>> On Oct 17, 2017, at 3:45 PM, stephan <<a href="mailto:stephan@stack.nl" target="_blank" class="">stephan@stack.nl</a>> wrote:<br class="">
>><br class="">
>> On 17-10-17 23:06, Todd Blanchard wrote:<br class="">
>>> Anyone know what happened to this?<br class="">
>>> <a href="https://ci.inria.fr/pharo-contribution/view/Books/job/PharoBookWorkInProgress/lastSuccessfulBuild/artifact/book-result/UnifiedFFI/UnifiedFFI.pdf" rel="noreferrer" target="_blank" class="">https://ci.inria.fr/pharo-<wbr class="">contribution/view/Books/job/<wbr class="">PharoBookWorkInProgress/<wbr class="">lastSuccessfulBuild/artifact/<wbr class="">book-result/UnifiedFFI/<wbr class="">UnifiedFFI.pdf</a><br class="">
>><br class="">
>> <a href="https://github.com/SquareBracketAssociates/Booklet-uFFI" rel="noreferrer" target="_blank" class="">https://github.com/<wbr class="">SquareBracketAssociates/<wbr class="">Booklet-uFFI</a><br class="">
>><br class="">
>> has a link to a bintray pdf download<br class="">
>><br class="">
>> Stephan<br class="">
>><br class="">
>><br class="">
>><br class="">
><br class="">
><br class="">
<br class="">
</blockquote></div>
</div></blockquote></div><br class=""></div></div></div></div></blockquote></div><br class=""></div></div>
</div></blockquote></div></div></div></blockquote></div><br class=""></body></html>