Callback instantiation:

createCallback
>    ^ FFICallback
>   signature: #(long (long))
>   block: [ :value | value ]


C functions:

long test(long(*function)(long), long value) {
>    return function(value);

}


#include <limits.h>
>
> long long_min() {
>    return LONG_MIN;
> }


FFI calls:

primCall: aCallback long: aNumber
>    ^ self ffiCall: #(long test(FFICallback aCallback, long aNumber))



> primLongMin
>    ^ self ffiCall: #(long long_min())


Test case:

test
>   self
>     assert: (self primCall: self createCallback long: self primLongMin)

    equals: self primLongMin


self primLongMin returns -2147483648 (= LONG_MIN).
Result of callback is 0 => test fails.

P.S. works in Pharo 5

Cheers,
Alex

Reply via email to