Welcome to the CHICKEN Scheme pasting service
This fails pasted by szablica on Sun Mar 3 16:10:34 2013
(import foreign) (use srfi-4) (foreign-declare " int sum(int n, int32_t* array) { int i; int result; for (i = 0; i < n; i++) { result += array[i]; } return result; }") (define c-sum (foreign-lambda int "sum" int (c-pointer int))) (define some-numbers (s32vector 1 1 2 3 5 8 13)) (display (c-sum (s32vector-length some-numbers) (s32vector->blob some-numbers)))
with this error pasted by szablica on Sun Mar 3 16:11:17 2013
[karol@localhost 13-03-03 16:09 000/trash]> csc example.scm [karol@localhost 13-03-03 16:10 000/trash]> ./example Error: bad argument type - not a pointer: #${0100000001000000020000000300000005000000080000000d000000} Call history: example.scm:21: s32vector example.scm:23: s32vector-length example.scm:24: s32vector->blob example.scm:23: c-sum <--
When I substitute (c-pointer int) with scheme-pointer... pasted by szablica on Sun Mar 3 16:18:15 2013
[karol@localhost 13-03-03 16:15 000/trash]> csc example.scm [karol@localhost 13-03-03 16:16 000/trash]> ./example -2097040967% [karol@localhost 13-03-03 16:16 000/trash]> ./example 1068841001% [karol@localhost 13-03-03 16:16 000/trash]> ./example 65953081% [karol@localhost 13-03-03 16:16 000/trash]> ./example -83068807% [karol@localhost 13-03-03 16:16 000/trash]> ./example 1040553097% [karol@localhost 13-03-03 16:16 000/trash]> ./example -871956919% [karol@localhost 13-03-03 16:16 000/trash]> ./example 1166105417% [karol@localhost 13-03-03 16:16 000/trash]> ./example 858580569% [karol@localhost 13-03-03 16:16 000/trash]> ./example 288343449% [karol@localhost 13-03-03 16:16 000/trash]> ./example 1832255977%
*FIXED* added by szabli on Sun Mar 3 16:54:50 2013
(import foreign) (use srfi-4) (foreign-declare " int sum(int n, int32_t* array) { int i; int result = 0; for (i = 0; i < n; i++) { result += array[i]; } return result; }") (define c-sum (foreign-lambda int "sum" int scheme-pointer)) (define some-numbers (s32vector 1 1 2 3 5 8 13)) (display (c-sum (s32vector-length some-numbers) (s32vector->blob some-numbers)))