12 /* args: R1 = closure to analyze */
13 // TODO: Consider the absence of ptrs or nonptrs as a special case ?
19 info = %GET_STD_INFO(clos);
21 (len) = foreign "C" closureSize(clos "ptr") [];
24 data_arr_sz = SIZEOF_StgArrWords + WDS(len);
26 ALLOC_PRIM (data_arr_sz, R1_PTR, slurpClosurezh);
29 data_arr = Hp - data_arr_sz + WDS(1);
31 SET_HDR(data_arr, stg_ARR_WORDS_info, CCCS);
32 StgArrWords_bytes(data_arr) = WDS(len);
37 // W_[BYTE_ARR_CTS(data_arr) + WDS(p)] = StgClosure_payload(clos, p);
38 W_[BYTE_ARR_CTS(data_arr) + WDS(p)] = W_[clos + WDS(p)];
45 ("ptr" ptrArray) = foreign "C" closurePtrs(MyCapability() "ptr", clos "ptr") [];
47 RET_NPP(info, data_arr, ptrArray);