I have found the problem with VoidPointer3 generating accessors.
No idea how to contribute back a fix but this is what I've found.
FFITypeArrayType>>annonymousClassCreator
^ String streamContents: [ :stream |
stream
nextPutAll: '(FFITypeArray ofType: ';
print: (self objectClass type isPointer ifTrue: [self
externalTypeWithArity printString] ifFalse: ['#',self objectClass type class]);
nextPutAll: ' size: ';
print: self objectClass numberOfElements;
nextPutAll: ')' ]
Recalling that we are trying to come up with an accessor that can pull out a
void*[3], this produces
'(FFITypeArray ofType: #FFIVoid size: 3)'
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.
Doing a little digging I find that
FFITypeArray>>ofType: aType size: aSize
delegates resolution of aType to FFIExternalType>>resolveType:aType and this
can take all kinds of different things including the native type name.
It would be better if this generated the native name for pointers.
(FFITypeArray ofType: 'void*' size: 3)
So I changed it to:
FFITypeArrayType>>annonymousClassCreator
^ String streamContents: [ :stream |
stream
nextPutAll: '(FFITypeArray ofType: ';
print: (self objectClass type isPointer
ifTrue: [self externalTypeWithArity
printString]
ifFalse: ['#',self objectClass type class]);
nextPutAll: ' size: ';
print: self objectClass numberOfElements;
nextPutAll: ')' ]
and this seems to work fine.
Onwards...
> On Oct 19, 2017, at 7:18 AM, Todd Blanchard <[email protected]> wrote:
>
> 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.
>
> 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.
>
> Sent from the road
>
> On Oct 18, 2017, at 22:29, Ben Coman <[email protected]
> <mailto:[email protected]>> wrote:
>
>>
>>
>> On Thu, Oct 19, 2017 at 1:05 AM, Todd Blanchard <[email protected]
>> <mailto:[email protected]>> wrote:
>> I'm working through Ben's great blog post about playing with libclang and I
>> am puzzled by something.
>>
>> Thx Todd. Knowing someone is looking at it encourages me to expand it.
>> I'm interested in looking at your specific questions, but it might not be
>> until next week after this stint of long work days.
>>
>> cheers -ben
>>
>>
>>
>> invalidateSessionData
>> handle atAllPut: 0.
>>
>> zero;s out the handle. Cool. However,
>>
>> handle isNull
>>
>> does not return true despite it being used in the getString method as
>>
>> ^ handle isNull
>> ifTrue: ['external memory invalidated by session restart']
>> ifFalse:[LibClang clang_getCString__cxString: self].
>>
>> 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?
>>
>>
>>
>>> On Oct 18, 2017, at 2:58 AM, Dimitris Chloupis <[email protected]
>>> <mailto:[email protected]>> wrote:
>>>
>>> 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.
>>>
>>> On Wed, Oct 18, 2017 at 9:32 AM Stephane Ducasse <[email protected]
>>> <mailto:[email protected]>> wrote:
>>> Please do not hesitate to do Pull Requests.
>>> Luc told me that he wants to do a pass on it and Esteban promises that to me
>>> but he is super busy.
>>>
>>> Stef
>>>
>>>
>>> On Wed, Oct 18, 2017 at 5:54 AM, Todd Blanchard <[email protected]
>>> <mailto:[email protected]>> wrote:
>>> > Wonderful! Thanks.
>>> >
>>> >> On Oct 17, 2017, at 3:45 PM, stephan <[email protected]
>>> >> <mailto:[email protected]>> wrote:
>>> >>
>>> >> On 17-10-17 23:06, Todd Blanchard wrote:
>>> >>> Anyone know what happened to this?
>>> >>> https://ci.inria.fr/pharo-contribution/view/Books/job/PharoBookWorkInProgress/lastSuccessfulBuild/artifact/book-result/UnifiedFFI/UnifiedFFI.pdf
>>> >>>
>>> >>> <https://ci.inria.fr/pharo-contribution/view/Books/job/PharoBookWorkInProgress/lastSuccessfulBuild/artifact/book-result/UnifiedFFI/UnifiedFFI.pdf>
>>> >>
>>> >> https://github.com/SquareBracketAssociates/Booklet-uFFI
>>> >> <https://github.com/SquareBracketAssociates/Booklet-uFFI>
>>> >>
>>> >> has a link to a bintray pdf download
>>> >>
>>> >> Stephan
>>> >>
>>> >>
>>> >>
>>> >
>>> >
>>>
>>
>>