Newbie questions about Pliant

Newbie questions about Pliant

C callbacks in Pliant

Is there a way to write call-back functions in pliant and
pass them into C functions?
Message posted by mujtaba on 2002/12/23 16:45:52
Is there a way to write call-back functions in pliant and
pass them into C functions? 

eg. 

function exit status
 arg Int status
 external "libc.so.6" "exit"

function atexit func
 arg Address func
 external "libc.so.6" "atexit"

function exit_callback 
 console "Exiting..." eol

#doesn't work.
atexit addressof:exit_callback
console "Beginning to exit now:" eol
exit 1
Message posted by mujtaba on 2002/12/23 16:52:56
I relize this is wishful thinking and its probably not going to be easy as in the
 example above. But there must be away to get the address of the compiled pliant 
function, and assuming its compatbile with C, pass it as a callback.
Message posted by maybe Hubert Tonneau on 2002/12/26 15:08:02
In the callback function, you must use 'external_calling_convention' flag in
order to force it to use 'standard' calling convension:

function exit_callback 
  external_calling_convention
  console "Exiting..." eol

Then you have to use something like:

(the_function exit_callback) executable

in order to get the address of the executable part of the function.

As an example, you can see 'pliant_zalloc' in module /pliant/language/stream/zlib.pli
Message posted by mujtaba on 2002/12/27 14:36:38
Thanks, but the following doesn't appear to work. I get a compile error 
at the line with "the_function." Shouldn't this code work? How do I fix
this to work as expected?

module "/pliant/language/context.pli"
#Do I need unsafe?
module "/pliant/language/unsafe.pli"

function exit status
 arg Int status
 external "libc.so.6" "exit"

function atexit callback
 arg Address callback
 external "libc.so.6" "atexit"

function exit_function
 external_calling_convention
 console "Exiting..." eol

gvar Address func

func := (the_function exit_function) executable
#commented out, but is intended to use the above.
#atexit func
console "beginning to exit now..." eol
exit 1
Message posted by mujtaba on 2002/12/27 15:03:45
Nevermind, I found that I also need to include the /pliant/language/compiler.pli
module. Now it works, thanks.