[squeak-dev] FFI: FFI-Kernel-mt.133.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed May 5 16:22:09 UTC 2021
Marcel Taeumel uploaded a new version of FFI-Kernel to project FFI:
http://source.squeak.org/FFI/FFI-Kernel-mt.133.mcz
==================== Summary ====================
Name: FFI-Kernel-mt.133
Author: mt
Time: 5 May 2021, 6:22:06.654784 pm
UUID: 5b4d9432-d53c-424d-9d60-7e9dd5c7ce64
Ancestors: FFI-Kernel-mt.132
Since empty array types such as char[] are not actually supported, e.g., in struct defs, disallow them for now to not deceive users trying to work with them and then wonder about strange results.
=============== Diff against FFI-Kernel-mt.132 ===============
Item was changed:
----- Method: ExternalArrayType class>>newTypeForContentType:size: (in category 'instance creation') -----
newTypeForContentType: contentType size: numElements
"!!!!!! Be aware that only the pointer type can be used in calls. As of SqueakFFIPrims VMMaker.oscog-eem.2950, there is no actual support for array types in the FFI plugin !!!!!!"
| type pointerType headerWord byteSize |
self
assert: [contentType isPointerType not]
description: 'No support for pointers as content type yet!!'.
self
+ assert: [numElements > 0]
+ description: 'Empty array types are not supported!!'.
+
+ self
assert: [contentType byteSize > 0]
description: 'Invalid byte size!!'.
self
assert: [(ArrayTypes includesKey: contentType typeName -> numElements) not]
description: 'Array type already exists. Use #typeNamed: to access it.'.
type := self "ExternalArrayType" basicNew.
pointerType := ExternalType basicNew.
"1) Regular type"
byteSize := numElements * contentType byteSize.
self assert: [byteSize <= FFIStructSizeMask].
headerWord := contentType headerWord.
headerWord := headerWord bitClear: FFIStructSizeMask.
headerWord := headerWord bitOr: byteSize.
type
setReferencedType: pointerType;
compiledSpec: (WordArray with: headerWord);
byteAlignment: contentType byteAlignment;
setReferentClass: contentType referentClass;
setSize: numElements.
"2) Pointer type. Reuse the compiledSpec of the content-type's pointer type."
pointerType
setReferencedType: type;
compiledSpec: contentType asPointerType compiledSpec copy;
byteAlignment: contentType asPointerType byteAlignment;
setReferentClass: contentType asPointerType referentClass.
"3) Remember this new array type."
ArrayTypes
at: contentType typeName -> numElements
put: type.
^ type!
Item was changed:
----- Method: ExternalType class>>newTypeNamed: (in category 'instance creation') -----
newTypeNamed: aTypeName
"Create a new struct type or array type. Not needed for atomic types; see #initializeDefaultTypes."
| structClass arraySpec |
self
assert: [aTypeName last ~~ $*]
description: 'Pointer type will be created automatically'.
aTypeName last == $] ifTrue: [ "array type, e.g., char[50]"
arraySpec := self parseArrayTypeName: aTypeName.
arraySpec second ifNil: [arraySpec at: 2 put: (self newTypeNamed: arraySpec first)].
- arraySpec third ifNil: [arraySpec at: 3 put: 0].
^ self
newTypeForContentType: arraySpec second
size: arraySpec third].
structClass := (self environment classNamed: aTypeName)
ifNotNil: [:class | (class includesBehavior: ExternalStructure) ifTrue: [class]].
^ structClass
ifNil: [self newTypeForUnknownNamed: aTypeName]
ifNotNil: [self newTypeForStructureClass: structClass]!
Item was changed:
(PackageInfo named: 'FFI-Kernel') postscript: 'Smalltalk removeFromStartUpList: ExternalAddress.
Smalltalk removeFromStartUpList: ExternalObject.
"Adds housekeeping for array types."
+ ExternalType resetAllStructureTypes..
- ExternalType resetAllStructureTypes.
"Re-generate all field accessors because type checks are now controlled by a new preference."
ExternalStructure defineAllFields.
'!
More information about the Squeak-dev
mailing list
|