rts/Printer.c

Alastair David Reid reid@cs.utah.edu
19 Mar 2002 12:59:22 +0000


> My question is: should I implement it through the FFI or as a
> primitive ala primops.txt? Perhaps they amount to much the same
> thing.

I'd make it a primop if there were some really unusual strictness
issues involved or, if I wanted to eliminate all overhead, as in
integer addition or if the operation did strange things to the state
of the abstract machine (like pushing an exception-handler frame).

I'd use the ffi for anything else.


Here, there is a strange strictness issue (you don't want printObj to
evaluat its argument) but SimonM's suggestion that you really want to
use a stable pointer gets round this.

What you'll need is a little wrapper function which will convert the
stableptr into an StgClosure*

  void printObj_wrapper(StablePtr x) 
  {
    printObj(derefStablePtr(x));
  }

(I'm sure the names of types and functions doesn't match those in
header files - but hopefully the ones you want are easy to find.)

-- 
Alastair Reid