3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * "I sit beside the fire and think of all that I have seen." --Bilbo
16 =head1 Hash Manipulation Functions
18 A HV structure represents a Perl hash. It consists mainly of an array
19 of pointers, each of which points to a linked list of HE structures. The
20 array is indexed by the hash function of the key, so each linked list
21 represents all the hash entries with the same hash value. Each HE contains
22 a pointer to the actual value, plus a pointer to a HEK structure which
23 holds the key and hash value.
31 #define PERL_HASH_INTERNAL_ACCESS
34 #define HV_MAX_LENGTH_BEFORE_SPLIT 14
36 static const char S_strtab_error[]
37 = "Cannot modify shared string table in hv_%s";
43 HE* he = (HE*) Perl_get_arena(aTHX_ PERL_ARENA_SIZE, HE_SVSLOT);
44 HE * const heend = &he[PERL_ARENA_SIZE / sizeof(HE) - 1];
46 PL_body_roots[HE_SVSLOT] = he;
48 HeNEXT(he) = (HE*)(he + 1);
56 #define new_HE() (HE*)safemalloc(sizeof(HE))
57 #define del_HE(p) safefree((char*)p)
66 void ** const root = &PL_body_roots[HE_SVSLOT];
76 #define new_HE() new_he()
79 HeNEXT(p) = (HE*)(PL_body_roots[HE_SVSLOT]); \
80 PL_body_roots[HE_SVSLOT] = p; \
88 S_save_hek_flags(const char *str, I32 len, U32 hash, int flags)
90 const int flags_masked = flags & HVhek_MASK;
94 Newx(k, HEK_BASESIZE + len + 2, char);
96 Copy(str, HEK_KEY(hek), len, char);
97 HEK_KEY(hek)[len] = 0;
100 HEK_FLAGS(hek) = (unsigned char)flags_masked | HVhek_UNSHARED;
102 if (flags & HVhek_FREEKEY)
107 /* free the pool of temporary HE/HEK pairs returned by hv_fetch_ent
111 Perl_free_tied_hv_pool(pTHX)
114 HE *he = PL_hv_fetch_ent_mh;
117 Safefree(HeKEY_hek(he));
121 PL_hv_fetch_ent_mh = NULL;
124 #if defined(USE_ITHREADS)
126 Perl_hek_dup(pTHX_ HEK *source, CLONE_PARAMS* param)
128 HEK *shared = (HEK*)ptr_table_fetch(PL_ptr_table, source);
130 PERL_UNUSED_ARG(param);
133 /* We already shared this hash key. */
134 (void)share_hek_hek(shared);
138 = share_hek_flags(HEK_KEY(source), HEK_LEN(source),
139 HEK_HASH(source), HEK_FLAGS(source));
140 ptr_table_store(PL_ptr_table, source, shared);
146 Perl_he_dup(pTHX_ const HE *e, bool shared, CLONE_PARAMS* param)
152 /* look for it in the table first */
153 ret = (HE*)ptr_table_fetch(PL_ptr_table, e);
157 /* create anew and remember what it is */
159 ptr_table_store(PL_ptr_table, e, ret);
161 HeNEXT(ret) = he_dup(HeNEXT(e),shared, param);
162 if (HeKLEN(e) == HEf_SVKEY) {
164 Newx(k, HEK_BASESIZE + sizeof(SV*), char);
165 HeKEY_hek(ret) = (HEK*)k;
166 HeKEY_sv(ret) = SvREFCNT_inc(sv_dup(HeKEY_sv(e), param));
169 /* This is hek_dup inlined, which seems to be important for speed
171 HEK * const source = HeKEY_hek(e);
172 HEK *shared = (HEK*)ptr_table_fetch(PL_ptr_table, source);
175 /* We already shared this hash key. */
176 (void)share_hek_hek(shared);
180 = share_hek_flags(HEK_KEY(source), HEK_LEN(source),
181 HEK_HASH(source), HEK_FLAGS(source));
182 ptr_table_store(PL_ptr_table, source, shared);
184 HeKEY_hek(ret) = shared;
187 HeKEY_hek(ret) = save_hek_flags(HeKEY(e), HeKLEN(e), HeHASH(e),
189 HeVAL(ret) = SvREFCNT_inc(sv_dup(HeVAL(e), param));
192 #endif /* USE_ITHREADS */
195 S_hv_notallowed(pTHX_ int flags, const char *key, I32 klen,
198 SV * const sv = sv_newmortal();
199 if (!(flags & HVhek_FREEKEY)) {
200 sv_setpvn(sv, key, klen);
203 /* Need to free saved eventually assign to mortal SV */
204 /* XXX is this line an error ???: SV *sv = sv_newmortal(); */
205 sv_usepvn(sv, (char *) key, klen);
207 if (flags & HVhek_UTF8) {
210 Perl_croak(aTHX_ msg, SVfARG(sv));
213 /* (klen == HEf_SVKEY) is special for MAGICAL hv entries, meaning key slot
219 Stores an SV in a hash. The hash key is specified as C<key> and C<klen> is
220 the length of the key. The C<hash> parameter is the precomputed hash
221 value; if it is zero then Perl will compute it. The return value will be
222 NULL if the operation failed or if the value did not need to be actually
223 stored within the hash (as in the case of tied hashes). Otherwise it can
224 be dereferenced to get the original C<SV*>. Note that the caller is
225 responsible for suitably incrementing the reference count of C<val> before
226 the call, and decrementing it if the function returned NULL. Effectively
227 a successful hv_store takes ownership of one reference to C<val>. This is
228 usually what you want; a newly created SV has a reference count of one, so
229 if all your code does is create SVs then store them in a hash, hv_store
230 will own the only reference to the new SV, and your code doesn't need to do
231 anything further to tidy up. hv_store is not implemented as a call to
232 hv_store_ent, and does not create a temporary SV for the key, so if your
233 key data is not already in SV form then use hv_store in preference to
236 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
237 information on how to use this function on tied hashes.
239 =for apidoc hv_store_ent
241 Stores C<val> in a hash. The hash key is specified as C<key>. The C<hash>
242 parameter is the precomputed hash value; if it is zero then Perl will
243 compute it. The return value is the new hash entry so created. It will be
244 NULL if the operation failed or if the value did not need to be actually
245 stored within the hash (as in the case of tied hashes). Otherwise the
246 contents of the return value can be accessed using the C<He?> macros
247 described here. Note that the caller is responsible for suitably
248 incrementing the reference count of C<val> before the call, and
249 decrementing it if the function returned NULL. Effectively a successful
250 hv_store_ent takes ownership of one reference to C<val>. This is
251 usually what you want; a newly created SV has a reference count of one, so
252 if all your code does is create SVs then store them in a hash, hv_store
253 will own the only reference to the new SV, and your code doesn't need to do
254 anything further to tidy up. Note that hv_store_ent only reads the C<key>;
255 unlike C<val> it does not take ownership of it, so maintaining the correct
256 reference count on C<key> is entirely the caller's responsibility. hv_store
257 is not implemented as a call to hv_store_ent, and does not create a temporary
258 SV for the key, so if your key data is not already in SV form then use
259 hv_store in preference to hv_store_ent.
261 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
262 information on how to use this function on tied hashes.
264 =for apidoc hv_exists
266 Returns a boolean indicating whether the specified hash key exists. The
267 C<klen> is the length of the key.
271 Returns the SV which corresponds to the specified key in the hash. The
272 C<klen> is the length of the key. If C<lval> is set then the fetch will be
273 part of a store. Check that the return value is non-null before
274 dereferencing it to an C<SV*>.
276 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
277 information on how to use this function on tied hashes.
279 =for apidoc hv_exists_ent
281 Returns a boolean indicating whether the specified hash key exists. C<hash>
282 can be a valid precomputed hash value, or 0 to ask for it to be
288 /* returns an HE * structure with the all fields set */
289 /* note that hent_val will be a mortal sv for MAGICAL hashes */
291 =for apidoc hv_fetch_ent
293 Returns the hash entry which corresponds to the specified key in the hash.
294 C<hash> must be a valid precomputed hash number for the given C<key>, or 0
295 if you want the function to compute it. IF C<lval> is set then the fetch
296 will be part of a store. Make sure the return value is non-null before
297 accessing it. The return value when C<tb> is a tied hash is a pointer to a
298 static location, so be sure to make a copy of the structure if you need to
301 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
302 information on how to use this function on tied hashes.
307 /* Common code for hv_delete()/hv_exists()/hv_fetch()/hv_store() */
309 Perl_hv_common_key_len(pTHX_ HV *hv, const char *key, I32 klen_i32,
310 const int action, SV *val, const U32 hash)
322 return hv_common(hv, NULL, key, klen, flags, action, val, hash);
326 Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen,
327 int flags, int action, SV *val, register U32 hash)
336 const int return_svp = action & HV_FETCH_JUST_SV;
340 if (SvTYPE(hv) == SVTYPEMASK)
343 assert(SvTYPE(hv) == SVt_PVHV);
345 if (SvSMAGICAL(hv) && SvGMAGICAL(hv) && !(action & HV_DISABLE_UVAR_XKEY)) {
347 if ((mg = mg_find((SV*)hv, PERL_MAGIC_uvar))) {
348 struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
349 if (uf->uf_set == NULL) {
350 SV* obj = mg->mg_obj;
353 keysv = sv_2mortal(newSVpvn_utf8(key, klen,
354 flags & HVhek_UTF8));
357 mg->mg_obj = keysv; /* pass key */
358 uf->uf_index = action; /* pass action */
359 magic_getuvar((SV*)hv, mg);
360 keysv = mg->mg_obj; /* may have changed */
363 /* If the key may have changed, then we need to invalidate
364 any passed-in computed hash value. */
370 if (flags & HVhek_FREEKEY)
372 key = SvPV_const(keysv, klen);
374 is_utf8 = (SvUTF8(keysv) != 0);
376 is_utf8 = ((flags & HVhek_UTF8) ? TRUE : FALSE);
379 if (action & HV_DELETE) {
380 return (void *) hv_delete_common(hv, keysv, key, klen,
381 flags | (is_utf8 ? HVhek_UTF8 : 0),
385 xhv = (XPVHV*)SvANY(hv);
387 if (SvRMAGICAL(hv) && !(action & (HV_FETCH_ISSTORE|HV_FETCH_ISEXISTS))) {
388 if ( mg_find((SV*)hv, PERL_MAGIC_tied) || SvGMAGICAL((SV*)hv))
390 /* FIXME should be able to skimp on the HE/HEK here when
391 HV_FETCH_JUST_SV is true. */
393 keysv = newSVpvn_utf8(key, klen, is_utf8);
395 keysv = newSVsv(keysv);
398 mg_copy((SV*)hv, sv, (char *)keysv, HEf_SVKEY);
400 /* grab a fake HE/HEK pair from the pool or make a new one */
401 entry = PL_hv_fetch_ent_mh;
403 PL_hv_fetch_ent_mh = HeNEXT(entry);
407 Newx(k, HEK_BASESIZE + sizeof(SV*), char);
408 HeKEY_hek(entry) = (HEK*)k;
410 HeNEXT(entry) = NULL;
411 HeSVKEY_set(entry, keysv);
413 sv_upgrade(sv, SVt_PVLV);
415 /* so we can free entry when freeing sv */
416 LvTARG(sv) = (SV*)entry;
418 /* XXX remove at some point? */
419 if (flags & HVhek_FREEKEY)
423 return entry ? (void *) &HeVAL(entry) : NULL;
425 return (void *) entry;
427 #ifdef ENV_IS_CASELESS
428 else if (mg_find((SV*)hv, PERL_MAGIC_env)) {
430 for (i = 0; i < klen; ++i)
431 if (isLOWER(key[i])) {
432 /* Would be nice if we had a routine to do the
433 copy and upercase in a single pass through. */
434 const char * const nkey = strupr(savepvn(key,klen));
435 /* Note that this fetch is for nkey (the uppercased
436 key) whereas the store is for key (the original) */
437 void *result = hv_common(hv, NULL, nkey, klen,
438 HVhek_FREEKEY, /* free nkey */
439 0 /* non-LVAL fetch */
440 | HV_DISABLE_UVAR_XKEY
443 0 /* compute hash */);
444 if (!result && (action & HV_FETCH_LVALUE)) {
445 /* This call will free key if necessary.
446 Do it this way to encourage compiler to tail
448 result = hv_common(hv, keysv, key, klen, flags,
450 | HV_DISABLE_UVAR_XKEY
454 if (flags & HVhek_FREEKEY)
462 else if (SvRMAGICAL(hv) && (action & HV_FETCH_ISEXISTS)) {
463 if (mg_find((SV*)hv, PERL_MAGIC_tied) || SvGMAGICAL((SV*)hv)) {
464 /* I don't understand why hv_exists_ent has svret and sv,
465 whereas hv_exists only had one. */
466 SV * const svret = sv_newmortal();
469 if (keysv || is_utf8) {
471 keysv = newSVpvn_utf8(key, klen, TRUE);
473 keysv = newSVsv(keysv);
475 mg_copy((SV*)hv, sv, (char *)sv_2mortal(keysv), HEf_SVKEY);
477 mg_copy((SV*)hv, sv, key, klen);
479 if (flags & HVhek_FREEKEY)
481 magic_existspack(svret, mg_find(sv, PERL_MAGIC_tiedelem));
482 /* This cast somewhat evil, but I'm merely using NULL/
483 not NULL to return the boolean exists.
484 And I know hv is not NULL. */
485 return SvTRUE(svret) ? (void *)hv : NULL;
487 #ifdef ENV_IS_CASELESS
488 else if (mg_find((SV*)hv, PERL_MAGIC_env)) {
489 /* XXX This code isn't UTF8 clean. */
490 char * const keysave = (char * const)key;
491 /* Will need to free this, so set FREEKEY flag. */
492 key = savepvn(key,klen);
493 key = (const char*)strupr((char*)key);
498 if (flags & HVhek_FREEKEY) {
501 flags |= HVhek_FREEKEY;
505 else if (action & HV_FETCH_ISSTORE) {
508 hv_magic_check (hv, &needs_copy, &needs_store);
510 const bool save_taint = PL_tainted;
511 if (keysv || is_utf8) {
513 keysv = newSVpvn_utf8(key, klen, TRUE);
516 PL_tainted = SvTAINTED(keysv);
517 keysv = sv_2mortal(newSVsv(keysv));
518 mg_copy((SV*)hv, val, (char*)keysv, HEf_SVKEY);
520 mg_copy((SV*)hv, val, key, klen);
523 TAINT_IF(save_taint);
525 if (flags & HVhek_FREEKEY)
529 #ifdef ENV_IS_CASELESS
530 else if (mg_find((SV*)hv, PERL_MAGIC_env)) {
531 /* XXX This code isn't UTF8 clean. */
532 const char *keysave = key;
533 /* Will need to free this, so set FREEKEY flag. */
534 key = savepvn(key,klen);
535 key = (const char*)strupr((char*)key);
540 if (flags & HVhek_FREEKEY) {
543 flags |= HVhek_FREEKEY;
551 if ((action & (HV_FETCH_LVALUE | HV_FETCH_ISSTORE))
552 #ifdef DYNAMIC_ENV_FETCH /* if it's an %ENV lookup, we may get it on the fly */
553 || (SvRMAGICAL((SV*)hv) && mg_find((SV*)hv, PERL_MAGIC_env))
558 PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max+1 /* HvMAX(hv)+1 */),
560 HvARRAY(hv) = (HE**)array;
562 #ifdef DYNAMIC_ENV_FETCH
563 else if (action & HV_FETCH_ISEXISTS) {
564 /* for an %ENV exists, if we do an insert it's by a recursive
565 store call, so avoid creating HvARRAY(hv) right now. */
569 /* XXX remove at some point? */
570 if (flags & HVhek_FREEKEY)
578 char * const keysave = (char *)key;
579 key = (char*)bytes_from_utf8((U8*)key, &klen, &is_utf8);
583 flags &= ~HVhek_UTF8;
584 if (key != keysave) {
585 if (flags & HVhek_FREEKEY)
587 flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
592 PERL_HASH_INTERNAL(hash, key, klen);
593 /* We don't have a pointer to the hv, so we have to replicate the
594 flag into every HEK, so that hv_iterkeysv can see it. */
595 /* And yes, you do need this even though you are not "storing" because
596 you can flip the flags below if doing an lval lookup. (And that
597 was put in to give the semantics Andreas was expecting.) */
598 flags |= HVhek_REHASH;
600 if (keysv && (SvIsCOW_shared_hash(keysv))) {
601 hash = SvSHARED_HASH(keysv);
603 PERL_HASH(hash, key, klen);
607 masked_flags = (flags & HVhek_MASK);
609 #ifdef DYNAMIC_ENV_FETCH
610 if (!HvARRAY(hv)) entry = NULL;
614 entry = (HvARRAY(hv))[hash & (I32) HvMAX(hv)];
616 for (; entry; entry = HeNEXT(entry)) {
617 if (HeHASH(entry) != hash) /* strings can't be equal */
619 if (HeKLEN(entry) != (I32)klen)
621 if (HeKEY(entry) != key && memNE(HeKEY(entry),key,klen)) /* is this it? */
623 if ((HeKFLAGS(entry) ^ masked_flags) & HVhek_UTF8)
626 if (action & (HV_FETCH_LVALUE|HV_FETCH_ISSTORE)) {
627 if (HeKFLAGS(entry) != masked_flags) {
628 /* We match if HVhek_UTF8 bit in our flags and hash key's
629 match. But if entry was set previously with HVhek_WASUTF8
630 and key now doesn't (or vice versa) then we should change
631 the key's flag, as this is assignment. */
632 if (HvSHAREKEYS(hv)) {
633 /* Need to swap the key we have for a key with the flags we
634 need. As keys are shared we can't just write to the
635 flag, so we share the new one, unshare the old one. */
636 HEK * const new_hek = share_hek_flags(key, klen, hash,
638 unshare_hek (HeKEY_hek(entry));
639 HeKEY_hek(entry) = new_hek;
641 else if (hv == PL_strtab) {
642 /* PL_strtab is usually the only hash without HvSHAREKEYS,
643 so putting this test here is cheap */
644 if (flags & HVhek_FREEKEY)
646 Perl_croak(aTHX_ S_strtab_error,
647 action & HV_FETCH_LVALUE ? "fetch" : "store");
650 HeKFLAGS(entry) = masked_flags;
651 if (masked_flags & HVhek_ENABLEHVKFLAGS)
654 if (HeVAL(entry) == &PL_sv_placeholder) {
655 /* yes, can store into placeholder slot */
656 if (action & HV_FETCH_LVALUE) {
658 /* This preserves behaviour with the old hv_fetch
659 implementation which at this point would bail out
660 with a break; (at "if we find a placeholder, we
661 pretend we haven't found anything")
663 That break mean that if a placeholder were found, it
664 caused a call into hv_store, which in turn would
665 check magic, and if there is no magic end up pretty
666 much back at this point (in hv_store's code). */
669 /* LVAL fetch which actaully needs a store. */
671 HvPLACEHOLDERS(hv)--;
674 if (val != &PL_sv_placeholder)
675 HvPLACEHOLDERS(hv)--;
678 } else if (action & HV_FETCH_ISSTORE) {
679 SvREFCNT_dec(HeVAL(entry));
682 } else if (HeVAL(entry) == &PL_sv_placeholder) {
683 /* if we find a placeholder, we pretend we haven't found
687 if (flags & HVhek_FREEKEY)
690 return entry ? (void *) &HeVAL(entry) : NULL;
694 #ifdef DYNAMIC_ENV_FETCH /* %ENV lookup? If so, try to fetch the value now */
695 if (!(action & HV_FETCH_ISSTORE)
696 && SvRMAGICAL((SV*)hv) && mg_find((SV*)hv, PERL_MAGIC_env)) {
698 const char * const env = PerlEnv_ENVgetenv_len(key,&len);
700 sv = newSVpvn(env,len);
702 return hv_common(hv, keysv, key, klen, flags,
703 HV_FETCH_ISSTORE|HV_DISABLE_UVAR_XKEY|return_svp,
709 if (!entry && SvREADONLY(hv) && !(action & HV_FETCH_ISEXISTS)) {
710 hv_notallowed(flags, key, klen,
711 "Attempt to access disallowed key '%"SVf"' in"
712 " a restricted hash");
714 if (!(action & (HV_FETCH_LVALUE|HV_FETCH_ISSTORE))) {
715 /* Not doing some form of store, so return failure. */
716 if (flags & HVhek_FREEKEY)
720 if (action & HV_FETCH_LVALUE) {
723 /* At this point the old hv_fetch code would call to hv_store,
724 which in turn might do some tied magic. So we need to make that
725 magic check happen. */
726 /* gonna assign to this, so it better be there */
727 /* If a fetch-as-store fails on the fetch, then the action is to
728 recurse once into "hv_store". If we didn't do this, then that
729 recursive call would call the key conversion routine again.
730 However, as we replace the original key with the converted
731 key, this would result in a double conversion, which would show
732 up as a bug if the conversion routine is not idempotent. */
733 return hv_common(hv, keysv, key, klen, flags,
734 HV_FETCH_ISSTORE|HV_DISABLE_UVAR_XKEY|return_svp,
736 /* XXX Surely that could leak if the fetch-was-store fails?
737 Just like the hv_fetch. */
741 /* Welcome to hv_store... */
744 /* Not sure if we can get here. I think the only case of oentry being
745 NULL is for %ENV with dynamic env fetch. But that should disappear
746 with magic in the previous code. */
749 PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max+1 /* HvMAX(hv)+1 */),
751 HvARRAY(hv) = (HE**)array;
754 oentry = &(HvARRAY(hv))[hash & (I32) xhv->xhv_max];
757 /* share_hek_flags will do the free for us. This might be considered
760 HeKEY_hek(entry) = share_hek_flags(key, klen, hash, flags);
761 else if (hv == PL_strtab) {
762 /* PL_strtab is usually the only hash without HvSHAREKEYS, so putting
763 this test here is cheap */
764 if (flags & HVhek_FREEKEY)
766 Perl_croak(aTHX_ S_strtab_error,
767 action & HV_FETCH_LVALUE ? "fetch" : "store");
769 else /* gotta do the real thing */
770 HeKEY_hek(entry) = save_hek_flags(key, klen, hash, flags);
772 HeNEXT(entry) = *oentry;
775 if (val == &PL_sv_placeholder)
776 HvPLACEHOLDERS(hv)++;
777 if (masked_flags & HVhek_ENABLEHVKFLAGS)
781 const HE *counter = HeNEXT(entry);
783 xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */
784 if (!counter) { /* initial entry? */
785 xhv->xhv_fill++; /* HvFILL(hv)++ */
786 } else if (xhv->xhv_keys > (IV)xhv->xhv_max) {
788 } else if(!HvREHASH(hv)) {
791 while ((counter = HeNEXT(counter)))
794 if (n_links > HV_MAX_LENGTH_BEFORE_SPLIT) {
795 /* Use only the old HvKEYS(hv) > HvMAX(hv) condition to limit
796 bucket splits on a rehashed hash, as we're not going to
797 split it again, and if someone is lucky (evil) enough to
798 get all the keys in one list they could exhaust our memory
799 as we repeatedly double the number of buckets on every
800 entry. Linear search feels a less worse thing to do. */
807 return entry ? (void *) &HeVAL(entry) : NULL;
809 return (void *) entry;
813 S_hv_magic_check(HV *hv, bool *needs_copy, bool *needs_store)
815 const MAGIC *mg = SvMAGIC(hv);
819 if (isUPPER(mg->mg_type)) {
821 if (mg->mg_type == PERL_MAGIC_tied) {
822 *needs_store = FALSE;
823 return; /* We've set all there is to set. */
826 mg = mg->mg_moremagic;
831 =for apidoc hv_scalar
833 Evaluates the hash in scalar context and returns the result. Handles magic when the hash is tied.
839 Perl_hv_scalar(pTHX_ HV *hv)
843 if (SvRMAGICAL(hv)) {
844 MAGIC * const mg = mg_find((SV*)hv, PERL_MAGIC_tied);
846 return magic_scalarpack(hv, mg);
851 Perl_sv_setpvf(aTHX_ sv, "%ld/%ld",
852 (long)HvFILL(hv), (long)HvMAX(hv) + 1);
860 =for apidoc hv_delete
862 Deletes a key/value pair in the hash. The value SV is removed from the
863 hash and returned to the caller. The C<klen> is the length of the key.
864 The C<flags> value will normally be zero; if set to G_DISCARD then NULL
867 =for apidoc hv_delete_ent
869 Deletes a key/value pair in the hash. The value SV is removed from the
870 hash and returned to the caller. The C<flags> value will normally be zero;
871 if set to G_DISCARD then NULL will be returned. C<hash> can be a valid
872 precomputed hash value, or 0 to ask for it to be computed.
878 S_hv_delete_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen,
879 int k_flags, I32 d_flags, U32 hash)
884 register HE **oentry;
885 HE *const *first_entry;
886 bool is_utf8 = (k_flags & HVhek_UTF8) ? TRUE : FALSE;
889 if (SvRMAGICAL(hv)) {
892 hv_magic_check (hv, &needs_copy, &needs_store);
896 entry = (HE *) hv_common(hv, keysv, key, klen,
897 k_flags & ~HVhek_FREEKEY,
898 HV_FETCH_LVALUE|HV_DISABLE_UVAR_XKEY,
900 sv = entry ? HeVAL(entry) : NULL;
906 if (mg_find(sv, PERL_MAGIC_tiedelem)) {
907 /* No longer an element */
908 sv_unmagic(sv, PERL_MAGIC_tiedelem);
911 return NULL; /* element cannot be deleted */
913 #ifdef ENV_IS_CASELESS
914 else if (mg_find((SV*)hv, PERL_MAGIC_env)) {
915 /* XXX This code isn't UTF8 clean. */
916 keysv = sv_2mortal(newSVpvn(key,klen));
917 if (k_flags & HVhek_FREEKEY) {
920 key = strupr(SvPVX(keysv));
929 xhv = (XPVHV*)SvANY(hv);
934 const char * const keysave = key;
935 key = (char*)bytes_from_utf8((U8*)key, &klen, &is_utf8);
938 k_flags |= HVhek_UTF8;
940 k_flags &= ~HVhek_UTF8;
941 if (key != keysave) {
942 if (k_flags & HVhek_FREEKEY) {
943 /* This shouldn't happen if our caller does what we expect,
944 but strictly the API allows it. */
947 k_flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
949 HvHASKFLAGS_on((SV*)hv);
953 PERL_HASH_INTERNAL(hash, key, klen);
955 if (keysv && (SvIsCOW_shared_hash(keysv))) {
956 hash = SvSHARED_HASH(keysv);
958 PERL_HASH(hash, key, klen);
962 masked_flags = (k_flags & HVhek_MASK);
964 first_entry = oentry = &(HvARRAY(hv))[hash & (I32) HvMAX(hv)];
966 for (; entry; oentry = &HeNEXT(entry), entry = *oentry) {
968 if (HeHASH(entry) != hash) /* strings can't be equal */
970 if (HeKLEN(entry) != (I32)klen)
972 if (HeKEY(entry) != key && memNE(HeKEY(entry),key,klen)) /* is this it? */
974 if ((HeKFLAGS(entry) ^ masked_flags) & HVhek_UTF8)
977 if (hv == PL_strtab) {
978 if (k_flags & HVhek_FREEKEY)
980 Perl_croak(aTHX_ S_strtab_error, "delete");
983 /* if placeholder is here, it's already been deleted.... */
984 if (HeVAL(entry) == &PL_sv_placeholder) {
985 if (k_flags & HVhek_FREEKEY)
989 if (SvREADONLY(hv) && HeVAL(entry) && SvREADONLY(HeVAL(entry))) {
990 hv_notallowed(k_flags, key, klen,
991 "Attempt to delete readonly key '%"SVf"' from"
992 " a restricted hash");
994 if (k_flags & HVhek_FREEKEY)
997 if (d_flags & G_DISCARD)
1000 sv = sv_2mortal(HeVAL(entry));
1001 HeVAL(entry) = &PL_sv_placeholder;
1005 * If a restricted hash, rather than really deleting the entry, put
1006 * a placeholder there. This marks the key as being "approved", so
1007 * we can still access via not-really-existing key without raising
1010 if (SvREADONLY(hv)) {
1011 SvREFCNT_dec(HeVAL(entry));
1012 HeVAL(entry) = &PL_sv_placeholder;
1013 /* We'll be saving this slot, so the number of allocated keys
1014 * doesn't go down, but the number placeholders goes up */
1015 HvPLACEHOLDERS(hv)++;
1017 *oentry = HeNEXT(entry);
1019 xhv->xhv_fill--; /* HvFILL(hv)-- */
1021 if (SvOOK(hv) && entry == HvAUX(hv)->xhv_eiter /* HvEITER(hv) */)
1024 hv_free_ent(hv, entry);
1025 xhv->xhv_keys--; /* HvTOTALKEYS(hv)-- */
1026 if (xhv->xhv_keys == 0)
1027 HvHASKFLAGS_off(hv);
1031 if (SvREADONLY(hv)) {
1032 hv_notallowed(k_flags, key, klen,
1033 "Attempt to delete disallowed key '%"SVf"' from"
1034 " a restricted hash");
1037 if (k_flags & HVhek_FREEKEY)
1043 S_hsplit(pTHX_ HV *hv)
1046 register XPVHV* const xhv = (XPVHV*)SvANY(hv);
1047 const I32 oldsize = (I32) xhv->xhv_max+1; /* HvMAX(hv)+1 (sick) */
1048 register I32 newsize = oldsize * 2;
1050 char *a = (char*) HvARRAY(hv);
1052 register HE **oentry;
1053 int longest_chain = 0;
1056 /*PerlIO_printf(PerlIO_stderr(), "hsplit called for %p which had %d\n",
1057 (void*)hv, (int) oldsize);*/
1059 if (HvPLACEHOLDERS_get(hv) && !SvREADONLY(hv)) {
1060 /* Can make this clear any placeholders first for non-restricted hashes,
1061 even though Storable rebuilds restricted hashes by putting in all the
1062 placeholders (first) before turning on the readonly flag, because
1063 Storable always pre-splits the hash. */
1064 hv_clear_placeholders(hv);
1068 #if defined(STRANGE_MALLOC) || defined(MYMALLOC)
1069 Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1070 + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1076 Copy(&a[oldsize * sizeof(HE*)], &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1079 Newx(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1080 + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1085 Copy(HvARRAY(hv), a, oldsize * sizeof(HE*), char);
1087 Copy(HvAUX(hv), &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1089 if (oldsize >= 64) {
1090 offer_nice_chunk(HvARRAY(hv),
1091 PERL_HV_ARRAY_ALLOC_BYTES(oldsize)
1092 + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0));
1095 Safefree(HvARRAY(hv));
1099 Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char); /* zero 2nd half*/
1100 xhv->xhv_max = --newsize; /* HvMAX(hv) = --newsize */
1101 HvARRAY(hv) = (HE**) a;
1104 for (i=0; i<oldsize; i++,aep++) {
1105 int left_length = 0;
1106 int right_length = 0;
1110 if (!*aep) /* non-existent */
1113 for (oentry = aep, entry = *aep; entry; entry = *oentry) {
1114 if ((HeHASH(entry) & newsize) != (U32)i) {
1115 *oentry = HeNEXT(entry);
1116 HeNEXT(entry) = *bep;
1118 xhv->xhv_fill++; /* HvFILL(hv)++ */
1124 oentry = &HeNEXT(entry);
1128 if (!*aep) /* everything moved */
1129 xhv->xhv_fill--; /* HvFILL(hv)-- */
1130 /* I think we don't actually need to keep track of the longest length,
1131 merely flag if anything is too long. But for the moment while
1132 developing this code I'll track it. */
1133 if (left_length > longest_chain)
1134 longest_chain = left_length;
1135 if (right_length > longest_chain)
1136 longest_chain = right_length;
1140 /* Pick your policy for "hashing isn't working" here: */
1141 if (longest_chain <= HV_MAX_LENGTH_BEFORE_SPLIT /* split worked? */
1146 if (hv == PL_strtab) {
1147 /* Urg. Someone is doing something nasty to the string table.
1152 /* Awooga. Awooga. Pathological data. */
1153 /*PerlIO_printf(PerlIO_stderr(), "%p %d of %d with %d/%d buckets\n", (void*)hv,
1154 longest_chain, HvTOTALKEYS(hv), HvFILL(hv), 1+HvMAX(hv));*/
1157 Newxz(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1158 + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1160 Copy(HvAUX(hv), &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1163 was_shared = HvSHAREKEYS(hv);
1166 HvSHAREKEYS_off(hv);
1171 for (i=0; i<newsize; i++,aep++) {
1172 register HE *entry = *aep;
1174 /* We're going to trash this HE's next pointer when we chain it
1175 into the new hash below, so store where we go next. */
1176 HE * const next = HeNEXT(entry);
1181 PERL_HASH_INTERNAL(hash, HeKEY(entry), HeKLEN(entry));
1186 = save_hek_flags(HeKEY(entry), HeKLEN(entry),
1187 hash, HeKFLAGS(entry));
1188 unshare_hek (HeKEY_hek(entry));
1189 HeKEY_hek(entry) = new_hek;
1191 /* Not shared, so simply write the new hash in. */
1192 HeHASH(entry) = hash;
1194 /*PerlIO_printf(PerlIO_stderr(), "%d ", HeKFLAGS(entry));*/
1195 HEK_REHASH_on(HeKEY_hek(entry));
1196 /*PerlIO_printf(PerlIO_stderr(), "%d\n", HeKFLAGS(entry));*/
1198 /* Copy oentry to the correct new chain. */
1199 bep = ((HE**)a) + (hash & (I32) xhv->xhv_max);
1201 xhv->xhv_fill++; /* HvFILL(hv)++ */
1202 HeNEXT(entry) = *bep;
1208 Safefree (HvARRAY(hv));
1209 HvARRAY(hv) = (HE **)a;
1213 Perl_hv_ksplit(pTHX_ HV *hv, IV newmax)
1216 register XPVHV* xhv = (XPVHV*)SvANY(hv);
1217 const I32 oldsize = (I32) xhv->xhv_max+1; /* HvMAX(hv)+1 (sick) */
1218 register I32 newsize;
1223 register HE **oentry;
1225 newsize = (I32) newmax; /* possible truncation here */
1226 if (newsize != newmax || newmax <= oldsize)
1228 while ((newsize & (1 + ~newsize)) != newsize) {
1229 newsize &= ~(newsize & (1 + ~newsize)); /* get proper power of 2 */
1231 if (newsize < newmax)
1233 if (newsize < newmax)
1234 return; /* overflow detection */
1236 a = (char *) HvARRAY(hv);
1239 #if defined(STRANGE_MALLOC) || defined(MYMALLOC)
1240 Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1241 + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1247 Copy(&a[oldsize * sizeof(HE*)], &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1250 Newx(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1251 + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1256 Copy(HvARRAY(hv), a, oldsize * sizeof(HE*), char);
1258 Copy(HvAUX(hv), &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1260 if (oldsize >= 64) {
1261 offer_nice_chunk(HvARRAY(hv),
1262 PERL_HV_ARRAY_ALLOC_BYTES(oldsize)
1263 + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0));
1266 Safefree(HvARRAY(hv));
1269 Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char); /* zero 2nd half*/
1272 Newxz(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
1274 xhv->xhv_max = --newsize; /* HvMAX(hv) = --newsize */
1275 HvARRAY(hv) = (HE **) a;
1276 if (!xhv->xhv_fill /* !HvFILL(hv) */) /* skip rest if no entries */
1280 for (i=0; i<oldsize; i++,aep++) {
1281 if (!*aep) /* non-existent */
1283 for (oentry = aep, entry = *aep; entry; entry = *oentry) {
1284 register I32 j = (HeHASH(entry) & newsize);
1288 *oentry = HeNEXT(entry);
1289 if (!(HeNEXT(entry) = aep[j]))
1290 xhv->xhv_fill++; /* HvFILL(hv)++ */
1295 oentry = &HeNEXT(entry);
1297 if (!*aep) /* everything moved */
1298 xhv->xhv_fill--; /* HvFILL(hv)-- */
1303 Perl_newHVhv(pTHX_ HV *ohv)
1305 HV * const hv = newHV();
1306 STRLEN hv_max, hv_fill;
1308 if (!ohv || (hv_fill = HvFILL(ohv)) == 0)
1310 hv_max = HvMAX(ohv);
1312 if (!SvMAGICAL((SV *)ohv)) {
1313 /* It's an ordinary hash, so copy it fast. AMS 20010804 */
1315 const bool shared = !!HvSHAREKEYS(ohv);
1316 HE **ents, ** const oents = (HE **)HvARRAY(ohv);
1318 Newx(a, PERL_HV_ARRAY_ALLOC_BYTES(hv_max+1), char);
1321 /* In each bucket... */
1322 for (i = 0; i <= hv_max; i++) {
1324 HE *oent = oents[i];
1331 /* Copy the linked list of entries. */
1332 for (; oent; oent = HeNEXT(oent)) {
1333 const U32 hash = HeHASH(oent);
1334 const char * const key = HeKEY(oent);
1335 const STRLEN len = HeKLEN(oent);
1336 const int flags = HeKFLAGS(oent);
1337 HE * const ent = new_HE();
1339 HeVAL(ent) = newSVsv(HeVAL(oent));
1341 = shared ? share_hek_flags(key, len, hash, flags)
1342 : save_hek_flags(key, len, hash, flags);
1353 HvFILL(hv) = hv_fill;
1354 HvTOTALKEYS(hv) = HvTOTALKEYS(ohv);
1358 /* Iterate over ohv, copying keys and values one at a time. */
1360 const I32 riter = HvRITER_get(ohv);
1361 HE * const eiter = HvEITER_get(ohv);
1363 /* Can we use fewer buckets? (hv_max is always 2^n-1) */
1364 while (hv_max && hv_max + 1 >= hv_fill * 2)
1365 hv_max = hv_max / 2;
1369 while ((entry = hv_iternext_flags(ohv, 0))) {
1370 (void)hv_store_flags(hv, HeKEY(entry), HeKLEN(entry),
1371 newSVsv(HeVAL(entry)), HeHASH(entry),
1374 HvRITER_set(ohv, riter);
1375 HvEITER_set(ohv, eiter);
1381 /* A rather specialised version of newHVhv for copying %^H, ensuring all the
1382 magic stays on it. */
1384 Perl_hv_copy_hints_hv(pTHX_ HV *const ohv)
1386 HV * const hv = newHV();
1389 if (ohv && (hv_fill = HvFILL(ohv))) {
1390 STRLEN hv_max = HvMAX(ohv);
1392 const I32 riter = HvRITER_get(ohv);
1393 HE * const eiter = HvEITER_get(ohv);
1395 while (hv_max && hv_max + 1 >= hv_fill * 2)
1396 hv_max = hv_max / 2;
1400 while ((entry = hv_iternext_flags(ohv, 0))) {
1401 SV *const sv = newSVsv(HeVAL(entry));
1402 sv_magic(sv, NULL, PERL_MAGIC_hintselem,
1403 (char *)newSVhek (HeKEY_hek(entry)), HEf_SVKEY);
1404 (void)hv_store_flags(hv, HeKEY(entry), HeKLEN(entry),
1405 sv, HeHASH(entry), HeKFLAGS(entry));
1407 HvRITER_set(ohv, riter);
1408 HvEITER_set(ohv, eiter);
1410 hv_magic(hv, NULL, PERL_MAGIC_hints);
1415 Perl_hv_free_ent(pTHX_ HV *hv, register HE *entry)
1423 if (val && isGV(val) && isGV_with_GP(val) && GvCVu(val) && HvNAME_get(hv))
1424 mro_method_changed_in(hv); /* deletion of method from stash */
1426 if (HeKLEN(entry) == HEf_SVKEY) {
1427 SvREFCNT_dec(HeKEY_sv(entry));
1428 Safefree(HeKEY_hek(entry));
1430 else if (HvSHAREKEYS(hv))
1431 unshare_hek(HeKEY_hek(entry));
1433 Safefree(HeKEY_hek(entry));
1438 Perl_hv_delayfree_ent(pTHX_ HV *hv, register HE *entry)
1443 /* SvREFCNT_inc to counter the SvREFCNT_dec in hv_free_ent */
1444 sv_2mortal(SvREFCNT_inc(HeVAL(entry))); /* free between statements */
1445 if (HeKLEN(entry) == HEf_SVKEY) {
1446 sv_2mortal(SvREFCNT_inc(HeKEY_sv(entry)));
1448 hv_free_ent(hv, entry);
1452 =for apidoc hv_clear
1454 Clears a hash, making it empty.
1460 Perl_hv_clear(pTHX_ HV *hv)
1463 register XPVHV* xhv;
1467 DEBUG_A(Perl_hv_assert(aTHX_ hv));
1469 xhv = (XPVHV*)SvANY(hv);
1471 if (SvREADONLY(hv) && HvARRAY(hv) != NULL) {
1472 /* restricted hash: convert all keys to placeholders */
1474 for (i = 0; i <= xhv->xhv_max; i++) {
1475 HE *entry = (HvARRAY(hv))[i];
1476 for (; entry; entry = HeNEXT(entry)) {
1477 /* not already placeholder */
1478 if (HeVAL(entry) != &PL_sv_placeholder) {
1479 if (HeVAL(entry) && SvREADONLY(HeVAL(entry))) {
1480 SV* const keysv = hv_iterkeysv(entry);
1482 "Attempt to delete readonly key '%"SVf"' from a restricted hash",
1485 SvREFCNT_dec(HeVAL(entry));
1486 HeVAL(entry) = &PL_sv_placeholder;
1487 HvPLACEHOLDERS(hv)++;
1495 HvPLACEHOLDERS_set(hv, 0);
1497 Zero(HvARRAY(hv), xhv->xhv_max+1 /* HvMAX(hv)+1 */, HE*);
1502 HvHASKFLAGS_off(hv);
1507 mro_isa_changed_in(hv);
1508 HvEITER_set(hv, NULL);
1513 =for apidoc hv_clear_placeholders
1515 Clears any placeholders from a hash. If a restricted hash has any of its keys
1516 marked as readonly and the key is subsequently deleted, the key is not actually
1517 deleted but is marked by assigning it a value of &PL_sv_placeholder. This tags
1518 it so it will be ignored by future operations such as iterating over the hash,
1519 but will still allow the hash to have a value reassigned to the key at some
1520 future point. This function clears any such placeholder keys from the hash.
1521 See Hash::Util::lock_keys() for an example of its use.
1527 Perl_hv_clear_placeholders(pTHX_ HV *hv)
1530 const U32 items = (U32)HvPLACEHOLDERS_get(hv);
1533 clear_placeholders(hv, items);
1537 S_clear_placeholders(pTHX_ HV *hv, U32 items)
1547 /* Loop down the linked list heads */
1549 HE **oentry = &(HvARRAY(hv))[i];
1552 while ((entry = *oentry)) {
1553 if (HeVAL(entry) == &PL_sv_placeholder) {
1554 *oentry = HeNEXT(entry);
1555 if (first && !*oentry)
1556 HvFILL(hv)--; /* This linked list is now empty. */
1557 if (entry == HvEITER_get(hv))
1560 hv_free_ent(hv, entry);
1564 HvTOTALKEYS(hv) -= (IV)HvPLACEHOLDERS_get(hv);
1565 if (HvKEYS(hv) == 0)
1566 HvHASKFLAGS_off(hv);
1567 HvPLACEHOLDERS_set(hv, 0);
1571 oentry = &HeNEXT(entry);
1576 /* You can't get here, hence assertion should always fail. */
1577 assert (items == 0);
1582 S_hfreeentries(pTHX_ HV *hv)
1584 /* This is the array that we're going to restore */
1585 HE **const orig_array = HvARRAY(hv);
1593 /* If the hash is actually a symbol table with a name, look after the
1595 struct xpvhv_aux *iter = HvAUX(hv);
1597 name = iter->xhv_name;
1598 iter->xhv_name = NULL;
1603 /* orig_array remains unchanged throughout the loop. If after freeing all
1604 the entries it turns out that one of the little blighters has triggered
1605 an action that has caused HvARRAY to be re-allocated, then we set
1606 array to the new HvARRAY, and try again. */
1609 /* This is the one we're going to try to empty. First time round
1610 it's the original array. (Hopefully there will only be 1 time
1612 HE ** const array = HvARRAY(hv);
1615 /* Because we have taken xhv_name out, the only allocated pointer
1616 in the aux structure that might exist is the backreference array.
1621 struct mro_meta *meta;
1622 struct xpvhv_aux *iter = HvAUX(hv);
1623 /* If there are weak references to this HV, we need to avoid
1624 freeing them up here. In particular we need to keep the AV
1625 visible as what we're deleting might well have weak references
1626 back to this HV, so the for loop below may well trigger
1627 the removal of backreferences from this array. */
1629 if (iter->xhv_backreferences) {
1630 /* So donate them to regular backref magic to keep them safe.
1631 The sv_magic will increase the reference count of the AV,
1632 so we need to drop it first. */
1633 SvREFCNT_dec(iter->xhv_backreferences);
1634 if (AvFILLp(iter->xhv_backreferences) == -1) {
1635 /* Turns out that the array is empty. Just free it. */
1636 SvREFCNT_dec(iter->xhv_backreferences);
1639 sv_magic((SV*)hv, (SV*)iter->xhv_backreferences,
1640 PERL_MAGIC_backref, NULL, 0);
1642 iter->xhv_backreferences = NULL;
1645 entry = iter->xhv_eiter; /* HvEITER(hv) */
1646 if (entry && HvLAZYDEL(hv)) { /* was deleted earlier? */
1648 hv_free_ent(hv, entry);
1650 iter->xhv_riter = -1; /* HvRITER(hv) = -1 */
1651 iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */
1653 if((meta = iter->xhv_mro_meta)) {
1654 if(meta->mro_linear_dfs) SvREFCNT_dec(meta->mro_linear_dfs);
1655 if(meta->mro_linear_c3) SvREFCNT_dec(meta->mro_linear_c3);
1656 if(meta->mro_nextmethod) SvREFCNT_dec(meta->mro_nextmethod);
1658 iter->xhv_mro_meta = NULL;
1661 /* There are now no allocated pointers in the aux structure. */
1663 SvFLAGS(hv) &= ~SVf_OOK; /* Goodbye, aux structure. */
1664 /* What aux structure? */
1667 /* make everyone else think the array is empty, so that the destructors
1668 * called for freed entries can't recusively mess with us */
1671 ((XPVHV*) SvANY(hv))->xhv_keys = 0;
1675 /* Loop down the linked list heads */
1676 HE *entry = array[i];
1679 register HE * const oentry = entry;
1680 entry = HeNEXT(entry);
1681 hv_free_ent(hv, oentry);
1685 /* As there are no allocated pointers in the aux structure, it's now
1686 safe to free the array we just cleaned up, if it's not the one we're
1687 going to put back. */
1688 if (array != orig_array) {
1693 /* Good. No-one added anything this time round. */
1698 /* Someone attempted to iterate or set the hash name while we had
1699 the array set to 0. We'll catch backferences on the next time
1700 round the while loop. */
1701 assert(HvARRAY(hv));
1703 if (HvAUX(hv)->xhv_name) {
1704 unshare_hek_or_pvn(HvAUX(hv)->xhv_name, 0, 0, 0);
1708 if (--attempts == 0) {
1709 Perl_die(aTHX_ "panic: hfreeentries failed to free hash - something is repeatedly re-creating entries");
1713 HvARRAY(hv) = orig_array;
1715 /* If the hash was actually a symbol table, put the name back. */
1717 /* We have restored the original array. If name is non-NULL, then
1718 the original array had an aux structure at the end. So this is
1720 SvFLAGS(hv) |= SVf_OOK;
1721 HvAUX(hv)->xhv_name = name;
1726 =for apidoc hv_undef
1734 Perl_hv_undef(pTHX_ HV *hv)
1737 register XPVHV* xhv;
1742 DEBUG_A(Perl_hv_assert(aTHX_ hv));
1743 xhv = (XPVHV*)SvANY(hv);
1745 if ((name = HvNAME_get(hv)) && !PL_dirty)
1746 mro_isa_changed_in(hv);
1751 (void)hv_delete(PL_stashcache, name, HvNAMELEN_get(hv), G_DISCARD);
1752 hv_name_set(hv, NULL, 0, 0);
1754 SvFLAGS(hv) &= ~SVf_OOK;
1755 Safefree(HvARRAY(hv));
1756 xhv->xhv_max = 7; /* HvMAX(hv) = 7 (it's a normal hash) */
1758 HvPLACEHOLDERS_set(hv, 0);
1764 static struct xpvhv_aux*
1765 S_hv_auxinit(HV *hv) {
1766 struct xpvhv_aux *iter;
1770 Newxz(array, PERL_HV_ARRAY_ALLOC_BYTES(HvMAX(hv) + 1)
1771 + sizeof(struct xpvhv_aux), char);
1773 array = (char *) HvARRAY(hv);
1774 Renew(array, PERL_HV_ARRAY_ALLOC_BYTES(HvMAX(hv) + 1)
1775 + sizeof(struct xpvhv_aux), char);
1777 HvARRAY(hv) = (HE**) array;
1778 /* SvOOK_on(hv) attacks the IV flags. */
1779 SvFLAGS(hv) |= SVf_OOK;
1782 iter->xhv_riter = -1; /* HvRITER(hv) = -1 */
1783 iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */
1785 iter->xhv_backreferences = 0;
1786 iter->xhv_mro_meta = NULL;
1791 =for apidoc hv_iterinit
1793 Prepares a starting point to traverse a hash table. Returns the number of
1794 keys in the hash (i.e. the same as C<HvKEYS(tb)>). The return value is
1795 currently only meaningful for hashes without tie magic.
1797 NOTE: Before version 5.004_65, C<hv_iterinit> used to return the number of
1798 hash buckets that happen to be in use. If you still need that esoteric
1799 value, you can get it through the macro C<HvFILL(tb)>.
1806 Perl_hv_iterinit(pTHX_ HV *hv)
1809 Perl_croak(aTHX_ "Bad hash");
1812 struct xpvhv_aux * const iter = HvAUX(hv);
1813 HE * const entry = iter->xhv_eiter; /* HvEITER(hv) */
1814 if (entry && HvLAZYDEL(hv)) { /* was deleted earlier? */
1816 hv_free_ent(hv, entry);
1818 iter->xhv_riter = -1; /* HvRITER(hv) = -1 */
1819 iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */
1824 /* used to be xhv->xhv_fill before 5.004_65 */
1825 return HvTOTALKEYS(hv);
1829 Perl_hv_riter_p(pTHX_ HV *hv) {
1830 struct xpvhv_aux *iter;
1833 Perl_croak(aTHX_ "Bad hash");
1835 iter = SvOOK(hv) ? HvAUX(hv) : hv_auxinit(hv);
1836 return &(iter->xhv_riter);
1840 Perl_hv_eiter_p(pTHX_ HV *hv) {
1841 struct xpvhv_aux *iter;
1844 Perl_croak(aTHX_ "Bad hash");
1846 iter = SvOOK(hv) ? HvAUX(hv) : hv_auxinit(hv);
1847 return &(iter->xhv_eiter);
1851 Perl_hv_riter_set(pTHX_ HV *hv, I32 riter) {
1852 struct xpvhv_aux *iter;
1855 Perl_croak(aTHX_ "Bad hash");
1863 iter = hv_auxinit(hv);
1865 iter->xhv_riter = riter;
1869 Perl_hv_eiter_set(pTHX_ HV *hv, HE *eiter) {
1870 struct xpvhv_aux *iter;
1873 Perl_croak(aTHX_ "Bad hash");
1878 /* 0 is the default so don't go malloc()ing a new structure just to
1883 iter = hv_auxinit(hv);
1885 iter->xhv_eiter = eiter;
1889 Perl_hv_name_set(pTHX_ HV *hv, const char *name, U32 len, U32 flags)
1892 struct xpvhv_aux *iter;
1895 PERL_UNUSED_ARG(flags);
1898 Perl_croak(aTHX_ "panic: hv name too long (%"UVuf")", (UV) len);
1902 if (iter->xhv_name) {
1903 unshare_hek_or_pvn(iter->xhv_name, 0, 0, 0);
1909 iter = hv_auxinit(hv);
1911 PERL_HASH(hash, name, len);
1912 iter->xhv_name = name ? share_hek(name, len, hash) : NULL;
1916 Perl_hv_backreferences_p(pTHX_ HV *hv) {
1917 struct xpvhv_aux * const iter = SvOOK(hv) ? HvAUX(hv) : hv_auxinit(hv);
1918 PERL_UNUSED_CONTEXT;
1919 return &(iter->xhv_backreferences);
1923 Perl_hv_kill_backrefs(pTHX_ HV *hv) {
1929 av = HvAUX(hv)->xhv_backreferences;
1932 HvAUX(hv)->xhv_backreferences = 0;
1933 Perl_sv_kill_backrefs(aTHX_ (SV*) hv, av);
1938 hv_iternext is implemented as a macro in hv.h
1940 =for apidoc hv_iternext
1942 Returns entries from a hash iterator. See C<hv_iterinit>.
1944 You may call C<hv_delete> or C<hv_delete_ent> on the hash entry that the
1945 iterator currently points to, without losing your place or invalidating your
1946 iterator. Note that in this case the current entry is deleted from the hash
1947 with your iterator holding the last reference to it. Your iterator is flagged
1948 to free the entry on the next call to C<hv_iternext>, so you must not discard
1949 your iterator immediately else the entry will leak - call C<hv_iternext> to
1950 trigger the resource deallocation.
1952 =for apidoc hv_iternext_flags
1954 Returns entries from a hash iterator. See C<hv_iterinit> and C<hv_iternext>.
1955 The C<flags> value will normally be zero; if HV_ITERNEXT_WANTPLACEHOLDERS is
1956 set the placeholders keys (for restricted hashes) will be returned in addition
1957 to normal keys. By default placeholders are automatically skipped over.
1958 Currently a placeholder is implemented with a value that is
1959 C<&Perl_sv_placeholder>. Note that the implementation of placeholders and
1960 restricted hashes may change, and the implementation currently is
1961 insufficiently abstracted for any change to be tidy.
1967 Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags)
1970 register XPVHV* xhv;
1974 struct xpvhv_aux *iter;
1977 Perl_croak(aTHX_ "Bad hash");
1979 xhv = (XPVHV*)SvANY(hv);
1982 /* Too many things (well, pp_each at least) merrily assume that you can
1983 call iv_iternext without calling hv_iterinit, so we'll have to deal
1989 oldentry = entry = iter->xhv_eiter; /* HvEITER(hv) */
1990 if (SvMAGICAL(hv) && SvRMAGICAL(hv)) {
1991 if ( ( mg = mg_find((SV*)hv, PERL_MAGIC_tied) ) ) {
1992 SV * const key = sv_newmortal();
1994 sv_setsv(key, HeSVKEY_force(entry));
1995 SvREFCNT_dec(HeSVKEY(entry)); /* get rid of previous key */
2001 /* one HE per MAGICAL hash */
2002 iter->xhv_eiter = entry = new_HE(); /* HvEITER(hv) = new_HE() */
2004 Newxz(k, HEK_BASESIZE + sizeof(SV*), char);
2006 HeKEY_hek(entry) = hek;
2007 HeKLEN(entry) = HEf_SVKEY;
2009 magic_nextpack((SV*) hv,mg,key);
2011 /* force key to stay around until next time */
2012 HeSVKEY_set(entry, SvREFCNT_inc_simple_NN(key));
2013 return entry; /* beware, hent_val is not set */
2016 SvREFCNT_dec(HeVAL(entry));
2017 Safefree(HeKEY_hek(entry));
2019 iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */
2023 #if defined(DYNAMIC_ENV_FETCH) && !defined(__riscos__) /* set up %ENV for iteration */
2024 if (!entry && SvRMAGICAL((SV*)hv) && mg_find((SV*)hv, PERL_MAGIC_env)) {
2027 /* The prime_env_iter() on VMS just loaded up new hash values
2028 * so the iteration count needs to be reset back to the beginning
2032 oldentry = entry = iter->xhv_eiter; /* HvEITER(hv) */
2037 /* hv_iterint now ensures this. */
2038 assert (HvARRAY(hv));
2040 /* At start of hash, entry is NULL. */
2043 entry = HeNEXT(entry);
2044 if (!(flags & HV_ITERNEXT_WANTPLACEHOLDERS)) {
2046 * Skip past any placeholders -- don't want to include them in
2049 while (entry && HeVAL(entry) == &PL_sv_placeholder) {
2050 entry = HeNEXT(entry);
2055 /* OK. Come to the end of the current list. Grab the next one. */
2057 iter->xhv_riter++; /* HvRITER(hv)++ */
2058 if (iter->xhv_riter > (I32)xhv->xhv_max /* HvRITER(hv) > HvMAX(hv) */) {
2059 /* There is no next one. End of the hash. */
2060 iter->xhv_riter = -1; /* HvRITER(hv) = -1 */
2063 entry = (HvARRAY(hv))[iter->xhv_riter];
2065 if (!(flags & HV_ITERNEXT_WANTPLACEHOLDERS)) {
2066 /* If we have an entry, but it's a placeholder, don't count it.
2068 while (entry && HeVAL(entry) == &PL_sv_placeholder)
2069 entry = HeNEXT(entry);
2071 /* Will loop again if this linked list starts NULL
2072 (for HV_ITERNEXT_WANTPLACEHOLDERS)
2073 or if we run through it and find only placeholders. */
2076 if (oldentry && HvLAZYDEL(hv)) { /* was deleted earlier? */
2078 hv_free_ent(hv, oldentry);
2081 /*if (HvREHASH(hv) && entry && !HeKREHASH(entry))
2082 PerlIO_printf(PerlIO_stderr(), "Awooga %p %p\n", (void*)hv, (void*)entry);*/
2084 iter->xhv_eiter = entry; /* HvEITER(hv) = entry */
2089 =for apidoc hv_iterkey
2091 Returns the key from the current position of the hash iterator. See
2098 Perl_hv_iterkey(pTHX_ register HE *entry, I32 *retlen)
2100 if (HeKLEN(entry) == HEf_SVKEY) {
2102 char * const p = SvPV(HeKEY_sv(entry), len);
2107 *retlen = HeKLEN(entry);
2108 return HeKEY(entry);
2112 /* unlike hv_iterval(), this always returns a mortal copy of the key */
2114 =for apidoc hv_iterkeysv
2116 Returns the key as an C<SV*> from the current position of the hash
2117 iterator. The return value will always be a mortal copy of the key. Also
2124 Perl_hv_iterkeysv(pTHX_ register HE *entry)
2126 return sv_2mortal(newSVhek(HeKEY_hek(entry)));
2130 =for apidoc hv_iterval
2132 Returns the value from the current position of the hash iterator. See
2139 Perl_hv_iterval(pTHX_ HV *hv, register HE *entry)
2141 if (SvRMAGICAL(hv)) {
2142 if (mg_find((SV*)hv, PERL_MAGIC_tied)) {
2143 SV* const sv = sv_newmortal();
2144 if (HeKLEN(entry) == HEf_SVKEY)
2145 mg_copy((SV*)hv, sv, (char*)HeKEY_sv(entry), HEf_SVKEY);
2147 mg_copy((SV*)hv, sv, HeKEY(entry), HeKLEN(entry));
2151 return HeVAL(entry);
2155 =for apidoc hv_iternextsv
2157 Performs an C<hv_iternext>, C<hv_iterkey>, and C<hv_iterval> in one
2164 Perl_hv_iternextsv(pTHX_ HV *hv, char **key, I32 *retlen)
2166 HE * const he = hv_iternext_flags(hv, 0);
2170 *key = hv_iterkey(he, retlen);
2171 return hv_iterval(hv, he);
2178 =for apidoc hv_magic
2180 Adds magic to a hash. See C<sv_magic>.
2185 /* possibly free a shared string if no one has access to it
2186 * len and hash must both be valid for str.
2189 Perl_unsharepvn(pTHX_ const char *str, I32 len, U32 hash)
2191 unshare_hek_or_pvn (NULL, str, len, hash);
2196 Perl_unshare_hek(pTHX_ HEK *hek)
2199 unshare_hek_or_pvn(hek, NULL, 0, 0);
2202 /* possibly free a shared string if no one has access to it
2203 hek if non-NULL takes priority over the other 3, else str, len and hash
2204 are used. If so, len and hash must both be valid for str.
2207 S_unshare_hek_or_pvn(pTHX_ const HEK *hek, const char *str, I32 len, U32 hash)
2210 register XPVHV* xhv;
2212 register HE **oentry;
2214 bool is_utf8 = FALSE;
2216 const char * const save = str;
2217 struct shared_he *he = NULL;
2220 /* Find the shared he which is just before us in memory. */
2221 he = (struct shared_he *)(((char *)hek)
2222 - STRUCT_OFFSET(struct shared_he,
2225 /* Assert that the caller passed us a genuine (or at least consistent)
2227 assert (he->shared_he_he.hent_hek == hek);
2230 if (he->shared_he_he.he_valu.hent_refcount - 1) {
2231 --he->shared_he_he.he_valu.hent_refcount;
2232 UNLOCK_STRTAB_MUTEX;
2235 UNLOCK_STRTAB_MUTEX;
2237 hash = HEK_HASH(hek);
2238 } else if (len < 0) {
2239 STRLEN tmplen = -len;
2241 /* See the note in hv_fetch(). --jhi */
2242 str = (char*)bytes_from_utf8((U8*)str, &tmplen, &is_utf8);
2245 k_flags = HVhek_UTF8;
2247 k_flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
2250 /* what follows was the moral equivalent of:
2251 if ((Svp = hv_fetch(PL_strtab, tmpsv, FALSE, hash))) {
2253 hv_delete(PL_strtab, str, len, G_DISCARD, hash);
2255 xhv = (XPVHV*)SvANY(PL_strtab);
2256 /* assert(xhv_array != 0) */
2258 first = oentry = &(HvARRAY(PL_strtab))[hash & (I32) HvMAX(PL_strtab)];
2260 const HE *const he_he = &(he->shared_he_he);
2261 for (entry = *oentry; entry; oentry = &HeNEXT(entry), entry = *oentry) {
2266 const int flags_masked = k_flags & HVhek_MASK;
2267 for (entry = *oentry; entry; oentry = &HeNEXT(entry), entry = *oentry) {
2268 if (HeHASH(entry) != hash) /* strings can't be equal */
2270 if (HeKLEN(entry) != len)
2272 if (HeKEY(entry) != str && memNE(HeKEY(entry),str,len)) /* is this it? */
2274 if (HeKFLAGS(entry) != flags_masked)
2281 if (--entry->he_valu.hent_refcount == 0) {
2282 *oentry = HeNEXT(entry);
2284 /* There are now no entries in our slot. */
2285 xhv->xhv_fill--; /* HvFILL(hv)-- */
2288 xhv->xhv_keys--; /* HvTOTALKEYS(hv)-- */
2292 UNLOCK_STRTAB_MUTEX;
2293 if (!entry && ckWARN_d(WARN_INTERNAL))
2294 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
2295 "Attempt to free non-existent shared string '%s'%s"
2297 hek ? HEK_KEY(hek) : str,
2298 ((k_flags & HVhek_UTF8) ? " (utf8)" : "") pTHX__VALUE);
2299 if (k_flags & HVhek_FREEKEY)
2303 /* get a (constant) string ptr from the global string table
2304 * string will get added if it is not already there.
2305 * len and hash must both be valid for str.
2308 Perl_share_hek(pTHX_ const char *str, I32 len, register U32 hash)
2310 bool is_utf8 = FALSE;
2312 const char * const save = str;
2315 STRLEN tmplen = -len;
2317 /* See the note in hv_fetch(). --jhi */
2318 str = (char*)bytes_from_utf8((U8*)str, &tmplen, &is_utf8);
2320 /* If we were able to downgrade here, then than means that we were passed
2321 in a key which only had chars 0-255, but was utf8 encoded. */
2324 /* If we found we were able to downgrade the string to bytes, then
2325 we should flag that it needs upgrading on keys or each. Also flag
2326 that we need share_hek_flags to free the string. */
2328 flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
2331 return share_hek_flags (str, len, hash, flags);
2335 S_share_hek_flags(pTHX_ const char *str, I32 len, register U32 hash, int flags)
2339 const int flags_masked = flags & HVhek_MASK;
2340 const U32 hindex = hash & (I32) HvMAX(PL_strtab);
2342 /* what follows is the moral equivalent of:
2344 if (!(Svp = hv_fetch(PL_strtab, str, len, FALSE)))
2345 hv_store(PL_strtab, str, len, NULL, hash);
2347 Can't rehash the shared string table, so not sure if it's worth
2348 counting the number of entries in the linked list
2350 register XPVHV * const xhv = (XPVHV*)SvANY(PL_strtab);
2351 /* assert(xhv_array != 0) */
2353 entry = (HvARRAY(PL_strtab))[hindex];
2354 for (;entry; entry = HeNEXT(entry)) {
2355 if (HeHASH(entry) != hash) /* strings can't be equal */
2357 if (HeKLEN(entry) != len)
2359 if (HeKEY(entry) != str && memNE(HeKEY(entry),str,len)) /* is this it? */
2361 if (HeKFLAGS(entry) != flags_masked)
2367 /* What used to be head of the list.
2368 If this is NULL, then we're the first entry for this slot, which
2369 means we need to increate fill. */
2370 struct shared_he *new_entry;
2373 HE **const head = &HvARRAY(PL_strtab)[hindex];
2374 HE *const next = *head;
2376 /* We don't actually store a HE from the arena and a regular HEK.
2377 Instead we allocate one chunk of memory big enough for both,
2378 and put the HEK straight after the HE. This way we can find the
2379 HEK directly from the HE.
2382 Newx(k, STRUCT_OFFSET(struct shared_he,
2383 shared_he_hek.hek_key[0]) + len + 2, char);
2384 new_entry = (struct shared_he *)k;
2385 entry = &(new_entry->shared_he_he);
2386 hek = &(new_entry->shared_he_hek);
2388 Copy(str, HEK_KEY(hek), len, char);
2389 HEK_KEY(hek)[len] = 0;
2391 HEK_HASH(hek) = hash;
2392 HEK_FLAGS(hek) = (unsigned char)flags_masked;
2394 /* Still "point" to the HEK, so that other code need not know what
2396 HeKEY_hek(entry) = hek;
2397 entry->he_valu.hent_refcount = 0;
2398 HeNEXT(entry) = next;
2401 xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */
2402 if (!next) { /* initial entry? */
2403 xhv->xhv_fill++; /* HvFILL(hv)++ */
2404 } else if (xhv->xhv_keys > (IV)xhv->xhv_max /* HvKEYS(hv) > HvMAX(hv) */) {
2409 ++entry->he_valu.hent_refcount;
2410 UNLOCK_STRTAB_MUTEX;
2412 if (flags & HVhek_FREEKEY)
2415 return HeKEY_hek(entry);
2419 Perl_hv_placeholders_p(pTHX_ HV *hv)
2422 MAGIC *mg = mg_find((SV*)hv, PERL_MAGIC_rhash);
2425 mg = sv_magicext((SV*)hv, 0, PERL_MAGIC_rhash, 0, 0, 0);
2428 Perl_die(aTHX_ "panic: hv_placeholders_p");
2431 return &(mg->mg_len);
2436 Perl_hv_placeholders_get(pTHX_ HV *hv)
2439 MAGIC * const mg = mg_find((SV*)hv, PERL_MAGIC_rhash);
2441 return mg ? mg->mg_len : 0;
2445 Perl_hv_placeholders_set(pTHX_ HV *hv, I32 ph)
2448 MAGIC * const mg = mg_find((SV*)hv, PERL_MAGIC_rhash);
2453 if (!sv_magicext((SV*)hv, 0, PERL_MAGIC_rhash, 0, 0, ph))
2454 Perl_die(aTHX_ "panic: hv_placeholders_set");
2456 /* else we don't need to add magic to record 0 placeholders. */
2460 S_refcounted_he_value(pTHX_ const struct refcounted_he *he)
2464 switch(he->refcounted_he_data[0] & HVrhek_typemask) {
2469 value = &PL_sv_placeholder;
2472 value = newSViv(he->refcounted_he_val.refcounted_he_u_iv);
2475 value = newSVuv(he->refcounted_he_val.refcounted_he_u_uv);
2478 case HVrhek_PV_UTF8:
2479 /* Create a string SV that directly points to the bytes in our
2481 value = newSV_type(SVt_PV);
2482 SvPV_set(value, (char *) he->refcounted_he_data + 1);
2483 SvCUR_set(value, he->refcounted_he_val.refcounted_he_u_len);
2484 /* This stops anything trying to free it */
2485 SvLEN_set(value, 0);
2487 SvREADONLY_on(value);
2488 if ((he->refcounted_he_data[0] & HVrhek_typemask) == HVrhek_PV_UTF8)
2492 Perl_croak(aTHX_ "panic: refcounted_he_value bad flags %x",
2493 he->refcounted_he_data[0]);
2499 =for apidoc refcounted_he_chain_2hv
2501 Generates and returns a C<HV *> by walking up the tree starting at the passed
2502 in C<struct refcounted_he *>.
2507 Perl_refcounted_he_chain_2hv(pTHX_ const struct refcounted_he *chain)
2511 U32 placeholders = 0;
2512 /* We could chase the chain once to get an idea of the number of keys,
2513 and call ksplit. But for now we'll make a potentially inefficient
2514 hash with only 8 entries in its array. */
2515 const U32 max = HvMAX(hv);
2519 Newxz(array, PERL_HV_ARRAY_ALLOC_BYTES(max + 1), char);
2520 HvARRAY(hv) = (HE**)array;
2525 U32 hash = chain->refcounted_he_hash;
2527 U32 hash = HEK_HASH(chain->refcounted_he_hek);
2529 HE **oentry = &((HvARRAY(hv))[hash & max]);
2530 HE *entry = *oentry;
2533 for (; entry; entry = HeNEXT(entry)) {
2534 if (HeHASH(entry) == hash) {
2535 /* We might have a duplicate key here. If so, entry is older
2536 than the key we've already put in the hash, so if they are
2537 the same, skip adding entry. */
2539 const STRLEN klen = HeKLEN(entry);
2540 const char *const key = HeKEY(entry);
2541 if (klen == chain->refcounted_he_keylen
2542 && (!!HeKUTF8(entry)
2543 == !!(chain->refcounted_he_data[0] & HVhek_UTF8))
2544 && memEQ(key, REF_HE_KEY(chain), klen))
2547 if (HeKEY_hek(entry) == chain->refcounted_he_hek)
2549 if (HeKLEN(entry) == HEK_LEN(chain->refcounted_he_hek)
2550 && HeKUTF8(entry) == HEK_UTF8(chain->refcounted_he_hek)
2551 && memEQ(HeKEY(entry), HEK_KEY(chain->refcounted_he_hek),
2562 = share_hek_flags(REF_HE_KEY(chain),
2563 chain->refcounted_he_keylen,
2564 chain->refcounted_he_hash,
2565 (chain->refcounted_he_data[0]
2566 & (HVhek_UTF8|HVhek_WASUTF8)));
2568 HeKEY_hek(entry) = share_hek_hek(chain->refcounted_he_hek);
2570 value = refcounted_he_value(chain);
2571 if (value == &PL_sv_placeholder)
2573 HeVAL(entry) = value;
2575 /* Link it into the chain. */
2576 HeNEXT(entry) = *oentry;
2577 if (!HeNEXT(entry)) {
2578 /* initial entry. */
2586 chain = chain->refcounted_he_next;
2590 clear_placeholders(hv, placeholders);
2591 HvTOTALKEYS(hv) -= placeholders;
2594 /* We could check in the loop to see if we encounter any keys with key
2595 flags, but it's probably not worth it, as this per-hash flag is only
2596 really meant as an optimisation for things like Storable. */
2598 DEBUG_A(Perl_hv_assert(aTHX_ hv));
2604 Perl_refcounted_he_fetch(pTHX_ const struct refcounted_he *chain, SV *keysv,
2605 const char *key, STRLEN klen, int flags, U32 hash)
2608 /* Just to be awkward, if you're using this interface the UTF-8-or-not-ness
2609 of your key has to exactly match that which is stored. */
2610 SV *value = &PL_sv_placeholder;
2614 if (flags & HVhek_FREEKEY)
2616 key = SvPV_const(keysv, klen);
2618 is_utf8 = (SvUTF8(keysv) != 0);
2620 is_utf8 = ((flags & HVhek_UTF8) ? TRUE : FALSE);
2624 if (keysv && (SvIsCOW_shared_hash(keysv))) {
2625 hash = SvSHARED_HASH(keysv);
2627 PERL_HASH(hash, key, klen);
2631 for (; chain; chain = chain->refcounted_he_next) {
2633 if (hash != chain->refcounted_he_hash)
2635 if (klen != chain->refcounted_he_keylen)
2637 if (memNE(REF_HE_KEY(chain),key,klen))
2639 if (!!is_utf8 != !!(chain->refcounted_he_data[0] & HVhek_UTF8))
2642 if (hash != HEK_HASH(chain->refcounted_he_hek))
2644 if (klen != (STRLEN)HEK_LEN(chain->refcounted_he_hek))
2646 if (memNE(HEK_KEY(chain->refcounted_he_hek),key,klen))
2648 if (!!is_utf8 != !!HEK_UTF8(chain->refcounted_he_hek))
2652 value = sv_2mortal(refcounted_he_value(chain));
2656 if (flags & HVhek_FREEKEY)
2663 =for apidoc refcounted_he_new
2665 Creates a new C<struct refcounted_he>. As S<key> is copied, and value is
2666 stored in a compact form, all references remain the property of the caller.
2667 The C<struct refcounted_he> is returned with a reference count of 1.
2672 struct refcounted_he *
2673 Perl_refcounted_he_new(pTHX_ struct refcounted_he *const parent,
2674 SV *const key, SV *const value) {
2676 struct refcounted_he *he;
2678 const char *key_p = SvPV_const(key, key_len);
2679 STRLEN value_len = 0;
2680 const char *value_p = NULL;
2685 bool is_utf8 = SvUTF8(key) ? TRUE : FALSE;
2688 value_type = HVrhek_PV;
2689 } else if (SvIOK(value)) {
2690 value_type = HVrhek_IV;
2691 } else if (value == &PL_sv_placeholder) {
2692 value_type = HVrhek_delete;
2693 } else if (!SvOK(value)) {
2694 value_type = HVrhek_undef;
2696 value_type = HVrhek_PV;
2699 if (value_type == HVrhek_PV) {
2700 value_p = SvPV_const(value, value_len);
2701 key_offset = value_len + 2;
2708 he = (struct refcounted_he*)
2709 PerlMemShared_malloc(sizeof(struct refcounted_he) - 1
2713 he = (struct refcounted_he*)
2714 PerlMemShared_malloc(sizeof(struct refcounted_he) - 1
2719 he->refcounted_he_next = parent;
2721 if (value_type == HVrhek_PV) {
2722 Copy(value_p, he->refcounted_he_data + 1, value_len + 1, char);
2723 he->refcounted_he_val.refcounted_he_u_len = value_len;
2724 /* Do it this way so that the SvUTF8() test is after the SvPV, in case
2725 the value is overloaded, and doesn't yet have the UTF-8flag set. */
2727 value_type = HVrhek_PV_UTF8;
2728 } else if (value_type == HVrhek_IV) {
2730 he->refcounted_he_val.refcounted_he_u_uv = SvUVX(value);
2731 value_type = HVrhek_UV;
2733 he->refcounted_he_val.refcounted_he_u_iv = SvIVX(value);
2739 /* Hash keys are always stored normalised to (yes) ISO-8859-1.
2740 As we're going to be building hash keys from this value in future,
2741 normalise it now. */
2742 key_p = (char*)bytes_from_utf8((const U8*)key_p, &key_len, &is_utf8);
2743 flags |= is_utf8 ? HVhek_UTF8 : HVhek_WASUTF8;
2745 PERL_HASH(hash, key_p, key_len);
2748 he->refcounted_he_hash = hash;
2749 he->refcounted_he_keylen = key_len;
2750 Copy(key_p, he->refcounted_he_data + key_offset, key_len, char);
2752 he->refcounted_he_hek = share_hek_flags(key_p, key_len, hash, flags);
2755 if (flags & HVhek_WASUTF8) {
2756 /* If it was downgraded from UTF-8, then the pointer returned from
2757 bytes_from_utf8 is an allocated pointer that we must free. */
2761 he->refcounted_he_data[0] = flags;
2762 he->refcounted_he_refcnt = 1;
2768 =for apidoc refcounted_he_free
2770 Decrements the reference count of the passed in C<struct refcounted_he *>
2771 by one. If the reference count reaches zero the structure's memory is freed,
2772 and C<refcounted_he_free> iterates onto the parent node.
2778 Perl_refcounted_he_free(pTHX_ struct refcounted_he *he) {
2780 PERL_UNUSED_CONTEXT;
2783 struct refcounted_he *copy;
2787 new_count = --he->refcounted_he_refcnt;
2788 HINTS_REFCNT_UNLOCK;
2794 #ifndef USE_ITHREADS
2795 unshare_hek_or_pvn (he->refcounted_he_hek, 0, 0, 0);
2798 he = he->refcounted_he_next;
2799 PerlMemShared_free(copy);
2804 =for apidoc hv_assert
2806 Check that a hash is in an internally consistent state.
2814 Perl_hv_assert(pTHX_ HV *hv)
2819 int placeholders = 0;
2822 const I32 riter = HvRITER_get(hv);
2823 HE *eiter = HvEITER_get(hv);
2825 (void)hv_iterinit(hv);
2827 while ((entry = hv_iternext_flags(hv, HV_ITERNEXT_WANTPLACEHOLDERS))) {
2828 /* sanity check the values */
2829 if (HeVAL(entry) == &PL_sv_placeholder)
2833 /* sanity check the keys */
2834 if (HeSVKEY(entry)) {
2835 NOOP; /* Don't know what to check on SV keys. */
2836 } else if (HeKUTF8(entry)) {
2838 if (HeKWASUTF8(entry)) {
2839 PerlIO_printf(Perl_debug_log,
2840 "hash key has both WASUTF8 and UTF8: '%.*s'\n",
2841 (int) HeKLEN(entry), HeKEY(entry));
2844 } else if (HeKWASUTF8(entry))
2847 if (!SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
2848 static const char bad_count[] = "Count %d %s(s), but hash reports %d\n";
2849 const int nhashkeys = HvUSEDKEYS(hv);
2850 const int nhashplaceholders = HvPLACEHOLDERS_get(hv);
2852 if (nhashkeys != real) {
2853 PerlIO_printf(Perl_debug_log, bad_count, real, "keys", nhashkeys );
2856 if (nhashplaceholders != placeholders) {
2857 PerlIO_printf(Perl_debug_log, bad_count, placeholders, "placeholder", nhashplaceholders );
2861 if (withflags && ! HvHASKFLAGS(hv)) {
2862 PerlIO_printf(Perl_debug_log,
2863 "Hash has HASKFLAGS off but I count %d key(s) with flags\n",
2870 HvRITER_set(hv, riter); /* Restore hash iterator state */
2871 HvEITER_set(hv, eiter);
2878 * c-indentation-style: bsd
2880 * indent-tabs-mode: t
2883 * ex: set ts=8 sts=4 sw=4 noet: