Solved!
By just using the following syntax, GHC compiles everything correctly:

foreign import ccall
        "&duma_releaseFont"  -- absolutely vital for FunPtr functions
        duma_releaseFont
        :: FunPtr (Ptr RawFont -> IO ())

which now gives (correctly):

s36c_entry() {
   // SNIP
call "ccall" suspendThread((BaseReg, NoHint))[(_c3be, NoHint)];
call "ccall" duma_releaseFont((_s365, PtrHint)); // SPLENDID WORK GHC !!!! :-))))
call "ccall" resumeThread((_c3be, NoHint));

So it seems there is something ***very*** special about the "&duma_releaseFont" syntax whereas I'd have thought that the meaning of:

foreign import ccall duma_releaseFont
         :: FunPtr (Ptr RawFont -> IO ()) -- DANGEROUSLY BAD :-(

should be absolutely identical. However it is not. I'm not sure whether or not to report this as a bug since it certainly tripped me up, and it was only by some lucky detective work that I discovered what was happening.

Is there supposed to be a difference or is this just a bug?

In any case - problem solved,

Brian.
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to