FFI: FFI-Callbacks-mt.3.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

FFI: FFI-Callbacks-mt.3.mcz

commits-2
Marcel Taeumel uploaded a new version of FFI-Callbacks to project FFI:
http://source.squeak.org/FFI/FFI-Callbacks-mt.3.mcz

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

Name: FFI-Callbacks-mt.3
Author: mt
Time: 28 July 2020, 1:37:14.847011 pm
UUID: 9d6c3731-a9c3-2742-a9bb-d47d40a156d2
Ancestors: FFI-Callbacks-mt.2

Updates for FFI-Kernel-mt.119. You may need to re-generate the fields in FFICallbackContext and FFICallbackResult.

=============== Diff against FFI-Callbacks-mt.2 ===============

Item was changed:
  ----- Method: ExternalAddress class>>fromInteger: (in category '*FFI-Callbacks') -----
  fromInteger: anInteger
  "Read the given interger as an address pointing to an external memory area."
 
  | buffer type |
+ self flag: #refactor. "Maybe: ExternalAddress new fromInteger: anInteger --- and maybe move to FFI-Kernel"
  type := ExternalType uintptr_t.
  buffer := ByteArray new: type byteSize.
  type handle: buffer at: 1 put: anInteger.
  ^ buffer asExternalPointer!

Item was removed:
- ----- Method: FFICallbackContext>>floatRegArgs (in category 'accessing') -----
- floatRegArgs
- "This method was automatically generated. See FFICallbackContext class>>fields."
- <generated>
- ^ExternalData fromHandle: (handle shortPointerAt: 13) type: ExternalType double asPointerType!

Item was removed:
- ----- Method: FFICallbackContext>>floatRegArgs: (in category 'accessing') -----
- floatRegArgs: someExternalData
- "This method was automatically generated. See FFICallbackContext class>>fields."
- <generated>
- handle shortPointerAt: 13 put: someExternalData getHandle.!

Item was removed:
- ----- Method: FFICallbackContext>>intRegArgs (in category 'accessing') -----
- intRegArgs
- "This method was automatically generated. See FFICallbackContext class>>fields."
- <generated>
- ^ExternalData fromHandle: (handle shortPointerAt: 9) type: ExternalType long asPointerType!

Item was removed:
- ----- Method: FFICallbackContext>>intRegArgs: (in category 'accessing') -----
- intRegArgs: someExternalData
- "This method was automatically generated. See FFICallbackContext class>>fields."
- <generated>
- handle shortPointerAt: 9 put: someExternalData getHandle.!

Item was removed:
- ----- Method: FFICallbackContext>>rvs (in category 'accessing') -----
- rvs
- "This method was automatically generated. See FFICallbackContext class>>fields."
- <generated>
- ^FFICallbackResult fromHandle: (handle structAt: 25 length: 8)!

Item was removed:
- ----- Method: FFICallbackContext>>rvs: (in category 'accessing') -----
- rvs: aFFICallbackResult
- "This method was automatically generated. See FFICallbackContext class>>fields."
- <generated>
- handle structAt: 25 put: aFFICallbackResult getHandle length: 8.!

Item was removed:
- ----- Method: FFICallbackContext>>stackPtr (in category 'accessing') -----
- stackPtr
- "This method was automatically generated. See FFICallbackContext class>>fields."
- <generated>
- ^ExternalData fromHandle: (handle shortPointerAt: 5) type: ExternalType long asPointerType!

Item was removed:
- ----- Method: FFICallbackContext>>stackPtr: (in category 'accessing') -----
- stackPtr: someExternalData
- "This method was automatically generated. See FFICallbackContext class>>fields."
- <generated>
- handle shortPointerAt: 5 put: someExternalData getHandle.!

Item was removed:
- ----- Method: FFICallbackContext>>thunkp (in category 'accessing') -----
- thunkp
- "This method was automatically generated. See FFICallbackContext class>>fields."
- <generated>
- ^ExternalData fromHandle: (handle shortPointerAt: 1) type: ExternalType void asPointerType!

Item was removed:
- ----- Method: FFICallbackContext>>thunkp: (in category 'accessing') -----
- thunkp: someExternalData
- "This method was automatically generated. See FFICallbackContext class>>fields."
- <generated>
- handle shortPointerAt: 1 put: someExternalData getHandle.!

Item was changed:
  ----- Method: FFICallbackMemory class>>unload (in category 'class initialization') -----
  unload
 
+ Smalltalk removeFromStartUpList: self.
+ Smalltalk specialObjectsArray at: 53 put: nil.!
- Smalltalk removeFromStartUpList: self.!

Item was changed:
  ----- Method: FFICallbackMemory>>externalPointer: (in category 'accessing') -----
  externalPointer: anExternalAddress
 
+ self addressFieldPut: anExternalAddress asInteger.!
- | type integer |
- self flag: #debugging.
- type := ExternalType uintptr_t.
- integer := type
- handle: anExternalAddress asByteArrayPointer
- at: 1.
-
- self addressFieldPut: integer.!

Item was removed:
- ----- Method: FFICallbackResult>>booleanResult (in category 'accessing') -----
- booleanResult
- "This method was automatically generated. See FFICallbackResult class>>fields."
- <generated>
- ^handle booleanAt: 1!

Item was removed:
- ----- Method: FFICallbackResult>>booleanResult: (in category 'accessing') -----
- booleanResult: aBoolean
- "This method was automatically generated. See FFICallbackResult class>>fields."
- <generated>
- handle booleanAt: 1 put: aBoolean!

Item was removed:
- ----- Method: FFICallbackResult>>floatResult (in category 'accessing') -----
- floatResult
- "This method was automatically generated. See FFICallbackResult class>>fields."
- <generated>
- ^handle doubleAt: 1!

Item was removed:
- ----- Method: FFICallbackResult>>floatResult: (in category 'accessing') -----
- floatResult: aFloat
- "This method was automatically generated. See FFICallbackResult class>>fields."
- <generated>
- handle doubleAt: 1 put: aFloat!

Item was removed:
- ----- Method: FFICallbackResult>>integerResult (in category 'accessing') -----
- integerResult
- "This method was automatically generated. See FFICallbackResult class>>fields."
- <generated>
- ^handle signedLongAt: 1!

Item was removed:
- ----- Method: FFICallbackResult>>integerResult: (in category 'accessing') -----
- integerResult: anInteger
- "This method was automatically generated. See FFICallbackResult class>>fields."
- <generated>
- handle signedLongAt: 1 put: anInteger!

Item was removed:
- ----- Method: FFICallbackResult>>positiveIntegerResult (in category 'accessing') -----
- positiveIntegerResult
- "This method was automatically generated. See FFICallbackResult class>>fields."
- <generated>
- ^handle unsignedLongAt: 1!

Item was removed:
- ----- Method: FFICallbackResult>>positiveIntegerResult: (in category 'accessing') -----
- positiveIntegerResult: anInteger
- "This method was automatically generated. See FFICallbackResult class>>fields."
- <generated>
- handle unsignedLongAt: 1 put: anInteger!

Item was removed:
- ----- Method: Parser>>callback (in category '*FFI-Callbacks') -----
- callback
- <pragmaParser>
-
- | descriptorClass retType externalName args argType |
- descriptorClass := ExternalFunction.
- "Parse return type"
- self advance.
- here = 'const' ifTrue: [self advance].
- retType := self externalType: descriptorClass.
- retType == nil ifTrue:[^self expected:'return type'].
- "Parse function name or index"
- externalName := here.
-
- (self match: #leftParenthesis) ifFalse:[^self expected:'function pointer (*)'].
- (self matchToken: #*) ifFalse:[^self expected:'function pointer (*)'].
- (self match: #rightParenthesis) ifFalse:[^self expected:'function pointer (*)'].
-
- (self match: #leftParenthesis) ifFalse:[^self expected:'argument list'].
- args := WriteStream on: Array new.
- [self match: #rightParenthesis] whileFalse:[
- here = 'const' ifTrue: [self advance].
- here = ',' ifTrue: [self advance].
- argType := self externalType: descriptorClass.
- argType == nil ifTrue:[^self expected:'argument'].
- argType isVoid & argType isPointerType not ifFalse:[args nextPut: argType]].
-
- self addPragma: (Pragma keyword: #callback: arguments: {{retType}, args contents}).
- ^true!

Item was removed:
- ----- Method: SHParserST80>>callback (in category '*FFI-Callbacks') -----
- callback
- <pragmaParser>
-
- self scanPast: #externalFunctionCallingConvention.
-
- self scanPast: #externalCallType.
- currentToken = '*'
- ifTrue: [self scanPast: #externalCallTypePointerIndicator].
-
- currentTokenFirst == $( ifFalse: [^ self fail]. self scanNext.
- currentTokenFirst == $* ifFalse: [^ self fail]. self scanNext.
- currentTokenFirst == $) ifFalse: [^ self fail]. self scanNext.
-
- self failUnless: currentTokenFirst == $(.
- self scanPast: #leftParenthesis.
- [currentTokenFirst ~= $)]
- whileTrue: [
- self failUnless: currentToken notNil.
- self scanPast: #externalCallType.
- currentToken = '*'
- ifTrue: [self scanPast: #externalCallTypePointerIndicator]].
- self scanPast: #rightParenthesis.
- currentToken = 'module:'
- ifTrue: [
- self scanPast: #module.
- self parseStringOrSymbol ].
- currentToken = 'error:' ifTrue: [
- self scanPast: #primitive. "there's no rangeType for error"
- self currentTokenType == #name
- ifTrue: [ self parseTemporary: #patternTempVar ]
- ifFalse: [ self parseStringOrSymbol ] ].
- self failUnless: currentToken = '>'.
- self scanPast: #primitiveOrExternalCallEnd!