[squeak-dev] FFI: FFI-Kernel-eem.183.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Jul 26 23:37:45 UTC 2021
Eliot Miranda uploaded a new version of FFI-Kernel to project FFI:
http://source.squeak.org/FFI/FFI-Kernel-eem.183.mcz
==================== Summary ====================
Name: FFI-Kernel-eem.183
Author: eem
Time: 26 July 2021, 4:37:11.825452 pm
UUID: ca6c0ead-738a-4ab2-a658-b4fd904c9b51
Ancestors: FFI-Kernel-eem.182
Update the FFIAtomicReadWriteSend machinery to use the new accessors. Contains the post script method:
"Reinitialize FFIAtomicReadWriteSend to use the new accessors"
ExternalType initializeDefaultTypes
=============== Diff against FFI-Kernel-eem.182 ===============
Item was changed:
----- Method: ExternalType class>>typeNamed: (in category 'instance lookup') -----
typeNamed: typeName
"Supports pointer-type lookup for both atomic and structure types.
Examples: 'long', 'long*', 'long *' or 'MyStruct', 'MyStruct*', 'MyStruct *', 'IntPtr', '*IntPtr' "
| isPointerType isNonPointerType isArrayType actualTypeName type |
- isArrayType := false. isNonPointerType := false.
actualTypeName := typeName copyWithoutAll: ' '.
(isPointerType := actualTypeName last == $*) "e.g. MyStruct*"
ifTrue: [actualTypeName := actualTypeName allButLast].
actualTypeName last == $) "e.g. (char[])* -- pointer type for array type"
ifTrue: [actualTypeName := (actualTypeName copyFrom: 2 to: actualTypeName size - 1)].
(isNonPointerType := actualTypeName first == $*) "e.g. *DoublePtr"
ifTrue: [actualTypeName := actualTypeName allButFirst].
(isArrayType := actualTypeName last == $])
ifTrue: [ type := self arrayTypeNamed: actualTypeName ]
ifFalse: [
(Symbol lookup: actualTypeName)
ifNotNil: [:sym | actualTypeName := sym].
type := (self atomicTypeNamed: actualTypeName)
ifNil: [self structTypeNamed: actualTypeName]].
+ ^ type ifNotNil:
+ [isPointerType
- ^ type ifNotNil: [
- isPointerType
ifTrue: [type asPointerType "e.g. int* MyStruct* "]
ifFalse: [isNonPointerType
ifTrue: [type asNonPointerType "e.g. *IntPtr *MyStructPtr "]
ifFalse: [type "e.g. int IntPtr MyStruct MyStructPtr "]]]!
Item was changed:
----- Method: FloatReadWriteSend class>>fromType: (in category 'instance creation') -----
fromType: type
+ ^(self lookupSelectorsFor: type) collect:
+ [:selector| | arguments |
+ arguments := selector numArgs caseOf: {
+ [1] -> "e.g. doubleAt:" [#(nil)]. "byteOffset"
+ [2] -> "e.g. floatAt:put:" [#(nil nil)]. "byteOffset aFloat" }.
+ (self receiver: nil "handle" selector: selector arguments: arguments)
+ byteSize: type byteSize;
+ yourself]!
- | selectors |
- selectors := self lookupSelectorsFor: type.
- ^ {
-
- (self
- receiver: nil "handle" selector: selectors first
- arguments: (Array
- with: nil "byteOffset"))
- byteSize: type byteSize;
- yourself.
-
- (self
- receiver: nil "handle" selector: selectors second
- arguments: (Array
- with: nil "byteOffset"
- with: nil "aFloat"))
- byteSize: type byteSize;
- yourself
-
- }!
Item was changed:
----- Method: IntegerReadWriteSend class>>fromType: (in category 'instance creation') -----
fromType: type
"Overwritten to account for byteSize and isSigned."
+
+ ^(self lookupSelectorsFor: type) collect:
+ [:selector| | arguments |
+ arguments := selector numArgs caseOf: {
+ [1] -> "e.g. int32At:" [#(nil)]. "byteOffset"
+ [2] -> "e.g. int8At:put:" [#(nil nil)]. "byteOffset integerValue"
+ [3] -> "e.g. integerAt:size:signed:" [{nil. "byteOffset" type byteSize. type isSigned}].
+ [4] -> "e.g. integerAt:put:size:signed:" [{nil. "byteOffset" nil. "integerValue" type byteSize. type isSigned}] }.
+ (self receiver: nil "handle" selector: selector arguments: arguments)
+ byteSize: type byteSize;
+ yourself]!
-
- | selectors |
- selectors := self lookupSelectorsFor: type.
- ^ {
-
- (self
- receiver: nil "handle" selector: selectors first
- arguments: (Array
- with: nil "byteOffset"
- with: type byteSize
- with: type isSigned))
- byteSize: type byteSize;
- yourself.
-
- (self
- receiver: nil "handle" selector: selectors second
- arguments: (Array
- with: nil "byteOffset"
- with: nil "integerValue"
- with: type byteSize
- with: type isSigned))
- byteSize: type byteSize;
- yourself.
- }!
Item was changed:
+ (PackageInfo named: 'FFI-Kernel') postscript: '"Reinitialize FFIAtomicReadWriteSend to use the new accessors"
+ ExternalType initializeDefaultTypes'!
- (PackageInfo named: 'FFI-Kernel') postscript: 'Smalltalk removeFromStartUpList: ExternalAddress.
- Smalltalk removeFromStartUpList: ExternalObject.
-
- "Introduce FFIAtomicReadWriteSend. All types need to be reset and all fields need to be re-defined."
- ExternalType resetAllTypes.'!
More information about the Squeak-dev
mailing list
|