#include "Cmm.h"
closureSizezh ( P_ closure )
{
W_ clos;
clos = UNTAG(closure);
W_ len;
(len) = foreign "C" heap_view_closureSize(clos "ptr");
return (len);
}
unpackClosureDatzh ( P_ closure )
{
W_ p, ptrs_arr, dat_arr;
W_ clos;
clos = UNTAG(closure);
W_ len;
(len) = foreign "C" heap_view_closureSize(clos "ptr");
foreign "C" printf("unpack %p %d\n", clos, len);
W_ dat_arr_sz;
dat_arr_sz = SIZEOF_StgArrBytes + WDS(len);
ALLOC_PRIM_N (dat_arr_sz, unpackClosureDatzh, closure);
foreign "C" printf("unpack(2) %p %d\n", clos, len);
dat_arr = Hp - dat_arr_sz + WDS(1);
SET_HDR(dat_arr, stg_ARR_WORDS_info, CCCS);
StgArrBytes_bytes(dat_arr) = WDS(len);
foreign "C" printf("unpack(3) %p %d\n", clos, len);
p = 0;
for:
if(p < len) {
foreign "C" printf("unpack(3a) %p %d/%d %p\n", clos,p, len, clos + WDS(p));
W_[BYTE_ARR_CTS(dat_arr) + WDS(p)] = W_[clos + WDS(p)];
p = p + 1;
goto for;
}
foreign "C" printf("unpack(4) %p %d\n", clos, len);
return (dat_arr);
}
unpackClosureInfozh ( P_ closure )
{
W_ info;
info = %GET_STD_INFO(UNTAG(closure));
return (info);
}
unpackClosurePtrzh ( P_ closure )
{
W_ clos;
clos = UNTAG(closure);
W_ ptrArray;
("ptr" ptrArray) = foreign "C" heap_view_closurePtrsAsWords(MyCapability() "ptr", clos "ptr");
return (ptrArray);
}