void hs_spt_insert(StgWord64 key[2], void *spe_closure) { // Cannot remove this indirection yet because getStablePtr() // might return NULL, in which case hs_spt_lookup() returns NULL // instead of the actual closure pointer. StgStablePtr * entry = stgMallocBytes( sizeof(StgStablePtr) , "hs_spt_insert: entry" ); *entry = getStablePtr(spe_closure); hs_spt_insert_stableptr(key, entry); }
HsStablePtr g_value_to_haskellobj(const GValue *value) { Capability *cap; HaskellObj obj; HsStablePtr ret; cap = rts_lock(); obj = gtk2hs_value_as_haskellobj(cap, value); rts_unlock(cap); ret = (HsStablePtr) getStablePtr((StgPtr) obj); return ret; }
static void * stgAllocStable(size_t size_in_bytes, StgStablePtr *stable) { StgArrWords* arr; nat data_size_in_words, total_size_in_words; /* round up to a whole number of words */ data_size_in_words = ROUNDUP_BYTES_TO_WDS(size_in_bytes); total_size_in_words = sizeofW(StgArrWords) + data_size_in_words; /* allocate and fill it in */ arr = (StgArrWords *)allocate(total_size_in_words); SET_ARR_HDR(arr, &stg_ARR_WORDS_info, CCCS, size_in_bytes); /* obtain a stable ptr */ *stable = getStablePtr((StgPtr)arr); /* and return a ptr to the goods inside the array */ return(&(arr->payload)); }
void hs_spt_insert(StgWord64 key[2],void *spe_closure) { // hs_spt_insert is called from constructor functions, so // the SPT needs to be initialized here. if (spt == NULL) { spt = allocHashTable_( (HashFunction *)hashFingerprint , (CompareFunction *)compareFingerprint ); #ifdef THREADED_RTS initMutex(&spt_lock); #endif } StgStablePtr * entry = stgMallocBytes( sizeof(StgStablePtr) , "hs_spt_insert: entry" ); *entry = getStablePtr(spe_closure); ACQUIRE_LOCK(&spt_lock); insertHashTable(spt, (StgWord)key, entry); RELEASE_LOCK(&spt_lock); }
static void stginit_export_HsSdlTest_zdfmyzumainzua1OV() {getStablePtr((StgPtr) &HsSdlTest_zdfmyzumainzua1OV_closure);}
static void stginit_export_HaskellConvert_zdfconvertzuhszuawO() {getStablePtr((StgPtr) &HaskellConvert_zdfconvertzuhszuawO_closure);}