static duk_hstring *duk__do_intern(duk_heap *heap, duk_uint8_t *str, duk_uint32_t blen, duk_uint32_t strhash) { duk_hstring *res; if (duk__recheck_strtab_size(heap, heap->st_used + 1)) { return NULL; } res = duk__alloc_init_hstring(heap, str, blen, strhash); if (!res) { return NULL; } duk__insert_hstring(heap, heap->st, heap->st_size, &heap->st_used, res); /* guaranteed to succeed */ /* Note: hstring is in heap but has refcount zero and is not strongly reachable. * Caller should increase refcount and make the hstring reachable before any * operations which require allocation (and possible gc). */ return res; }
static duk_hstring *duk__do_intern(duk_heap *heap, duk_uint8_t *str, duk_uint32_t blen, duk_uint32_t strhash) { duk_hstring *res; if (duk__recheck_strtab_size(heap, heap->st_used + 1)) { return NULL; } /* For manual testing only. */ #if 0 { duk_size_t i; printf("INTERN: \""); for (i = 0; i < blen; i++) { duk_uint8_t x = str[i]; if (x >= 0x20 && x <= 0x7e && x != '"' && x != '\\') { printf("%c", (int) x); /* char: use int cast */ } else { printf("\\x%02lx", (long) x); } } printf("\"\n"); } #endif res = duk__alloc_init_hstring(heap, str, blen, strhash); if (!res) { return NULL; } duk__insert_hstring(heap, heap->st, heap->st_size, &heap->st_used, res); /* guaranteed to succeed */ /* Note: hstring is in heap but has refcount zero and is not strongly reachable. * Caller should increase refcount and make the hstring reachable before any * operations which require allocation (and possible gc). */ return res; }