[gambit-list] Passing lambdas as callbacks to C functions

Phil Dawes pdawes at users.sf.net
Fri Feb 2 17:10:45 EST 2007


Hi Marc, Hi Gambit List,

I ran into problems using lambda expressions as callbacks when wrapping 
libcsv and I've boiled it down to this testcase. Can anybody tell me why 
this crashes?:

-------
(c-define (call-lambda l) (scheme-object) void "call_lambda" ""
           (l))

(define looper
   (c-lambda (scheme-object) void
#<<c-lambda-end
   while(1){
     call_lambda(___ARG1);
   }
c-lambda-end
))


(define (main)
     (looper (lambda () (write "foo"))))
--------

looper is a c function which takes a scheme lambda and repeated invokes 
it using the 'call_lambda' bridging function.

When I gsc compile it and run '(main)' after a bunch of looping and 
printing it crashes with:
ERROR IN looper -- Operator is not a PROCEDURE
('#<return #2>)

Any ideas?  (or am I being stupid?!)

Many thanks,

Phil




More information about the Gambit-list mailing list