[Pharo-dev] UnifiedFFI Docs

Todd Blanchard tblanchard at mac.com
Thu Oct 19 16:34:04 EDT 2017


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 <tblanchard at mac.com> 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 <btc at openinworld.com <mailto:btc at openinworld.com>> wrote:
> 
>> 
>> 
>> On Thu, Oct 19, 2017 at 1:05 AM, Todd Blanchard <tblanchard at mac.com <mailto:tblanchard at mac.com>> 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 <kilon.alios at gmail.com <mailto:kilon.alios at gmail.com>> 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 <stepharo.self at gmail.com <mailto:stepharo.self at gmail.com>> 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 <tblanchard at mac.com <mailto:tblanchard at mac.com>> wrote:
>>> > Wonderful!  Thanks.
>>> >
>>> >> On Oct 17, 2017, at 3:45 PM, stephan <stephan at stack.nl <mailto:stephan at stack.nl>> 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
>>> >>
>>> >>
>>> >>
>>> >
>>> >
>>> 
>> 
>> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/attachments/20171019/4b492b3d/attachment-0002.html>


More information about the Pharo-dev mailing list