parens (hsep (punctuate comma (zipWith (<+>) cParamTypes proto_args)))
c_bits =
- externDecl $$
fun_proto $$
vcat
[ lbrace
, text "SchedulerStatus rc;"
, declareResult
-- create the application + perform it.
- , text "rc=rts_evalIO" <>
- parens (foldl appArg (text "(StgClosure*)&" <> h_nm) (zip args c_args) <> comma <> text "&ret") <> semi
+ , text "rc=rts_evalIO"
+ <> parens (foldl appArg (text "(StgClosure*)deRefStablePtr(a0)")
+ (tail (zip args c_args))
+ <> comma
+ <> text "&ret"
+ )
+ <> semi
, text "rts_checkSchedStatus" <> parens (doubleQuotes (ptext c_nm)
<> comma <> text "rc") <> semi
, text "return" <> return_what <> semi
declareResult = text "HaskellObj ret;"
- externDecl = mkExtern (text "HaskellObj") h_nm
-
mkExtern ty nm = text "extern" <+> ty <+> nm <> semi
return_what | res_ty_is_unit = empty