[squeak-dev] FFI: FFI-Kernel-mt.124.mcz

commits at source.squeak.org commits at source.squeak.org
Sat May 1 16:29:01 UTC 2021

Marcel Taeumel uploaded a new version of FFI-Kernel to project FFI:

==================== Summary ====================

Name: FFI-Kernel-mt.124
Author: mt
Time: 1 May 2021, 6:29:01.295408 pm
UUID: 7c619637-8c9f-5648-b752-5043a9a455c9
Ancestors: FFI-Kernel-mt.123

Removes deprecated collection interface from ExternalData.

Nukes unused instVar 'fieldTypes' in structure types. I could not remember what I planned to do with it. Could not find it on squeak-dev either. 

Extends print-string for external types with byteSize and byteAlignment. It does not look too noisy. I hope it will help remind programmers about the bytes they are working with. Well, if it becomes too noisy, we could make it a preference.

=============== Diff against FFI-Kernel-mt.123 ===============

Item was removed:
- ----- Method: ExternalData>>collectWithIndex: (in category 'enumerating') -----
- collectWithIndex: elementAndIndexBlock
- 	"See SequenceableCollection >> #collectWithIndex:."
- 	^ self collectWithIndex: elementAndIndexBlock!

Item was removed:
- ----- Method: ExternalData>>doWithIndex: (in category 'enumerating') -----
- doWithIndex: elementAndIndexBlock
- 	"See SequenceableCollection >> #doWithIndex:."
- 	self withIndexDo: elementAndIndexBlock.!

Item was changed:
  ExternalType subclass: #ExternalStructureType
+ 	instanceVariableNames: ''
- 	instanceVariableNames: 'fieldTypes'
  	classVariableNames: ''
  	poolDictionaries: ''
  	category: 'FFI-Kernel'!
  !ExternalStructureType commentStamp: 'mt 6/18/2020 08:54' prior: 0!
  I am specializing types for external structures. While compiledSpec and referentClass are still paramount when the FFI plugin is processing FFI calls, this specialization can help untangle in-image processing of external structures and their data. 
  In terms of plugin compatibility, you could still use instances of ExternalType as, for example, argument types in ExternalFunction -- given that compiledSpec and referentClass are correct. Argument coercing in FFI calls would still work. However, you could no longer use in-image facilities such as #readFieldAt: / #writeFieldAt:width, which is used for generating struct-field accessors. And the dynamic access through #handle:at: / #handle:at:put: would fail. Also, #printOn: would not be very helpful anymore.
  So, having this specialization of ExternalType for ExternalStructure helps packaging code. :-) Of course, this type can also be used for ExternalUnion, ExternalPackagedStructure, and ExternalTypeAlias.!

Item was changed:
  ----- Method: ExternalStructureType>>printOn: (in category 'printing') -----
  printOn: aStream
  	self isTypeAlias ifTrue: [
  		aStream nextPutAll: referentClass name.
  			nextPutAll: '~>';
  			print: self originalType.
  		self isEmpty
  			ifTrue: [aStream nextPutAll: ' ???'].
  		^ self].
  	referentClass == nil
  		ifTrue:[aStream nextPutAll: '<unknown struct type>']
+ 			super printOn: aStream.
- 			aStream nextPutAll: referentClass name.
  			self isEmpty
  				ifTrue: [aStream nextPutAll: ' { void }']].!

Item was changed:
  ----- Method: ExternalType>>printOn: (in category 'printing') -----
  printOn: aStream
  	aStream nextPutAll: (referentClass ifNil: [self atomicTypeName] ifNotNil: [referentClass name]).
+ 	self isPointerType ifTrue: [aStream nextPut: $*].
+ 	aStream
+ 		space;
+ 		nextPut: $(;
+ 		nextPutAll: self byteSize asString;
+ 		space;
+ 		nextPutAll: self byteAlignment asString;
+ 		nextPut: $).!
- 	self isPointerType ifTrue: [aStream nextPut: $*].!

More information about the Squeak-dev mailing list