Marcel Taeumel uploaded a new version of FFI-Tests to project FFI: http://source.squeak.org/FFI/FFI-Tests-mt.60.mcz
==================== Summary ====================
Name: FFI-Tests-mt.60 Author: mt Time: 12 August 2021, 4:33:41.048047 pm UUID: d606180c-bdf8-ba4d-bc00-78ec76a5a699 Ancestors: FFI-Tests-mt.59
Complements FFI-Kernel-mt.200
=============== Diff against FFI-Tests-mt.59 ===============
Item was changed: ----- Method: FFIPluginLibraryTests>>invoke:withArguments: (in category 'support') ----- invoke: functionName withArguments: someObjects "Use an instance of the library. Compile class-side methods to instance-side methods as needed."
| selector library | selector := self lookupSelector: functionName numArgs: someObjects size. library := FFITestLibrary new.
+ (library respondsTo: selector) ifFalse: [ | signature source prototype method | - (library respondsTo: selector) ifFalse: [ | signature source prototype priorAuthorInitials | "1) Build method signature." signature := String streamContents: [:s | | index | index := 0. selector do: [:char | s nextPut: char. char = $: ifTrue: [ index := index + 1. s space; nextPutAll: 'arg'; nextPutAll: index asString; space]]]. "2) Construct method source." prototype := library class class compiledMethodAt: selector. source := '{1}\ {2}\ <generated>\ {3}\ ^ self externalCallFailed' withCRs format: { signature. '"This method was automatically generated. See {1}>>{2}"' format: {prototype methodClass. prototype selector}. prototype externalLibraryFunction copy setModule: nil; printString }. "3) Compile instance-side FFI call in library." + library class compileSilently: source classified: '*autogenerated - primitives'. + method := library class compiledMethodAt: selector. + method becomeForward: (method copyWithSourceCode: source)]. - priorAuthorInitials := Utilities authorInitialsPerSe. - [Utilities authorInitials: 'FFI'. - library class compile: source classified: '*autogenerated - primitives' - ] ensure: [Utilities authorInitials: priorAuthorInitials]].
^ library perform: selector withArguments: someObjects!
packages@lists.squeakfoundation.org