This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #92542] perl5134delta.pod has a repeated word word
[perl5.git] / hv.c
1 /*    hv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
5  *
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.
8  *
9  */
10
11 /*
12  *      I sit beside the fire and think
13  *          of all that I have seen.
14  *                         --Bilbo
15  *
16  *     [p.278 of _The Lord of the Rings_, II/iii: "The Ring Goes South"]
17  */
18
19 /* 
20 =head1 Hash Manipulation Functions
21
22 A HV structure represents a Perl hash. It consists mainly of an array
23 of pointers, each of which points to a linked list of HE structures. The
24 array is indexed by the hash function of the key, so each linked list
25 represents all the hash entries with the same hash value. Each HE contains
26 a pointer to the actual value, plus a pointer to a HEK structure which
27 holds the key and hash value.
28
29 =cut
30
31 */
32
33 #include "EXTERN.h"
34 #define PERL_IN_HV_C
35 #define PERL_HASH_INTERNAL_ACCESS
36 #include "perl.h"
37
38 #define HV_MAX_LENGTH_BEFORE_SPLIT 14
39
40 static const char S_strtab_error[]
41     = "Cannot modify shared string table in hv_%s";
42
43 #ifdef PURIFY
44
45 #define new_HE() (HE*)safemalloc(sizeof(HE))
46 #define del_HE(p) safefree((char*)p)
47
48 #else
49
50 STATIC HE*
51 S_new_he(pTHX)
52 {
53     dVAR;
54     HE* he;
55     void ** const root = &PL_body_roots[HE_SVSLOT];
56
57     if (!*root)
58         Perl_more_bodies(aTHX_ HE_SVSLOT, sizeof(HE), PERL_ARENA_SIZE);
59     he = (HE*) *root;
60     assert(he);
61     *root = HeNEXT(he);
62     return he;
63 }
64
65 #define new_HE() new_he()
66 #define del_HE(p) \
67     STMT_START { \
68         HeNEXT(p) = (HE*)(PL_body_roots[HE_SVSLOT]);    \
69         PL_body_roots[HE_SVSLOT] = p; \
70     } STMT_END
71
72
73
74 #endif
75
76 STATIC HEK *
77 S_save_hek_flags(const char *str, I32 len, U32 hash, int flags)
78 {
79     const int flags_masked = flags & HVhek_MASK;
80     char *k;
81     register HEK *hek;
82
83     PERL_ARGS_ASSERT_SAVE_HEK_FLAGS;
84
85     Newx(k, HEK_BASESIZE + len + 2, char);
86     hek = (HEK*)k;
87     Copy(str, HEK_KEY(hek), len, char);
88     HEK_KEY(hek)[len] = 0;
89     HEK_LEN(hek) = len;
90     HEK_HASH(hek) = hash;
91     HEK_FLAGS(hek) = (unsigned char)flags_masked | HVhek_UNSHARED;
92
93     if (flags & HVhek_FREEKEY)
94         Safefree(str);
95     return hek;
96 }
97
98 /* free the pool of temporary HE/HEK pairs returned by hv_fetch_ent
99  * for tied hashes */
100
101 void
102 Perl_free_tied_hv_pool(pTHX)
103 {
104     dVAR;
105     HE *he = PL_hv_fetch_ent_mh;
106     while (he) {
107         HE * const ohe = he;
108         Safefree(HeKEY_hek(he));
109         he = HeNEXT(he);
110         del_HE(ohe);
111     }
112     PL_hv_fetch_ent_mh = NULL;
113 }
114
115 #if defined(USE_ITHREADS)
116 HEK *
117 Perl_hek_dup(pTHX_ HEK *source, CLONE_PARAMS* param)
118 {
119     HEK *shared;
120
121     PERL_ARGS_ASSERT_HEK_DUP;
122     PERL_UNUSED_ARG(param);
123
124     if (!source)
125         return NULL;
126
127     shared = (HEK*)ptr_table_fetch(PL_ptr_table, source);
128     if (shared) {
129         /* We already shared this hash key.  */
130         (void)share_hek_hek(shared);
131     }
132     else {
133         shared
134             = share_hek_flags(HEK_KEY(source), HEK_LEN(source),
135                               HEK_HASH(source), HEK_FLAGS(source));
136         ptr_table_store(PL_ptr_table, source, shared);
137     }
138     return shared;
139 }
140
141 HE *
142 Perl_he_dup(pTHX_ const HE *e, bool shared, CLONE_PARAMS* param)
143 {
144     HE *ret;
145
146     PERL_ARGS_ASSERT_HE_DUP;
147
148     if (!e)
149         return NULL;
150     /* look for it in the table first */
151     ret = (HE*)ptr_table_fetch(PL_ptr_table, e);
152     if (ret)
153         return ret;
154
155     /* create anew and remember what it is */
156     ret = new_HE();
157     ptr_table_store(PL_ptr_table, e, ret);
158
159     HeNEXT(ret) = he_dup(HeNEXT(e),shared, param);
160     if (HeKLEN(e) == HEf_SVKEY) {
161         char *k;
162         Newx(k, HEK_BASESIZE + sizeof(const SV *), char);
163         HeKEY_hek(ret) = (HEK*)k;
164         HeKEY_sv(ret) = sv_dup_inc(HeKEY_sv(e), param);
165     }
166     else if (shared) {
167         /* This is hek_dup inlined, which seems to be important for speed
168            reasons.  */
169         HEK * const source = HeKEY_hek(e);
170         HEK *shared = (HEK*)ptr_table_fetch(PL_ptr_table, source);
171
172         if (shared) {
173             /* We already shared this hash key.  */
174             (void)share_hek_hek(shared);
175         }
176         else {
177             shared
178                 = share_hek_flags(HEK_KEY(source), HEK_LEN(source),
179                                   HEK_HASH(source), HEK_FLAGS(source));
180             ptr_table_store(PL_ptr_table, source, shared);
181         }
182         HeKEY_hek(ret) = shared;
183     }
184     else
185         HeKEY_hek(ret) = save_hek_flags(HeKEY(e), HeKLEN(e), HeHASH(e),
186                                         HeKFLAGS(e));
187     HeVAL(ret) = sv_dup_inc(HeVAL(e), param);
188     return ret;
189 }
190 #endif  /* USE_ITHREADS */
191
192 static void
193 S_hv_notallowed(pTHX_ int flags, const char *key, I32 klen,
194                 const char *msg)
195 {
196     SV * const sv = sv_newmortal();
197
198     PERL_ARGS_ASSERT_HV_NOTALLOWED;
199
200     if (!(flags & HVhek_FREEKEY)) {
201         sv_setpvn(sv, key, klen);
202     }
203     else {
204         /* Need to free saved eventually assign to mortal SV */
205         /* XXX is this line an error ???:  SV *sv = sv_newmortal(); */
206         sv_usepvn(sv, (char *) key, klen);
207     }
208     if (flags & HVhek_UTF8) {
209         SvUTF8_on(sv);
210     }
211     Perl_croak(aTHX_ msg, SVfARG(sv));
212 }
213
214 /* (klen == HEf_SVKEY) is special for MAGICAL hv entries, meaning key slot
215  * contains an SV* */
216
217 /*
218 =for apidoc hv_store
219
220 Stores an SV in a hash.  The hash key is specified as C<key> and C<klen> is
221 the length of the key.  The C<hash> parameter is the precomputed hash
222 value; if it is zero then Perl will compute it.  The return value will be
223 NULL if the operation failed or if the value did not need to be actually
224 stored within the hash (as in the case of tied hashes).  Otherwise it can
225 be dereferenced to get the original C<SV*>.  Note that the caller is
226 responsible for suitably incrementing the reference count of C<val> before
227 the call, and decrementing it if the function returned NULL.  Effectively
228 a successful hv_store takes ownership of one reference to C<val>.  This is
229 usually what you want; a newly created SV has a reference count of one, so
230 if all your code does is create SVs then store them in a hash, hv_store
231 will own the only reference to the new SV, and your code doesn't need to do
232 anything further to tidy up.  hv_store is not implemented as a call to
233 hv_store_ent, and does not create a temporary SV for the key, so if your
234 key data is not already in SV form then use hv_store in preference to
235 hv_store_ent.
236
237 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
238 information on how to use this function on tied hashes.
239
240 =for apidoc hv_store_ent
241
242 Stores C<val> in a hash.  The hash key is specified as C<key>.  The C<hash>
243 parameter is the precomputed hash value; if it is zero then Perl will
244 compute it.  The return value is the new hash entry so created.  It will be
245 NULL if the operation failed or if the value did not need to be actually
246 stored within the hash (as in the case of tied hashes).  Otherwise the
247 contents of the return value can be accessed using the C<He?> macros
248 described here.  Note that the caller is responsible for suitably
249 incrementing the reference count of C<val> before the call, and
250 decrementing it if the function returned NULL.  Effectively a successful
251 hv_store_ent takes ownership of one reference to C<val>.  This is
252 usually what you want; a newly created SV has a reference count of one, so
253 if all your code does is create SVs then store them in a hash, hv_store
254 will own the only reference to the new SV, and your code doesn't need to do
255 anything further to tidy up.  Note that hv_store_ent only reads the C<key>;
256 unlike C<val> it does not take ownership of it, so maintaining the correct
257 reference count on C<key> is entirely the caller's responsibility.  hv_store
258 is not implemented as a call to hv_store_ent, and does not create a temporary
259 SV for the key, so if your key data is not already in SV form then use
260 hv_store in preference to hv_store_ent.
261
262 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
263 information on how to use this function on tied hashes.
264
265 =for apidoc hv_exists
266
267 Returns a boolean indicating whether the specified hash key exists.  The
268 C<klen> is the length of the key.
269
270 =for apidoc hv_fetch
271
272 Returns the SV which corresponds to the specified key in the hash.  The
273 C<klen> is the length of the key.  If C<lval> is set then the fetch will be
274 part of a store.  Check that the return value is non-null before
275 dereferencing it to an C<SV*>.
276
277 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
278 information on how to use this function on tied hashes.
279
280 =for apidoc hv_exists_ent
281
282 Returns a boolean indicating whether the specified hash key exists. C<hash>
283 can be a valid precomputed hash value, or 0 to ask for it to be
284 computed.
285
286 =cut
287 */
288
289 /* returns an HE * structure with the all fields set */
290 /* note that hent_val will be a mortal sv for MAGICAL hashes */
291 /*
292 =for apidoc hv_fetch_ent
293
294 Returns the hash entry which corresponds to the specified key in the hash.
295 C<hash> must be a valid precomputed hash number for the given C<key>, or 0
296 if you want the function to compute it.  IF C<lval> is set then the fetch
297 will be part of a store.  Make sure the return value is non-null before
298 accessing it.  The return value when C<hv> is a tied hash is a pointer to a
299 static location, so be sure to make a copy of the structure if you need to
300 store it somewhere.
301
302 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
303 information on how to use this function on tied hashes.
304
305 =cut
306 */
307
308 /* Common code for hv_delete()/hv_exists()/hv_fetch()/hv_store()  */
309 void *
310 Perl_hv_common_key_len(pTHX_ HV *hv, const char *key, I32 klen_i32,
311                        const int action, SV *val, const U32 hash)
312 {
313     STRLEN klen;
314     int flags;
315
316     PERL_ARGS_ASSERT_HV_COMMON_KEY_LEN;
317
318     if (klen_i32 < 0) {
319         klen = -klen_i32;
320         flags = HVhek_UTF8;
321     } else {
322         klen = klen_i32;
323         flags = 0;
324     }
325     return hv_common(hv, NULL, key, klen, flags, action, val, hash);
326 }
327
328 void *
329 Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen,
330                int flags, int action, SV *val, register U32 hash)
331 {
332     dVAR;
333     XPVHV* xhv;
334     HE *entry;
335     HE **oentry;
336     SV *sv;
337     bool is_utf8;
338     int masked_flags;
339     const int return_svp = action & HV_FETCH_JUST_SV;
340
341     if (!hv)
342         return NULL;
343     if (SvTYPE(hv) == SVTYPEMASK)
344         return NULL;
345
346     assert(SvTYPE(hv) == SVt_PVHV);
347
348     if (SvSMAGICAL(hv) && SvGMAGICAL(hv) && !(action & HV_DISABLE_UVAR_XKEY)) {
349         MAGIC* mg;
350         if ((mg = mg_find((const SV *)hv, PERL_MAGIC_uvar))) {
351             struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
352             if (uf->uf_set == NULL) {
353                 SV* obj = mg->mg_obj;
354
355                 if (!keysv) {
356                     keysv = newSVpvn_flags(key, klen, SVs_TEMP |
357                                            ((flags & HVhek_UTF8)
358                                             ? SVf_UTF8 : 0));
359                 }
360                 
361                 mg->mg_obj = keysv;         /* pass key */
362                 uf->uf_index = action;      /* pass action */
363                 magic_getuvar(MUTABLE_SV(hv), mg);
364                 keysv = mg->mg_obj;         /* may have changed */
365                 mg->mg_obj = obj;
366
367                 /* If the key may have changed, then we need to invalidate
368                    any passed-in computed hash value.  */
369                 hash = 0;
370             }
371         }
372     }
373     if (keysv) {
374         if (flags & HVhek_FREEKEY)
375             Safefree(key);
376         key = SvPV_const(keysv, klen);
377         is_utf8 = (SvUTF8(keysv) != 0);
378         if (SvIsCOW_shared_hash(keysv)) {
379             flags = HVhek_KEYCANONICAL | (is_utf8 ? HVhek_UTF8 : 0);
380         } else {
381             flags = 0;
382         }
383     } else {
384         is_utf8 = ((flags & HVhek_UTF8) ? TRUE : FALSE);
385     }
386
387     if (action & HV_DELETE) {
388         return (void *) hv_delete_common(hv, keysv, key, klen,
389                                          flags | (is_utf8 ? HVhek_UTF8 : 0),
390                                          action, hash);
391     }
392
393     xhv = (XPVHV*)SvANY(hv);
394     if (SvMAGICAL(hv)) {
395         if (SvRMAGICAL(hv) && !(action & (HV_FETCH_ISSTORE|HV_FETCH_ISEXISTS))) {
396             if (mg_find((const SV *)hv, PERL_MAGIC_tied)
397                 || SvGMAGICAL((const SV *)hv))
398             {
399                 /* FIXME should be able to skimp on the HE/HEK here when
400                    HV_FETCH_JUST_SV is true.  */
401                 if (!keysv) {
402                     keysv = newSVpvn_utf8(key, klen, is_utf8);
403                 } else {
404                     keysv = newSVsv(keysv);
405                 }
406                 sv = sv_newmortal();
407                 mg_copy(MUTABLE_SV(hv), sv, (char *)keysv, HEf_SVKEY);
408
409                 /* grab a fake HE/HEK pair from the pool or make a new one */
410                 entry = PL_hv_fetch_ent_mh;
411                 if (entry)
412                     PL_hv_fetch_ent_mh = HeNEXT(entry);
413                 else {
414                     char *k;
415                     entry = new_HE();
416                     Newx(k, HEK_BASESIZE + sizeof(const SV *), char);
417                     HeKEY_hek(entry) = (HEK*)k;
418                 }
419                 HeNEXT(entry) = NULL;
420                 HeSVKEY_set(entry, keysv);
421                 HeVAL(entry) = sv;
422                 sv_upgrade(sv, SVt_PVLV);
423                 LvTYPE(sv) = 'T';
424                  /* so we can free entry when freeing sv */
425                 LvTARG(sv) = MUTABLE_SV(entry);
426
427                 /* XXX remove at some point? */
428                 if (flags & HVhek_FREEKEY)
429                     Safefree(key);
430
431                 if (return_svp) {
432                     return entry ? (void *) &HeVAL(entry) : NULL;
433                 }
434                 return (void *) entry;
435             }
436 #ifdef ENV_IS_CASELESS
437             else if (mg_find((const SV *)hv, PERL_MAGIC_env)) {
438                 U32 i;
439                 for (i = 0; i < klen; ++i)
440                     if (isLOWER(key[i])) {
441                         /* Would be nice if we had a routine to do the
442                            copy and upercase in a single pass through.  */
443                         const char * const nkey = strupr(savepvn(key,klen));
444                         /* Note that this fetch is for nkey (the uppercased
445                            key) whereas the store is for key (the original)  */
446                         void *result = hv_common(hv, NULL, nkey, klen,
447                                                  HVhek_FREEKEY, /* free nkey */
448                                                  0 /* non-LVAL fetch */
449                                                  | HV_DISABLE_UVAR_XKEY
450                                                  | return_svp,
451                                                  NULL /* no value */,
452                                                  0 /* compute hash */);
453                         if (!result && (action & HV_FETCH_LVALUE)) {
454                             /* This call will free key if necessary.
455                                Do it this way to encourage compiler to tail
456                                call optimise.  */
457                             result = hv_common(hv, keysv, key, klen, flags,
458                                                HV_FETCH_ISSTORE
459                                                | HV_DISABLE_UVAR_XKEY
460                                                | return_svp,
461                                                newSV(0), hash);
462                         } else {
463                             if (flags & HVhek_FREEKEY)
464                                 Safefree(key);
465                         }
466                         return result;
467                     }
468             }
469 #endif
470         } /* ISFETCH */
471         else if (SvRMAGICAL(hv) && (action & HV_FETCH_ISEXISTS)) {
472             if (mg_find((const SV *)hv, PERL_MAGIC_tied)
473                 || SvGMAGICAL((const SV *)hv)) {
474                 /* I don't understand why hv_exists_ent has svret and sv,
475                    whereas hv_exists only had one.  */
476                 SV * const svret = sv_newmortal();
477                 sv = sv_newmortal();
478
479                 if (keysv || is_utf8) {
480                     if (!keysv) {
481                         keysv = newSVpvn_utf8(key, klen, TRUE);
482                     } else {
483                         keysv = newSVsv(keysv);
484                     }
485                     mg_copy(MUTABLE_SV(hv), sv, (char *)sv_2mortal(keysv), HEf_SVKEY);
486                 } else {
487                     mg_copy(MUTABLE_SV(hv), sv, key, klen);
488                 }
489                 if (flags & HVhek_FREEKEY)
490                     Safefree(key);
491                 magic_existspack(svret, mg_find(sv, PERL_MAGIC_tiedelem));
492                 /* This cast somewhat evil, but I'm merely using NULL/
493                    not NULL to return the boolean exists.
494                    And I know hv is not NULL.  */
495                 return SvTRUE(svret) ? (void *)hv : NULL;
496                 }
497 #ifdef ENV_IS_CASELESS
498             else if (mg_find((const SV *)hv, PERL_MAGIC_env)) {
499                 /* XXX This code isn't UTF8 clean.  */
500                 char * const keysave = (char * const)key;
501                 /* Will need to free this, so set FREEKEY flag.  */
502                 key = savepvn(key,klen);
503                 key = (const char*)strupr((char*)key);
504                 is_utf8 = FALSE;
505                 hash = 0;
506                 keysv = 0;
507
508                 if (flags & HVhek_FREEKEY) {
509                     Safefree(keysave);
510                 }
511                 flags |= HVhek_FREEKEY;
512             }
513 #endif
514         } /* ISEXISTS */
515         else if (action & HV_FETCH_ISSTORE) {
516             bool needs_copy;
517             bool needs_store;
518             hv_magic_check (hv, &needs_copy, &needs_store);
519             if (needs_copy) {
520                 const bool save_taint = PL_tainted;
521                 if (keysv || is_utf8) {
522                     if (!keysv) {
523                         keysv = newSVpvn_utf8(key, klen, TRUE);
524                     }
525                     if (PL_tainting)
526                         PL_tainted = SvTAINTED(keysv);
527                     keysv = sv_2mortal(newSVsv(keysv));
528                     mg_copy(MUTABLE_SV(hv), val, (char*)keysv, HEf_SVKEY);
529                 } else {
530                     mg_copy(MUTABLE_SV(hv), val, key, klen);
531                 }
532
533                 TAINT_IF(save_taint);
534                 if (!needs_store) {
535                     if (flags & HVhek_FREEKEY)
536                         Safefree(key);
537                     return NULL;
538                 }
539 #ifdef ENV_IS_CASELESS
540                 else if (mg_find((const SV *)hv, PERL_MAGIC_env)) {
541                     /* XXX This code isn't UTF8 clean.  */
542                     const char *keysave = key;
543                     /* Will need to free this, so set FREEKEY flag.  */
544                     key = savepvn(key,klen);
545                     key = (const char*)strupr((char*)key);
546                     is_utf8 = FALSE;
547                     hash = 0;
548                     keysv = 0;
549
550                     if (flags & HVhek_FREEKEY) {
551                         Safefree(keysave);
552                     }
553                     flags |= HVhek_FREEKEY;
554                 }
555 #endif
556             }
557         } /* ISSTORE */
558     } /* SvMAGICAL */
559
560     if (!HvARRAY(hv)) {
561         if ((action & (HV_FETCH_LVALUE | HV_FETCH_ISSTORE))
562 #ifdef DYNAMIC_ENV_FETCH  /* if it's an %ENV lookup, we may get it on the fly */
563                  || (SvRMAGICAL((const SV *)hv)
564                      && mg_find((const SV *)hv, PERL_MAGIC_env))
565 #endif
566                                                                   ) {
567             char *array;
568             Newxz(array,
569                  PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max+1 /* HvMAX(hv)+1 */),
570                  char);
571             HvARRAY(hv) = (HE**)array;
572         }
573 #ifdef DYNAMIC_ENV_FETCH
574         else if (action & HV_FETCH_ISEXISTS) {
575             /* for an %ENV exists, if we do an insert it's by a recursive
576                store call, so avoid creating HvARRAY(hv) right now.  */
577         }
578 #endif
579         else {
580             /* XXX remove at some point? */
581             if (flags & HVhek_FREEKEY)
582                 Safefree(key);
583
584             return NULL;
585         }
586     }
587
588     if (is_utf8 & !(flags & HVhek_KEYCANONICAL)) {
589         char * const keysave = (char *)key;
590         key = (char*)bytes_from_utf8((U8*)key, &klen, &is_utf8);
591         if (is_utf8)
592             flags |= HVhek_UTF8;
593         else
594             flags &= ~HVhek_UTF8;
595         if (key != keysave) {
596             if (flags & HVhek_FREEKEY)
597                 Safefree(keysave);
598             flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
599             /* If the caller calculated a hash, it was on the sequence of
600                octets that are the UTF-8 form. We've now changed the sequence
601                of octets stored to that of the equivalent byte representation,
602                so the hash we need is different.  */
603             hash = 0;
604         }
605     }
606
607     if (HvREHASH(hv) || (!hash && !(keysv && (SvIsCOW_shared_hash(keysv)))))
608         PERL_HASH_INTERNAL_(hash, key, klen, HvREHASH(hv));
609     else if (!hash)
610         hash = SvSHARED_HASH(keysv);
611
612     /* We don't have a pointer to the hv, so we have to replicate the
613        flag into every HEK, so that hv_iterkeysv can see it.
614        And yes, you do need this even though you are not "storing" because
615        you can flip the flags below if doing an lval lookup.  (And that
616        was put in to give the semantics Andreas was expecting.)  */
617     if (HvREHASH(hv))
618         flags |= HVhek_REHASH;
619
620     masked_flags = (flags & HVhek_MASK);
621
622 #ifdef DYNAMIC_ENV_FETCH
623     if (!HvARRAY(hv)) entry = NULL;
624     else
625 #endif
626     {
627         entry = (HvARRAY(hv))[hash & (I32) HvMAX(hv)];
628     }
629     for (; entry; entry = HeNEXT(entry)) {
630         if (HeHASH(entry) != hash)              /* strings can't be equal */
631             continue;
632         if (HeKLEN(entry) != (I32)klen)
633             continue;
634         if (HeKEY(entry) != key && memNE(HeKEY(entry),key,klen))        /* is this it? */
635             continue;
636         if ((HeKFLAGS(entry) ^ masked_flags) & HVhek_UTF8)
637             continue;
638
639         if (action & (HV_FETCH_LVALUE|HV_FETCH_ISSTORE)) {
640             if (HeKFLAGS(entry) != masked_flags) {
641                 /* We match if HVhek_UTF8 bit in our flags and hash key's
642                    match.  But if entry was set previously with HVhek_WASUTF8
643                    and key now doesn't (or vice versa) then we should change
644                    the key's flag, as this is assignment.  */
645                 if (HvSHAREKEYS(hv)) {
646                     /* Need to swap the key we have for a key with the flags we
647                        need. As keys are shared we can't just write to the
648                        flag, so we share the new one, unshare the old one.  */
649                     HEK * const new_hek = share_hek_flags(key, klen, hash,
650                                                    masked_flags);
651                     unshare_hek (HeKEY_hek(entry));
652                     HeKEY_hek(entry) = new_hek;
653                 }
654                 else if (hv == PL_strtab) {
655                     /* PL_strtab is usually the only hash without HvSHAREKEYS,
656                        so putting this test here is cheap  */
657                     if (flags & HVhek_FREEKEY)
658                         Safefree(key);
659                     Perl_croak(aTHX_ S_strtab_error,
660                                action & HV_FETCH_LVALUE ? "fetch" : "store");
661                 }
662                 else
663                     HeKFLAGS(entry) = masked_flags;
664                 if (masked_flags & HVhek_ENABLEHVKFLAGS)
665                     HvHASKFLAGS_on(hv);
666             }
667             if (HeVAL(entry) == &PL_sv_placeholder) {
668                 /* yes, can store into placeholder slot */
669                 if (action & HV_FETCH_LVALUE) {
670                     if (SvMAGICAL(hv)) {
671                         /* This preserves behaviour with the old hv_fetch
672                            implementation which at this point would bail out
673                            with a break; (at "if we find a placeholder, we
674                            pretend we haven't found anything")
675
676                            That break mean that if a placeholder were found, it
677                            caused a call into hv_store, which in turn would
678                            check magic, and if there is no magic end up pretty
679                            much back at this point (in hv_store's code).  */
680                         break;
681                     }
682                     /* LVAL fetch which actually needs a store.  */
683                     val = newSV(0);
684                     HvPLACEHOLDERS(hv)--;
685                 } else {
686                     /* store */
687                     if (val != &PL_sv_placeholder)
688                         HvPLACEHOLDERS(hv)--;
689                 }
690                 HeVAL(entry) = val;
691             } else if (action & HV_FETCH_ISSTORE) {
692                 SvREFCNT_dec(HeVAL(entry));
693                 HeVAL(entry) = val;
694             }
695         } else if (HeVAL(entry) == &PL_sv_placeholder) {
696             /* if we find a placeholder, we pretend we haven't found
697                anything */
698             break;
699         }
700         if (flags & HVhek_FREEKEY)
701             Safefree(key);
702         if (return_svp) {
703             return entry ? (void *) &HeVAL(entry) : NULL;
704         }
705         return entry;
706     }
707 #ifdef DYNAMIC_ENV_FETCH  /* %ENV lookup?  If so, try to fetch the value now */
708     if (!(action & HV_FETCH_ISSTORE) 
709         && SvRMAGICAL((const SV *)hv)
710         && mg_find((const SV *)hv, PERL_MAGIC_env)) {
711         unsigned long len;
712         const char * const env = PerlEnv_ENVgetenv_len(key,&len);
713         if (env) {
714             sv = newSVpvn(env,len);
715             SvTAINTED_on(sv);
716             return hv_common(hv, keysv, key, klen, flags,
717                              HV_FETCH_ISSTORE|HV_DISABLE_UVAR_XKEY|return_svp,
718                              sv, hash);
719         }
720     }
721 #endif
722
723     if (!entry && SvREADONLY(hv) && !(action & HV_FETCH_ISEXISTS)) {
724         hv_notallowed(flags, key, klen,
725                         "Attempt to access disallowed key '%"SVf"' in"
726                         " a restricted hash");
727     }
728     if (!(action & (HV_FETCH_LVALUE|HV_FETCH_ISSTORE))) {
729         /* Not doing some form of store, so return failure.  */
730         if (flags & HVhek_FREEKEY)
731             Safefree(key);
732         return NULL;
733     }
734     if (action & HV_FETCH_LVALUE) {
735         val = action & HV_FETCH_EMPTY_HE ? NULL : newSV(0);
736         if (SvMAGICAL(hv)) {
737             /* At this point the old hv_fetch code would call to hv_store,
738                which in turn might do some tied magic. So we need to make that
739                magic check happen.  */
740             /* gonna assign to this, so it better be there */
741             /* If a fetch-as-store fails on the fetch, then the action is to
742                recurse once into "hv_store". If we didn't do this, then that
743                recursive call would call the key conversion routine again.
744                However, as we replace the original key with the converted
745                key, this would result in a double conversion, which would show
746                up as a bug if the conversion routine is not idempotent.  */
747             return hv_common(hv, keysv, key, klen, flags,
748                              HV_FETCH_ISSTORE|HV_DISABLE_UVAR_XKEY|return_svp,
749                              val, hash);
750             /* XXX Surely that could leak if the fetch-was-store fails?
751                Just like the hv_fetch.  */
752         }
753     }
754
755     /* Welcome to hv_store...  */
756
757     if (!HvARRAY(hv)) {
758         /* Not sure if we can get here.  I think the only case of oentry being
759            NULL is for %ENV with dynamic env fetch.  But that should disappear
760            with magic in the previous code.  */
761         char *array;
762         Newxz(array,
763              PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max+1 /* HvMAX(hv)+1 */),
764              char);
765         HvARRAY(hv) = (HE**)array;
766     }
767
768     oentry = &(HvARRAY(hv))[hash & (I32) xhv->xhv_max];
769
770     entry = new_HE();
771     /* share_hek_flags will do the free for us.  This might be considered
772        bad API design.  */
773     if (HvSHAREKEYS(hv))
774         HeKEY_hek(entry) = share_hek_flags(key, klen, hash, flags);
775     else if (hv == PL_strtab) {
776         /* PL_strtab is usually the only hash without HvSHAREKEYS, so putting
777            this test here is cheap  */
778         if (flags & HVhek_FREEKEY)
779             Safefree(key);
780         Perl_croak(aTHX_ S_strtab_error,
781                    action & HV_FETCH_LVALUE ? "fetch" : "store");
782     }
783     else                                       /* gotta do the real thing */
784         HeKEY_hek(entry) = save_hek_flags(key, klen, hash, flags);
785     HeVAL(entry) = val;
786     HeNEXT(entry) = *oentry;
787     *oentry = entry;
788
789     if (val == &PL_sv_placeholder)
790         HvPLACEHOLDERS(hv)++;
791     if (masked_flags & HVhek_ENABLEHVKFLAGS)
792         HvHASKFLAGS_on(hv);
793
794     {
795         const HE *counter = HeNEXT(entry);
796
797         xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */
798         if (!counter) {                         /* initial entry? */
799         } else if (xhv->xhv_keys > xhv->xhv_max) {
800                 /* Use only the old HvUSEDKEYS(hv) > HvMAX(hv) condition to limit
801                    bucket splits on a rehashed hash, as we're not going to
802                    split it again, and if someone is lucky (evil) enough to
803                    get all the keys in one list they could exhaust our memory
804                    as we repeatedly double the number of buckets on every
805                    entry. Linear search feels a less worse thing to do.  */
806             hsplit(hv);
807         } else if(!HvREHASH(hv)) {
808             U32 n_links = 1;
809
810             while ((counter = HeNEXT(counter)))
811                 n_links++;
812
813             if (n_links > HV_MAX_LENGTH_BEFORE_SPLIT) {
814                 hsplit(hv);
815             }
816         }
817     }
818
819     if (return_svp) {
820         return entry ? (void *) &HeVAL(entry) : NULL;
821     }
822     return (void *) entry;
823 }
824
825 STATIC void
826 S_hv_magic_check(HV *hv, bool *needs_copy, bool *needs_store)
827 {
828     const MAGIC *mg = SvMAGIC(hv);
829
830     PERL_ARGS_ASSERT_HV_MAGIC_CHECK;
831
832     *needs_copy = FALSE;
833     *needs_store = TRUE;
834     while (mg) {
835         if (isUPPER(mg->mg_type)) {
836             *needs_copy = TRUE;
837             if (mg->mg_type == PERL_MAGIC_tied) {
838                 *needs_store = FALSE;
839                 return; /* We've set all there is to set. */
840             }
841         }
842         mg = mg->mg_moremagic;
843     }
844 }
845
846 /*
847 =for apidoc hv_scalar
848
849 Evaluates the hash in scalar context and returns the result. Handles magic when the hash is tied.
850
851 =cut
852 */
853
854 SV *
855 Perl_hv_scalar(pTHX_ HV *hv)
856 {
857     SV *sv;
858
859     PERL_ARGS_ASSERT_HV_SCALAR;
860
861     if (SvRMAGICAL(hv)) {
862         MAGIC * const mg = mg_find((const SV *)hv, PERL_MAGIC_tied);
863         if (mg)
864             return magic_scalarpack(hv, mg);
865     }
866
867     sv = sv_newmortal();
868     if (HvTOTALKEYS((const HV *)hv)) 
869         Perl_sv_setpvf(aTHX_ sv, "%ld/%ld",
870                 (long)HvFILL(hv), (long)HvMAX(hv) + 1);
871     else
872         sv_setiv(sv, 0);
873     
874     return sv;
875 }
876
877 /*
878 =for apidoc hv_delete
879
880 Deletes a key/value pair in the hash.  The value's SV is removed from the
881 hash, made mortal, and returned to the caller.  The C<klen> is the length of
882 the key.  The C<flags> value will normally be zero; if set to G_DISCARD then
883 NULL will be returned.  NULL will also be returned if the key is not found.
884
885 =for apidoc hv_delete_ent
886
887 Deletes a key/value pair in the hash.  The value SV is removed from the hash,
888 made mortal, and returned to the caller.  The C<flags> value will normally be
889 zero; if set to G_DISCARD then NULL will be returned.  NULL will also be
890 returned if the key is not found.  C<hash> can be a valid precomputed hash
891 value, or 0 to ask for it to be computed.
892
893 =cut
894 */
895
896 STATIC SV *
897 S_hv_delete_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen,
898                    int k_flags, I32 d_flags, U32 hash)
899 {
900     dVAR;
901     register XPVHV* xhv;
902     register HE *entry;
903     register HE **oentry;
904     bool is_utf8 = (k_flags & HVhek_UTF8) ? TRUE : FALSE;
905     int masked_flags;
906
907     if (SvRMAGICAL(hv)) {
908         bool needs_copy;
909         bool needs_store;
910         hv_magic_check (hv, &needs_copy, &needs_store);
911
912         if (needs_copy) {
913             SV *sv;
914             entry = (HE *) hv_common(hv, keysv, key, klen,
915                                      k_flags & ~HVhek_FREEKEY,
916                                      HV_FETCH_LVALUE|HV_DISABLE_UVAR_XKEY,
917                                      NULL, hash);
918             sv = entry ? HeVAL(entry) : NULL;
919             if (sv) {
920                 if (SvMAGICAL(sv)) {
921                     mg_clear(sv);
922                 }
923                 if (!needs_store) {
924                     if (mg_find(sv, PERL_MAGIC_tiedelem)) {
925                         /* No longer an element */
926                         sv_unmagic(sv, PERL_MAGIC_tiedelem);
927                         return sv;
928                     }           
929                     return NULL;                /* element cannot be deleted */
930                 }
931 #ifdef ENV_IS_CASELESS
932                 else if (mg_find((const SV *)hv, PERL_MAGIC_env)) {
933                     /* XXX This code isn't UTF8 clean.  */
934                     keysv = newSVpvn_flags(key, klen, SVs_TEMP);
935                     if (k_flags & HVhek_FREEKEY) {
936                         Safefree(key);
937                     }
938                     key = strupr(SvPVX(keysv));
939                     is_utf8 = 0;
940                     k_flags = 0;
941                     hash = 0;
942                 }
943 #endif
944             }
945         }
946     }
947     xhv = (XPVHV*)SvANY(hv);
948     if (!HvARRAY(hv))
949         return NULL;
950
951     if (is_utf8) {
952         const char * const keysave = key;
953         key = (char*)bytes_from_utf8((U8*)key, &klen, &is_utf8);
954
955         if (is_utf8)
956             k_flags |= HVhek_UTF8;
957         else
958             k_flags &= ~HVhek_UTF8;
959         if (key != keysave) {
960             if (k_flags & HVhek_FREEKEY) {
961                 /* This shouldn't happen if our caller does what we expect,
962                    but strictly the API allows it.  */
963                 Safefree(keysave);
964             }
965             k_flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
966         }
967         HvHASKFLAGS_on(MUTABLE_SV(hv));
968     }
969
970     if (HvREHASH(hv) || (!hash && !(keysv && (SvIsCOW_shared_hash(keysv)))))
971         PERL_HASH_INTERNAL_(hash, key, klen, HvREHASH(hv));
972     else if (!hash)
973         hash = SvSHARED_HASH(keysv);
974
975     masked_flags = (k_flags & HVhek_MASK);
976
977     oentry = &(HvARRAY(hv))[hash & (I32) HvMAX(hv)];
978     entry = *oentry;
979     for (; entry; oentry = &HeNEXT(entry), entry = *oentry) {
980         SV *sv;
981         U8 mro_changes = 0; /* 1 = isa; 2 = package moved */
982         GV *gv = NULL;
983         HV *stash = NULL;
984
985         if (HeHASH(entry) != hash)              /* strings can't be equal */
986             continue;
987         if (HeKLEN(entry) != (I32)klen)
988             continue;
989         if (HeKEY(entry) != key && memNE(HeKEY(entry),key,klen))        /* is this it? */
990             continue;
991         if ((HeKFLAGS(entry) ^ masked_flags) & HVhek_UTF8)
992             continue;
993
994         if (hv == PL_strtab) {
995             if (k_flags & HVhek_FREEKEY)
996                 Safefree(key);
997             Perl_croak(aTHX_ S_strtab_error, "delete");
998         }
999
1000         /* if placeholder is here, it's already been deleted.... */
1001         if (HeVAL(entry) == &PL_sv_placeholder) {
1002             if (k_flags & HVhek_FREEKEY)
1003                 Safefree(key);
1004             return NULL;
1005         }
1006         if (SvREADONLY(hv) && HeVAL(entry) && SvREADONLY(HeVAL(entry))
1007          && !SvIsCOW(HeVAL(entry))) {
1008             hv_notallowed(k_flags, key, klen,
1009                             "Attempt to delete readonly key '%"SVf"' from"
1010                             " a restricted hash");
1011         }
1012         if (k_flags & HVhek_FREEKEY)
1013             Safefree(key);
1014
1015         /* If this is a stash and the key ends with ::, then someone is 
1016          * deleting a package.
1017          */
1018         if (HeVAL(entry) && HvENAME_get(hv)) {
1019                 gv = (GV *)HeVAL(entry);
1020                 if (keysv) key = SvPV(keysv, klen);
1021                 if ((
1022                      (klen > 1 && key[klen-2] == ':' && key[klen-1] == ':')
1023                       ||
1024                      (klen == 1 && key[0] == ':')
1025                     )
1026                  && (klen != 6 || hv!=PL_defstash || memNE(key,"main::",6))
1027                  && SvTYPE(gv) == SVt_PVGV && (stash = GvHV((GV *)gv))
1028                  && HvENAME_get(stash)) {
1029                         /* A previous version of this code checked that the
1030                          * GV was still in the symbol table by fetching the
1031                          * GV with its name. That is not necessary (and
1032                          * sometimes incorrect), as HvENAME cannot be set
1033                          * on hv if it is not in the symtab. */
1034                         mro_changes = 2;
1035                         /* Hang on to it for a bit. */
1036                         SvREFCNT_inc_simple_void_NN(
1037                          sv_2mortal((SV *)gv)
1038                         );
1039                 }
1040                 else if (klen == 3 && strnEQ(key, "ISA", 3))
1041                     mro_changes = 1;
1042         }
1043
1044         if (d_flags & G_DISCARD) {
1045             sv = HeVAL(entry);
1046             if (sv) {
1047                 /* deletion of method from stash */
1048                 if (isGV(sv) && isGV_with_GP(sv) && GvCVu(sv)
1049                  && HvENAME_get(hv))
1050                     mro_method_changed_in(hv);
1051                 SvREFCNT_dec(sv);
1052                 sv = NULL;
1053             }
1054         } else sv = sv_2mortal(HeVAL(entry));
1055         HeVAL(entry) = &PL_sv_placeholder;
1056
1057         /*
1058          * If a restricted hash, rather than really deleting the entry, put
1059          * a placeholder there. This marks the key as being "approved", so
1060          * we can still access via not-really-existing key without raising
1061          * an error.
1062          */
1063         if (SvREADONLY(hv))
1064             /* We'll be saving this slot, so the number of allocated keys
1065              * doesn't go down, but the number placeholders goes up */
1066             HvPLACEHOLDERS(hv)++;
1067         else {
1068             *oentry = HeNEXT(entry);
1069             if (SvOOK(hv) && entry == HvAUX(hv)->xhv_eiter /* HvEITER(hv) */)
1070                 HvLAZYDEL_on(hv);
1071             else {
1072                 if (SvOOK(hv) && HvLAZYDEL(hv) &&
1073                     entry == HeNEXT(HvAUX(hv)->xhv_eiter))
1074                     HeNEXT(HvAUX(hv)->xhv_eiter) = HeNEXT(entry);
1075                 hv_free_ent(hv, entry);
1076             }
1077             xhv->xhv_keys--; /* HvTOTALKEYS(hv)-- */
1078             if (xhv->xhv_keys == 0)
1079                 HvHASKFLAGS_off(hv);
1080         }
1081
1082         if (mro_changes == 1) mro_isa_changed_in(hv);
1083         else if (mro_changes == 2)
1084             mro_package_moved(NULL, stash, gv, 1);
1085
1086         return sv;
1087     }
1088     if (SvREADONLY(hv)) {
1089         hv_notallowed(k_flags, key, klen,
1090                         "Attempt to delete disallowed key '%"SVf"' from"
1091                         " a restricted hash");
1092     }
1093
1094     if (k_flags & HVhek_FREEKEY)
1095         Safefree(key);
1096     return NULL;
1097 }
1098
1099 STATIC void
1100 S_hsplit(pTHX_ HV *hv)
1101 {
1102     dVAR;
1103     register XPVHV* const xhv = (XPVHV*)SvANY(hv);
1104     const I32 oldsize = (I32) xhv->xhv_max+1; /* HvMAX(hv)+1 (sick) */
1105     register I32 newsize = oldsize * 2;
1106     register I32 i;
1107     char *a = (char*) HvARRAY(hv);
1108     register HE **aep;
1109     int longest_chain = 0;
1110     int was_shared;
1111
1112     PERL_ARGS_ASSERT_HSPLIT;
1113
1114     /*PerlIO_printf(PerlIO_stderr(), "hsplit called for %p which had %d\n",
1115       (void*)hv, (int) oldsize);*/
1116
1117     if (HvPLACEHOLDERS_get(hv) && !SvREADONLY(hv)) {
1118       /* Can make this clear any placeholders first for non-restricted hashes,
1119          even though Storable rebuilds restricted hashes by putting in all the
1120          placeholders (first) before turning on the readonly flag, because
1121          Storable always pre-splits the hash.  */
1122       hv_clear_placeholders(hv);
1123     }
1124                
1125     PL_nomemok = TRUE;
1126 #if defined(STRANGE_MALLOC) || defined(MYMALLOC)
1127     Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1128           + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1129     if (!a) {
1130       PL_nomemok = FALSE;
1131       return;
1132     }
1133     if (SvOOK(hv)) {
1134         Move(&a[oldsize * sizeof(HE*)], &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1135     }
1136 #else
1137     Newx(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1138         + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1139     if (!a) {
1140       PL_nomemok = FALSE;
1141       return;
1142     }
1143     Copy(HvARRAY(hv), a, oldsize * sizeof(HE*), char);
1144     if (SvOOK(hv)) {
1145         Copy(HvAUX(hv), &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1146     }
1147     Safefree(HvARRAY(hv));
1148 #endif
1149
1150     PL_nomemok = FALSE;
1151     Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char);     /* zero 2nd half*/
1152     xhv->xhv_max = --newsize;   /* HvMAX(hv) = --newsize */
1153     HvARRAY(hv) = (HE**) a;
1154     aep = (HE**)a;
1155
1156     for (i=0; i<oldsize; i++,aep++) {
1157         int left_length = 0;
1158         int right_length = 0;
1159         HE **oentry = aep;
1160         HE *entry = *aep;
1161         register HE **bep;
1162
1163         if (!entry)                             /* non-existent */
1164             continue;
1165         bep = aep+oldsize;
1166         do {
1167             if ((HeHASH(entry) & newsize) != (U32)i) {
1168                 *oentry = HeNEXT(entry);
1169                 HeNEXT(entry) = *bep;
1170                 *bep = entry;
1171                 right_length++;
1172             }
1173             else {
1174                 oentry = &HeNEXT(entry);
1175                 left_length++;
1176             }
1177             entry = *oentry;
1178         } while (entry);
1179         /* I think we don't actually need to keep track of the longest length,
1180            merely flag if anything is too long. But for the moment while
1181            developing this code I'll track it.  */
1182         if (left_length > longest_chain)
1183             longest_chain = left_length;
1184         if (right_length > longest_chain)
1185             longest_chain = right_length;
1186     }
1187
1188
1189     /* Pick your policy for "hashing isn't working" here:  */
1190     if (longest_chain <= HV_MAX_LENGTH_BEFORE_SPLIT /* split worked?  */
1191         || HvREHASH(hv)) {
1192         return;
1193     }
1194
1195     if (hv == PL_strtab) {
1196         /* Urg. Someone is doing something nasty to the string table.
1197            Can't win.  */
1198         return;
1199     }
1200
1201     /* Awooga. Awooga. Pathological data.  */
1202     /*PerlIO_printf(PerlIO_stderr(), "%p %d of %d with %d/%d buckets\n", (void*)hv,
1203       longest_chain, HvTOTALKEYS(hv), HvFILL(hv),  1+HvMAX(hv));*/
1204
1205     ++newsize;
1206     Newxz(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1207          + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1208     if (SvOOK(hv)) {
1209         Copy(HvAUX(hv), &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1210     }
1211
1212     was_shared = HvSHAREKEYS(hv);
1213
1214     HvSHAREKEYS_off(hv);
1215     HvREHASH_on(hv);
1216
1217     aep = HvARRAY(hv);
1218
1219     for (i=0; i<newsize; i++,aep++) {
1220         register HE *entry = *aep;
1221         while (entry) {
1222             /* We're going to trash this HE's next pointer when we chain it
1223                into the new hash below, so store where we go next.  */
1224             HE * const next = HeNEXT(entry);
1225             UV hash;
1226             HE **bep;
1227
1228             /* Rehash it */
1229             PERL_HASH_INTERNAL(hash, HeKEY(entry), HeKLEN(entry));
1230
1231             if (was_shared) {
1232                 /* Unshare it.  */
1233                 HEK * const new_hek
1234                     = save_hek_flags(HeKEY(entry), HeKLEN(entry),
1235                                      hash, HeKFLAGS(entry));
1236                 unshare_hek (HeKEY_hek(entry));
1237                 HeKEY_hek(entry) = new_hek;
1238             } else {
1239                 /* Not shared, so simply write the new hash in. */
1240                 HeHASH(entry) = hash;
1241             }
1242             /*PerlIO_printf(PerlIO_stderr(), "%d ", HeKFLAGS(entry));*/
1243             HEK_REHASH_on(HeKEY_hek(entry));
1244             /*PerlIO_printf(PerlIO_stderr(), "%d\n", HeKFLAGS(entry));*/
1245
1246             /* Copy oentry to the correct new chain.  */
1247             bep = ((HE**)a) + (hash & (I32) xhv->xhv_max);
1248             HeNEXT(entry) = *bep;
1249             *bep = entry;
1250
1251             entry = next;
1252         }
1253     }
1254     Safefree (HvARRAY(hv));
1255     HvARRAY(hv) = (HE **)a;
1256 }
1257
1258 void
1259 Perl_hv_ksplit(pTHX_ HV *hv, IV newmax)
1260 {
1261     dVAR;
1262     register XPVHV* xhv = (XPVHV*)SvANY(hv);
1263     const I32 oldsize = (I32) xhv->xhv_max+1; /* HvMAX(hv)+1 (sick) */
1264     register I32 newsize;
1265     register I32 i;
1266     register char *a;
1267     register HE **aep;
1268
1269     PERL_ARGS_ASSERT_HV_KSPLIT;
1270
1271     newsize = (I32) newmax;                     /* possible truncation here */
1272     if (newsize != newmax || newmax <= oldsize)
1273         return;
1274     while ((newsize & (1 + ~newsize)) != newsize) {
1275         newsize &= ~(newsize & (1 + ~newsize)); /* get proper power of 2 */
1276     }
1277     if (newsize < newmax)
1278         newsize *= 2;
1279     if (newsize < newmax)
1280         return;                                 /* overflow detection */
1281
1282     a = (char *) HvARRAY(hv);
1283     if (a) {
1284         PL_nomemok = TRUE;
1285 #if defined(STRANGE_MALLOC) || defined(MYMALLOC)
1286         Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1287               + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1288         if (!a) {
1289           PL_nomemok = FALSE;
1290           return;
1291         }
1292         if (SvOOK(hv)) {
1293             Copy(&a[oldsize * sizeof(HE*)], &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1294         }
1295 #else
1296         Newx(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1297             + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1298         if (!a) {
1299           PL_nomemok = FALSE;
1300           return;
1301         }
1302         Copy(HvARRAY(hv), a, oldsize * sizeof(HE*), char);
1303         if (SvOOK(hv)) {
1304             Copy(HvAUX(hv), &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1305         }
1306         Safefree(HvARRAY(hv));
1307 #endif
1308         PL_nomemok = FALSE;
1309         Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char); /* zero 2nd half*/
1310     }
1311     else {
1312         Newxz(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
1313     }
1314     xhv->xhv_max = --newsize;   /* HvMAX(hv) = --newsize */
1315     HvARRAY(hv) = (HE **) a;
1316     if (!xhv->xhv_keys /* !HvTOTALKEYS(hv) */)  /* skip rest if no entries */
1317         return;
1318
1319     aep = (HE**)a;
1320     for (i=0; i<oldsize; i++,aep++) {
1321         HE **oentry = aep;
1322         HE *entry = *aep;
1323
1324         if (!entry)                             /* non-existent */
1325             continue;
1326         do {
1327             register I32 j = (HeHASH(entry) & newsize);
1328
1329             if (j != i) {
1330                 j -= i;
1331                 *oentry = HeNEXT(entry);
1332                 HeNEXT(entry) = aep[j];
1333                 aep[j] = entry;
1334             }
1335             else
1336                 oentry = &HeNEXT(entry);
1337             entry = *oentry;
1338         } while (entry);
1339     }
1340 }
1341
1342 HV *
1343 Perl_newHVhv(pTHX_ HV *ohv)
1344 {
1345     dVAR;
1346     HV * const hv = newHV();
1347     STRLEN hv_max;
1348
1349     if (!ohv || !HvTOTALKEYS(ohv))
1350         return hv;
1351     hv_max = HvMAX(ohv);
1352
1353     if (!SvMAGICAL((const SV *)ohv)) {
1354         /* It's an ordinary hash, so copy it fast. AMS 20010804 */
1355         STRLEN i;
1356         const bool shared = !!HvSHAREKEYS(ohv);
1357         HE **ents, ** const oents = (HE **)HvARRAY(ohv);
1358         char *a;
1359         Newx(a, PERL_HV_ARRAY_ALLOC_BYTES(hv_max+1), char);
1360         ents = (HE**)a;
1361
1362         /* In each bucket... */
1363         for (i = 0; i <= hv_max; i++) {
1364             HE *prev = NULL;
1365             HE *oent = oents[i];
1366
1367             if (!oent) {
1368                 ents[i] = NULL;
1369                 continue;
1370             }
1371
1372             /* Copy the linked list of entries. */
1373             for (; oent; oent = HeNEXT(oent)) {
1374                 const U32 hash   = HeHASH(oent);
1375                 const char * const key = HeKEY(oent);
1376                 const STRLEN len = HeKLEN(oent);
1377                 const int flags  = HeKFLAGS(oent);
1378                 HE * const ent   = new_HE();
1379                 SV *const val    = HeVAL(oent);
1380
1381                 HeVAL(ent) = SvIMMORTAL(val) ? val : newSVsv(val);
1382                 HeKEY_hek(ent)
1383                     = shared ? share_hek_flags(key, len, hash, flags)
1384                              :  save_hek_flags(key, len, hash, flags);
1385                 if (prev)
1386                     HeNEXT(prev) = ent;
1387                 else
1388                     ents[i] = ent;
1389                 prev = ent;
1390                 HeNEXT(ent) = NULL;
1391             }
1392         }
1393
1394         HvMAX(hv)   = hv_max;
1395         HvTOTALKEYS(hv)  = HvTOTALKEYS(ohv);
1396         HvARRAY(hv) = ents;
1397     } /* not magical */
1398     else {
1399         /* Iterate over ohv, copying keys and values one at a time. */
1400         HE *entry;
1401         const I32 riter = HvRITER_get(ohv);
1402         HE * const eiter = HvEITER_get(ohv);
1403         STRLEN hv_fill = HvFILL(ohv);
1404
1405         /* Can we use fewer buckets? (hv_max is always 2^n-1) */
1406         while (hv_max && hv_max + 1 >= hv_fill * 2)
1407             hv_max = hv_max / 2;
1408         HvMAX(hv) = hv_max;
1409
1410         hv_iterinit(ohv);
1411         while ((entry = hv_iternext_flags(ohv, 0))) {
1412             SV *const val = HeVAL(entry);
1413             (void)hv_store_flags(hv, HeKEY(entry), HeKLEN(entry),
1414                                  SvIMMORTAL(val) ? val : newSVsv(val),
1415                                  HeHASH(entry), HeKFLAGS(entry));
1416         }
1417         HvRITER_set(ohv, riter);
1418         HvEITER_set(ohv, eiter);
1419     }
1420
1421     return hv;
1422 }
1423
1424 /*
1425 =for apidoc Am|HV *|hv_copy_hints_hv|HV *ohv
1426
1427 A specialised version of L</newHVhv> for copying C<%^H>.  I<ohv> must be
1428 a pointer to a hash (which may have C<%^H> magic, but should be generally
1429 non-magical), or C<NULL> (interpreted as an empty hash).  The content
1430 of I<ohv> is copied to a new hash, which has the C<%^H>-specific magic
1431 added to it.  A pointer to the new hash is returned.
1432
1433 =cut
1434 */
1435
1436 HV *
1437 Perl_hv_copy_hints_hv(pTHX_ HV *const ohv)
1438 {
1439     HV * const hv = newHV();
1440
1441     if (ohv && HvTOTALKEYS(ohv)) {
1442         STRLEN hv_max = HvMAX(ohv);
1443         STRLEN hv_fill = HvFILL(ohv);
1444         HE *entry;
1445         const I32 riter = HvRITER_get(ohv);
1446         HE * const eiter = HvEITER_get(ohv);
1447
1448         while (hv_max && hv_max + 1 >= hv_fill * 2)
1449             hv_max = hv_max / 2;
1450         HvMAX(hv) = hv_max;
1451
1452         hv_iterinit(ohv);
1453         while ((entry = hv_iternext_flags(ohv, 0))) {
1454             SV *const sv = newSVsv(HeVAL(entry));
1455             SV *heksv = newSVhek(HeKEY_hek(entry));
1456             sv_magic(sv, NULL, PERL_MAGIC_hintselem,
1457                      (char *)heksv, HEf_SVKEY);
1458             SvREFCNT_dec(heksv);
1459             (void)hv_store_flags(hv, HeKEY(entry), HeKLEN(entry),
1460                                  sv, HeHASH(entry), HeKFLAGS(entry));
1461         }
1462         HvRITER_set(ohv, riter);
1463         HvEITER_set(ohv, eiter);
1464     }
1465     hv_magic(hv, NULL, PERL_MAGIC_hints);
1466     return hv;
1467 }
1468
1469 /* like hv_free_ent, but returns the SV rather than freeing it */
1470 STATIC SV*
1471 S_hv_free_ent_ret(pTHX_ HV *hv, register HE *entry)
1472 {
1473     dVAR;
1474     SV *val;
1475
1476     PERL_ARGS_ASSERT_HV_FREE_ENT_RET;
1477
1478     if (!entry)
1479         return NULL;
1480     val = HeVAL(entry);
1481     if (val && isGV(val) && isGV_with_GP(val) && GvCVu(val) && HvENAME(hv))
1482         mro_method_changed_in(hv);      /* deletion of method from stash */
1483     if (HeKLEN(entry) == HEf_SVKEY) {
1484         SvREFCNT_dec(HeKEY_sv(entry));
1485         Safefree(HeKEY_hek(entry));
1486     }
1487     else if (HvSHAREKEYS(hv))
1488         unshare_hek(HeKEY_hek(entry));
1489     else
1490         Safefree(HeKEY_hek(entry));
1491     del_HE(entry);
1492     return val;
1493 }
1494
1495
1496 void
1497 Perl_hv_free_ent(pTHX_ HV *hv, register HE *entry)
1498 {
1499     dVAR;
1500     SV *val;
1501
1502     PERL_ARGS_ASSERT_HV_FREE_ENT;
1503
1504     if (!entry)
1505         return;
1506     val = hv_free_ent_ret(hv, entry);
1507     SvREFCNT_dec(val);
1508 }
1509
1510
1511 void
1512 Perl_hv_delayfree_ent(pTHX_ HV *hv, register HE *entry)
1513 {
1514     dVAR;
1515
1516     PERL_ARGS_ASSERT_HV_DELAYFREE_ENT;
1517
1518     if (!entry)
1519         return;
1520     /* SvREFCNT_inc to counter the SvREFCNT_dec in hv_free_ent  */
1521     sv_2mortal(SvREFCNT_inc(HeVAL(entry)));     /* free between statements */
1522     if (HeKLEN(entry) == HEf_SVKEY) {
1523         sv_2mortal(SvREFCNT_inc(HeKEY_sv(entry)));
1524     }
1525     hv_free_ent(hv, entry);
1526 }
1527
1528 /*
1529 =for apidoc hv_clear
1530
1531 Frees the all the elements of a hash, leaving it empty.
1532 The XS equivalent of %hash = (). See also L</hv_undef>.
1533
1534 =cut
1535 */
1536
1537 void
1538 Perl_hv_clear(pTHX_ HV *hv)
1539 {
1540     dVAR;
1541     register XPVHV* xhv;
1542     if (!hv)
1543         return;
1544
1545     DEBUG_A(Perl_hv_assert(aTHX_ hv));
1546
1547     xhv = (XPVHV*)SvANY(hv);
1548
1549     if (SvREADONLY(hv) && HvARRAY(hv) != NULL) {
1550         /* restricted hash: convert all keys to placeholders */
1551         STRLEN i;
1552         for (i = 0; i <= xhv->xhv_max; i++) {
1553             HE *entry = (HvARRAY(hv))[i];
1554             for (; entry; entry = HeNEXT(entry)) {
1555                 /* not already placeholder */
1556                 if (HeVAL(entry) != &PL_sv_placeholder) {
1557                     if (HeVAL(entry) && SvREADONLY(HeVAL(entry))
1558                      && !SvIsCOW(HeVAL(entry))) {
1559                         SV* const keysv = hv_iterkeysv(entry);
1560                         Perl_croak(aTHX_
1561                                    "Attempt to delete readonly key '%"SVf"' from a restricted hash",
1562                                    (void*)keysv);
1563                     }
1564                     SvREFCNT_dec(HeVAL(entry));
1565                     HeVAL(entry) = &PL_sv_placeholder;
1566                     HvPLACEHOLDERS(hv)++;
1567                 }
1568             }
1569         }
1570     }
1571     else {
1572         hfreeentries(hv);
1573         HvPLACEHOLDERS_set(hv, 0);
1574
1575         if (SvRMAGICAL(hv))
1576             mg_clear(MUTABLE_SV(hv));
1577
1578         HvHASKFLAGS_off(hv);
1579         HvREHASH_off(hv);
1580     }
1581     if (SvOOK(hv)) {
1582         if(HvENAME_get(hv))
1583             mro_isa_changed_in(hv);
1584         HvEITER_set(hv, NULL);
1585     }
1586 }
1587
1588 /*
1589 =for apidoc hv_clear_placeholders
1590
1591 Clears any placeholders from a hash.  If a restricted hash has any of its keys
1592 marked as readonly and the key is subsequently deleted, the key is not actually
1593 deleted but is marked by assigning it a value of &PL_sv_placeholder.  This tags
1594 it so it will be ignored by future operations such as iterating over the hash,
1595 but will still allow the hash to have a value reassigned to the key at some
1596 future point.  This function clears any such placeholder keys from the hash.
1597 See Hash::Util::lock_keys() for an example of its use.
1598
1599 =cut
1600 */
1601
1602 void
1603 Perl_hv_clear_placeholders(pTHX_ HV *hv)
1604 {
1605     dVAR;
1606     const U32 items = (U32)HvPLACEHOLDERS_get(hv);
1607
1608     PERL_ARGS_ASSERT_HV_CLEAR_PLACEHOLDERS;
1609
1610     if (items)
1611         clear_placeholders(hv, items);
1612 }
1613
1614 static void
1615 S_clear_placeholders(pTHX_ HV *hv, U32 items)
1616 {
1617     dVAR;
1618     I32 i;
1619
1620     PERL_ARGS_ASSERT_CLEAR_PLACEHOLDERS;
1621
1622     if (items == 0)
1623         return;
1624
1625     i = HvMAX(hv);
1626     do {
1627         /* Loop down the linked list heads  */
1628         HE **oentry = &(HvARRAY(hv))[i];
1629         HE *entry;
1630
1631         while ((entry = *oentry)) {
1632             if (HeVAL(entry) == &PL_sv_placeholder) {
1633                 *oentry = HeNEXT(entry);
1634                 if (entry == HvEITER_get(hv))
1635                     HvLAZYDEL_on(hv);
1636                 else {
1637                     if (SvOOK(hv) && HvLAZYDEL(hv) &&
1638                         entry == HeNEXT(HvAUX(hv)->xhv_eiter))
1639                         HeNEXT(HvAUX(hv)->xhv_eiter) = HeNEXT(entry);
1640                     hv_free_ent(hv, entry);
1641                 }
1642
1643                 if (--items == 0) {
1644                     /* Finished.  */
1645                     HvTOTALKEYS(hv) -= (IV)HvPLACEHOLDERS_get(hv);
1646                     if (HvUSEDKEYS(hv) == 0)
1647                         HvHASKFLAGS_off(hv);
1648                     HvPLACEHOLDERS_set(hv, 0);
1649                     return;
1650                 }
1651             } else {
1652                 oentry = &HeNEXT(entry);
1653             }
1654         }
1655     } while (--i >= 0);
1656     /* You can't get here, hence assertion should always fail.  */
1657     assert (items == 0);
1658     assert (0);
1659 }
1660
1661 STATIC void
1662 S_hfreeentries(pTHX_ HV *hv)
1663 {
1664     STRLEN index = 0;
1665     SV* sv;
1666
1667     PERL_ARGS_ASSERT_HFREEENTRIES;
1668
1669     while ( ((sv = Perl_hfree_next_entry(aTHX_ hv, &index))) ) {
1670         SvREFCNT_dec(sv);
1671     }
1672 }
1673
1674
1675 /* hfree_next_entry()
1676  * For use only by S_hfreeentries() and sv_clear().
1677  * Delete the next available HE from hv and return the associated SV.
1678  * Returns null on empty hash.
1679  * indexp is a pointer to the current index into HvARRAY. The index should
1680  * initially be set to 0. hfree_next_entry() may update it.  */
1681
1682 SV*
1683 Perl_hfree_next_entry(pTHX_ HV *hv, STRLEN *indexp)
1684 {
1685     struct xpvhv_aux *iter;
1686     HE *entry;
1687     HE ** array;
1688 #ifdef DEBUGGING
1689     STRLEN orig_index = *indexp;
1690 #endif
1691
1692     PERL_ARGS_ASSERT_HFREE_NEXT_ENTRY;
1693
1694     if (SvOOK(hv) && ((iter = HvAUX(hv)))
1695         && ((entry = iter->xhv_eiter)) )
1696     {
1697         /* the iterator may get resurrected after each
1698          * destructor call, so check each time */
1699         if (entry && HvLAZYDEL(hv)) {   /* was deleted earlier? */
1700             HvLAZYDEL_off(hv);
1701             hv_free_ent(hv, entry);
1702             /* warning: at this point HvARRAY may have been
1703              * re-allocated, HvMAX changed etc */
1704         }
1705         iter->xhv_riter = -1;   /* HvRITER(hv) = -1 */
1706         iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */
1707     }
1708
1709     if (!((XPVHV*)SvANY(hv))->xhv_keys)
1710         return NULL;
1711
1712     array = HvARRAY(hv);
1713     assert(array);
1714     while ( ! ((entry = array[*indexp])) ) {
1715         if ((*indexp)++ >= HvMAX(hv))
1716             *indexp = 0;
1717         assert(*indexp != orig_index);
1718     }
1719     array[*indexp] = HeNEXT(entry);
1720     ((XPVHV*) SvANY(hv))->xhv_keys--;
1721
1722     if (   PL_phase != PERL_PHASE_DESTRUCT && HvENAME(hv)
1723         && HeVAL(entry) && isGV(HeVAL(entry))
1724         && GvHV(HeVAL(entry)) && HvENAME(GvHV(HeVAL(entry)))
1725     ) {
1726         STRLEN klen;
1727         const char * const key = HePV(entry,klen);
1728         if ((klen > 1 && key[klen-1]==':' && key[klen-2]==':')
1729          || (klen == 1 && key[0] == ':')) {
1730             mro_package_moved(
1731              NULL, GvHV(HeVAL(entry)),
1732              (GV *)HeVAL(entry), 0
1733             );
1734         }
1735     }
1736     return hv_free_ent_ret(hv, entry);
1737 }
1738
1739
1740 /*
1741 =for apidoc hv_undef
1742
1743 Undefines the hash.  The XS equivalent of undef(%hash).
1744
1745 As well as freeing all the elements of the hash (like hv_clear()), this
1746 also frees any auxiliary data and storage associated with the hash.
1747 See also L</hv_clear>.
1748
1749 =cut
1750 */
1751
1752 void
1753 Perl_hv_undef_flags(pTHX_ HV *hv, U32 flags)
1754 {
1755     dVAR;
1756     register XPVHV* xhv;
1757     const char *name;
1758
1759     if (!hv)
1760         return;
1761     DEBUG_A(Perl_hv_assert(aTHX_ hv));
1762     xhv = (XPVHV*)SvANY(hv);
1763
1764     /* The name must be deleted before the call to hfreeeeentries so that
1765        CVs are anonymised properly. But the effective name must be pre-
1766        served until after that call (and only deleted afterwards if the
1767        call originated from sv_clear). For stashes with one name that is
1768        both the canonical name and the effective name, hv_name_set has to
1769        allocate an array for storing the effective name. We can skip that
1770        during global destruction, as it does not matter where the CVs point
1771        if they will be freed anyway. */
1772     /* note that the code following prior to hfreeentries is duplicated
1773      * in sv_clear(), and changes here should be done there too */
1774     if (PL_phase != PERL_PHASE_DESTRUCT && (name = HvNAME(hv))) {
1775         if (PL_stashcache)
1776             (void)hv_delete(PL_stashcache, name, HvNAMELEN_get(hv), G_DISCARD);
1777         hv_name_set(hv, NULL, 0, 0);
1778     }
1779     hfreeentries(hv);
1780     if (SvOOK(hv)) {
1781       struct xpvhv_aux * const aux = HvAUX(hv);
1782       struct mro_meta *meta;
1783
1784       if ((name = HvENAME_get(hv))) {
1785         if (PL_phase != PERL_PHASE_DESTRUCT)
1786             mro_isa_changed_in(hv);
1787         if (PL_stashcache)
1788             (void)hv_delete(
1789                     PL_stashcache, name, HvENAMELEN_get(hv), G_DISCARD
1790                   );
1791       }
1792
1793       /* If this call originated from sv_clear, then we must check for
1794        * effective names that need freeing, as well as the usual name. */
1795       name = HvNAME(hv);
1796       if (flags & HV_NAME_SETALL ? !!aux->xhv_name_u.xhvnameu_name : !!name) {
1797         if (name && PL_stashcache)
1798             (void)hv_delete(PL_stashcache, name, HvNAMELEN_get(hv), G_DISCARD);
1799         hv_name_set(hv, NULL, 0, flags);
1800       }
1801       if((meta = aux->xhv_mro_meta)) {
1802         if (meta->mro_linear_all) {
1803             SvREFCNT_dec(MUTABLE_SV(meta->mro_linear_all));
1804             meta->mro_linear_all = NULL;
1805             /* This is just acting as a shortcut pointer.  */
1806             meta->mro_linear_current = NULL;
1807         } else if (meta->mro_linear_current) {
1808             /* Only the current MRO is stored, so this owns the data.
1809              */
1810             SvREFCNT_dec(meta->mro_linear_current);
1811             meta->mro_linear_current = NULL;
1812         }
1813         if(meta->mro_nextmethod) SvREFCNT_dec(meta->mro_nextmethod);
1814         SvREFCNT_dec(meta->isa);
1815         Safefree(meta);
1816         aux->xhv_mro_meta = NULL;
1817       }
1818       if (!aux->xhv_name_u.xhvnameu_name && ! aux->xhv_backreferences)
1819         SvFLAGS(hv) &= ~SVf_OOK;
1820     }
1821     if (!SvOOK(hv)) {
1822         Safefree(HvARRAY(hv));
1823         xhv->xhv_max   = 7;     /* HvMAX(hv) = 7 (it's a normal hash) */
1824         HvARRAY(hv) = 0;
1825     }
1826     HvPLACEHOLDERS_set(hv, 0);
1827
1828     if (SvRMAGICAL(hv))
1829         mg_clear(MUTABLE_SV(hv));
1830 }
1831
1832 /*
1833 =for apidoc hv_fill
1834
1835 Returns the number of hash buckets that happen to be in use. This function is
1836 wrapped by the macro C<HvFILL>.
1837
1838 Previously this value was stored in the HV structure, rather than being
1839 calculated on demand.
1840
1841 =cut
1842 */
1843
1844 STRLEN
1845 Perl_hv_fill(pTHX_ HV const *const hv)
1846 {
1847     STRLEN count = 0;
1848     HE **ents = HvARRAY(hv);
1849
1850     PERL_ARGS_ASSERT_HV_FILL;
1851
1852     if (ents) {
1853         HE *const *const last = ents + HvMAX(hv);
1854         count = last + 1 - ents;
1855
1856         do {
1857             if (!*ents)
1858                 --count;
1859         } while (++ents <= last);
1860     }
1861     return count;
1862 }
1863
1864 static struct xpvhv_aux*
1865 S_hv_auxinit(HV *hv) {
1866     struct xpvhv_aux *iter;
1867     char *array;
1868
1869     PERL_ARGS_ASSERT_HV_AUXINIT;
1870
1871     if (!HvARRAY(hv)) {
1872         Newxz(array, PERL_HV_ARRAY_ALLOC_BYTES(HvMAX(hv) + 1)
1873             + sizeof(struct xpvhv_aux), char);
1874     } else {
1875         array = (char *) HvARRAY(hv);
1876         Renew(array, PERL_HV_ARRAY_ALLOC_BYTES(HvMAX(hv) + 1)
1877               + sizeof(struct xpvhv_aux), char);
1878     }
1879     HvARRAY(hv) = (HE**) array;
1880     /* SvOOK_on(hv) attacks the IV flags.  */
1881     SvFLAGS(hv) |= SVf_OOK;
1882     iter = HvAUX(hv);
1883
1884     iter->xhv_riter = -1;       /* HvRITER(hv) = -1 */
1885     iter->xhv_eiter = NULL;     /* HvEITER(hv) = NULL */
1886     iter->xhv_name_u.xhvnameu_name = 0;
1887     iter->xhv_name_count = 0;
1888     iter->xhv_backreferences = 0;
1889     iter->xhv_mro_meta = NULL;
1890     return iter;
1891 }
1892
1893 /*
1894 =for apidoc hv_iterinit
1895
1896 Prepares a starting point to traverse a hash table.  Returns the number of
1897 keys in the hash (i.e. the same as C<HvUSEDKEYS(hv)>).  The return value is
1898 currently only meaningful for hashes without tie magic.
1899
1900 NOTE: Before version 5.004_65, C<hv_iterinit> used to return the number of
1901 hash buckets that happen to be in use.  If you still need that esoteric
1902 value, you can get it through the macro C<HvFILL(hv)>.
1903
1904
1905 =cut
1906 */
1907
1908 I32
1909 Perl_hv_iterinit(pTHX_ HV *hv)
1910 {
1911     PERL_ARGS_ASSERT_HV_ITERINIT;
1912
1913     /* FIXME: Are we not NULL, or do we croak? Place bets now! */
1914
1915     if (!hv)
1916         Perl_croak(aTHX_ "Bad hash");
1917
1918     if (SvOOK(hv)) {
1919         struct xpvhv_aux * const iter = HvAUX(hv);
1920         HE * const entry = iter->xhv_eiter; /* HvEITER(hv) */
1921         if (entry && HvLAZYDEL(hv)) {   /* was deleted earlier? */
1922             HvLAZYDEL_off(hv);
1923             hv_free_ent(hv, entry);
1924         }
1925         iter->xhv_riter = -1;   /* HvRITER(hv) = -1 */
1926         iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */
1927     } else {
1928         hv_auxinit(hv);
1929     }
1930
1931     /* used to be xhv->xhv_fill before 5.004_65 */
1932     return HvTOTALKEYS(hv);
1933 }
1934
1935 I32 *
1936 Perl_hv_riter_p(pTHX_ HV *hv) {
1937     struct xpvhv_aux *iter;
1938
1939     PERL_ARGS_ASSERT_HV_RITER_P;
1940
1941     if (!hv)
1942         Perl_croak(aTHX_ "Bad hash");
1943
1944     iter = SvOOK(hv) ? HvAUX(hv) : hv_auxinit(hv);
1945     return &(iter->xhv_riter);
1946 }
1947
1948 HE **
1949 Perl_hv_eiter_p(pTHX_ HV *hv) {
1950     struct xpvhv_aux *iter;
1951
1952     PERL_ARGS_ASSERT_HV_EITER_P;
1953
1954     if (!hv)
1955         Perl_croak(aTHX_ "Bad hash");
1956
1957     iter = SvOOK(hv) ? HvAUX(hv) : hv_auxinit(hv);
1958     return &(iter->xhv_eiter);
1959 }
1960
1961 void
1962 Perl_hv_riter_set(pTHX_ HV *hv, I32 riter) {
1963     struct xpvhv_aux *iter;
1964
1965     PERL_ARGS_ASSERT_HV_RITER_SET;
1966
1967     if (!hv)
1968         Perl_croak(aTHX_ "Bad hash");
1969
1970     if (SvOOK(hv)) {
1971         iter = HvAUX(hv);
1972     } else {
1973         if (riter == -1)
1974             return;
1975
1976         iter = hv_auxinit(hv);
1977     }
1978     iter->xhv_riter = riter;
1979 }
1980
1981 void
1982 Perl_hv_eiter_set(pTHX_ HV *hv, HE *eiter) {
1983     struct xpvhv_aux *iter;
1984
1985     PERL_ARGS_ASSERT_HV_EITER_SET;
1986
1987     if (!hv)
1988         Perl_croak(aTHX_ "Bad hash");
1989
1990     if (SvOOK(hv)) {
1991         iter = HvAUX(hv);
1992     } else {
1993         /* 0 is the default so don't go malloc()ing a new structure just to
1994            hold 0.  */
1995         if (!eiter)
1996             return;
1997
1998         iter = hv_auxinit(hv);
1999     }
2000     iter->xhv_eiter = eiter;
2001 }
2002
2003 void
2004 Perl_hv_name_set(pTHX_ HV *hv, const char *name, U32 len, U32 flags)
2005 {
2006     dVAR;
2007     struct xpvhv_aux *iter;
2008     U32 hash;
2009     HEK **spot;
2010
2011     PERL_ARGS_ASSERT_HV_NAME_SET;
2012     PERL_UNUSED_ARG(flags);
2013
2014     if (len > I32_MAX)
2015         Perl_croak(aTHX_ "panic: hv name too long (%"UVuf")", (UV) len);
2016
2017     if (SvOOK(hv)) {
2018         iter = HvAUX(hv);
2019         if (iter->xhv_name_u.xhvnameu_name) {
2020             if(iter->xhv_name_count) {
2021               if(flags & HV_NAME_SETALL) {
2022                 HEK ** const name = HvAUX(hv)->xhv_name_u.xhvnameu_names;
2023                 HEK **hekp = name + (
2024                     iter->xhv_name_count < 0
2025                      ? -iter->xhv_name_count
2026                      :  iter->xhv_name_count
2027                    );
2028                 while(hekp-- > name+1) 
2029                     unshare_hek_or_pvn(*hekp, 0, 0, 0);
2030                 /* The first elem may be null. */
2031                 if(*name) unshare_hek_or_pvn(*name, 0, 0, 0);
2032                 Safefree(name);
2033                 spot = &iter->xhv_name_u.xhvnameu_name;
2034                 iter->xhv_name_count = 0;
2035               }
2036               else {
2037                 if(iter->xhv_name_count > 0) {
2038                     /* shift some things over */
2039                     Renew(
2040                      iter->xhv_name_u.xhvnameu_names, iter->xhv_name_count + 1, HEK *
2041                     );
2042                     spot = iter->xhv_name_u.xhvnameu_names;
2043                     spot[iter->xhv_name_count] = spot[1];
2044                     spot[1] = spot[0];
2045                     iter->xhv_name_count = -(iter->xhv_name_count + 1);
2046                 }
2047                 else if(*(spot = iter->xhv_name_u.xhvnameu_names)) {
2048                     unshare_hek_or_pvn(*spot, 0, 0, 0);
2049                 }
2050               }
2051             }
2052             else if (flags & HV_NAME_SETALL) {
2053                 unshare_hek_or_pvn(iter->xhv_name_u.xhvnameu_name, 0, 0, 0);
2054                 spot = &iter->xhv_name_u.xhvnameu_name;
2055             }
2056             else {
2057                 HEK * const existing_name = iter->xhv_name_u.xhvnameu_name;
2058                 Newx(iter->xhv_name_u.xhvnameu_names, 2, HEK *);
2059                 iter->xhv_name_count = -2;
2060                 spot = iter->xhv_name_u.xhvnameu_names;
2061                 spot[1] = existing_name;
2062             }
2063         }
2064         else { spot = &iter->xhv_name_u.xhvnameu_name; iter->xhv_name_count = 0; }
2065     } else {
2066         if (name == 0)
2067             return;
2068
2069         iter = hv_auxinit(hv);
2070         spot = &iter->xhv_name_u.xhvnameu_name;
2071     }
2072     PERL_HASH(hash, name, len);
2073     *spot = name ? share_hek(name, len, hash) : NULL;
2074 }
2075
2076 /*
2077 =for apidoc hv_ename_add
2078
2079 Adds a name to a stash's internal list of effective names. See
2080 C<hv_ename_delete>.
2081
2082 This is called when a stash is assigned to a new location in the symbol
2083 table.
2084
2085 =cut
2086 */
2087
2088 void
2089 Perl_hv_ename_add(pTHX_ HV *hv, const char *name, U32 len, U32 flags)
2090 {
2091     dVAR;
2092     struct xpvhv_aux *aux = SvOOK(hv) ? HvAUX(hv) : hv_auxinit(hv);
2093     U32 hash;
2094
2095     PERL_ARGS_ASSERT_HV_ENAME_ADD;
2096     PERL_UNUSED_ARG(flags);
2097
2098     if (len > I32_MAX)
2099         Perl_croak(aTHX_ "panic: hv name too long (%"UVuf")", (UV) len);
2100
2101     PERL_HASH(hash, name, len);
2102
2103     if (aux->xhv_name_count) {
2104         HEK ** const xhv_name = aux->xhv_name_u.xhvnameu_names;
2105         I32 count = aux->xhv_name_count;
2106         HEK **hekp = xhv_name + (count < 0 ? -count : count);
2107         while (hekp-- > xhv_name)
2108             if (
2109              HEK_LEN(*hekp) == (I32)len && memEQ(HEK_KEY(*hekp), name, len)
2110             ) {
2111                 if (hekp == xhv_name && count < 0)
2112                     aux->xhv_name_count = -count;
2113                 return;
2114             }
2115         if (count < 0) aux->xhv_name_count--, count = -count;
2116         else aux->xhv_name_count++;
2117         Renew(aux->xhv_name_u.xhvnameu_names, count + 1, HEK *);
2118         (aux->xhv_name_u.xhvnameu_names)[count] = share_hek(name, len, hash);
2119     }
2120     else {
2121         HEK *existing_name = aux->xhv_name_u.xhvnameu_name;
2122         if (
2123             existing_name && HEK_LEN(existing_name) == (I32)len
2124          && memEQ(HEK_KEY(existing_name), name, len)
2125         ) return;
2126         Newx(aux->xhv_name_u.xhvnameu_names, 2, HEK *);
2127         aux->xhv_name_count = existing_name ? 2 : -2;
2128         *aux->xhv_name_u.xhvnameu_names = existing_name;
2129         (aux->xhv_name_u.xhvnameu_names)[1] = share_hek(name, len, hash);
2130     }
2131 }
2132
2133 /*
2134 =for apidoc hv_ename_delete
2135
2136 Removes a name from a stash's internal list of effective names. If this is
2137 the name returned by C<HvENAME>, then another name in the list will take
2138 its place (C<HvENAME> will use it).
2139
2140 This is called when a stash is deleted from the symbol table.
2141
2142 =cut
2143 */
2144
2145 void
2146 Perl_hv_ename_delete(pTHX_ HV *hv, const char *name, U32 len, U32 flags)
2147 {
2148     dVAR;
2149     struct xpvhv_aux *aux;
2150
2151     PERL_ARGS_ASSERT_HV_ENAME_DELETE;
2152     PERL_UNUSED_ARG(flags);
2153
2154     if (len > I32_MAX)
2155         Perl_croak(aTHX_ "panic: hv name too long (%"UVuf")", (UV) len);
2156
2157     if (!SvOOK(hv)) return;
2158
2159     aux = HvAUX(hv);
2160     if (!aux->xhv_name_u.xhvnameu_name) return;
2161
2162     if (aux->xhv_name_count) {
2163         HEK ** const namep = aux->xhv_name_u.xhvnameu_names;
2164         I32 const count = aux->xhv_name_count;
2165         HEK **victim = namep + (count < 0 ? -count : count);
2166         while (victim-- > namep + 1)
2167             if (
2168                 HEK_LEN(*victim) == (I32)len
2169              && memEQ(HEK_KEY(*victim), name, len)
2170             ) {
2171                 unshare_hek_or_pvn(*victim, 0, 0, 0);
2172                 if (count < 0) ++aux->xhv_name_count;
2173                 else --aux->xhv_name_count;
2174                 if (
2175                     (aux->xhv_name_count == 1 || aux->xhv_name_count == -1)
2176                  && !*namep
2177                 ) {  /* if there are none left */
2178                     Safefree(namep);
2179                     aux->xhv_name_u.xhvnameu_names = NULL;
2180                     aux->xhv_name_count = 0;
2181                 }
2182                 else {
2183                     /* Move the last one back to fill the empty slot. It
2184                        does not matter what order they are in. */
2185                     *victim = *(namep + (count < 0 ? -count : count) - 1);
2186                 }
2187                 return;
2188             }
2189         if (
2190             count > 0 && HEK_LEN(*namep) == (I32)len
2191          && memEQ(HEK_KEY(*namep),name,len)
2192         ) {
2193             aux->xhv_name_count = -count;
2194         }
2195     }
2196     else if(
2197         HEK_LEN(aux->xhv_name_u.xhvnameu_name) == (I32)len
2198      && memEQ(HEK_KEY(aux->xhv_name_u.xhvnameu_name), name, len)
2199     ) {
2200         HEK * const namehek = aux->xhv_name_u.xhvnameu_name;
2201         Newx(aux->xhv_name_u.xhvnameu_names, 1, HEK *);
2202         *aux->xhv_name_u.xhvnameu_names = namehek;
2203         aux->xhv_name_count = -1;
2204     }
2205 }
2206
2207 AV **
2208 Perl_hv_backreferences_p(pTHX_ HV *hv) {
2209     struct xpvhv_aux * const iter = SvOOK(hv) ? HvAUX(hv) : hv_auxinit(hv);
2210
2211     PERL_ARGS_ASSERT_HV_BACKREFERENCES_P;
2212     PERL_UNUSED_CONTEXT;
2213
2214     return &(iter->xhv_backreferences);
2215 }
2216
2217 void
2218 Perl_hv_kill_backrefs(pTHX_ HV *hv) {
2219     AV *av;
2220
2221     PERL_ARGS_ASSERT_HV_KILL_BACKREFS;
2222
2223     if (!SvOOK(hv))
2224         return;
2225
2226     av = HvAUX(hv)->xhv_backreferences;
2227
2228     if (av) {
2229         HvAUX(hv)->xhv_backreferences = 0;
2230         Perl_sv_kill_backrefs(aTHX_ MUTABLE_SV(hv), av);
2231         if (SvTYPE(av) == SVt_PVAV)
2232             SvREFCNT_dec(av);
2233     }
2234 }
2235
2236 /*
2237 hv_iternext is implemented as a macro in hv.h
2238
2239 =for apidoc hv_iternext
2240
2241 Returns entries from a hash iterator.  See C<hv_iterinit>.
2242
2243 You may call C<hv_delete> or C<hv_delete_ent> on the hash entry that the
2244 iterator currently points to, without losing your place or invalidating your
2245 iterator.  Note that in this case the current entry is deleted from the hash
2246 with your iterator holding the last reference to it.  Your iterator is flagged
2247 to free the entry on the next call to C<hv_iternext>, so you must not discard
2248 your iterator immediately else the entry will leak - call C<hv_iternext> to
2249 trigger the resource deallocation.
2250
2251 =for apidoc hv_iternext_flags
2252
2253 Returns entries from a hash iterator.  See C<hv_iterinit> and C<hv_iternext>.
2254 The C<flags> value will normally be zero; if HV_ITERNEXT_WANTPLACEHOLDERS is
2255 set the placeholders keys (for restricted hashes) will be returned in addition
2256 to normal keys. By default placeholders are automatically skipped over.
2257 Currently a placeholder is implemented with a value that is
2258 C<&Perl_sv_placeholder>. Note that the implementation of placeholders and
2259 restricted hashes may change, and the implementation currently is
2260 insufficiently abstracted for any change to be tidy.
2261
2262 =cut
2263 */
2264
2265 HE *
2266 Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags)
2267 {
2268     dVAR;
2269     register XPVHV* xhv;
2270     register HE *entry;
2271     HE *oldentry;
2272     MAGIC* mg;
2273     struct xpvhv_aux *iter;
2274
2275     PERL_ARGS_ASSERT_HV_ITERNEXT_FLAGS;
2276
2277     if (!hv)
2278         Perl_croak(aTHX_ "Bad hash");
2279
2280     xhv = (XPVHV*)SvANY(hv);
2281
2282     if (!SvOOK(hv)) {
2283         /* Too many things (well, pp_each at least) merrily assume that you can
2284            call iv_iternext without calling hv_iterinit, so we'll have to deal
2285            with it.  */
2286         hv_iterinit(hv);
2287     }
2288     iter = HvAUX(hv);
2289
2290     oldentry = entry = iter->xhv_eiter; /* HvEITER(hv) */
2291     if (SvMAGICAL(hv) && SvRMAGICAL(hv)) {
2292         if ( ( mg = mg_find((const SV *)hv, PERL_MAGIC_tied) ) ) {
2293             SV * const key = sv_newmortal();
2294             if (entry) {
2295                 sv_setsv(key, HeSVKEY_force(entry));
2296                 SvREFCNT_dec(HeSVKEY(entry));       /* get rid of previous key */
2297             }
2298             else {
2299                 char *k;
2300                 HEK *hek;
2301
2302                 /* one HE per MAGICAL hash */
2303                 iter->xhv_eiter = entry = new_HE(); /* HvEITER(hv) = new_HE() */
2304                 Zero(entry, 1, HE);
2305                 Newxz(k, HEK_BASESIZE + sizeof(const SV *), char);
2306                 hek = (HEK*)k;
2307                 HeKEY_hek(entry) = hek;
2308                 HeKLEN(entry) = HEf_SVKEY;
2309             }
2310             magic_nextpack(MUTABLE_SV(hv),mg,key);
2311             if (SvOK(key)) {
2312                 /* force key to stay around until next time */
2313                 HeSVKEY_set(entry, SvREFCNT_inc_simple_NN(key));
2314                 return entry;               /* beware, hent_val is not set */
2315             }
2316             SvREFCNT_dec(HeVAL(entry));
2317             Safefree(HeKEY_hek(entry));
2318             del_HE(entry);
2319             iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */
2320             return NULL;
2321         }
2322     }
2323 #if defined(DYNAMIC_ENV_FETCH) && !defined(__riscos__)  /* set up %ENV for iteration */
2324     if (!entry && SvRMAGICAL((const SV *)hv)
2325         && mg_find((const SV *)hv, PERL_MAGIC_env)) {
2326         prime_env_iter();
2327 #ifdef VMS
2328         /* The prime_env_iter() on VMS just loaded up new hash values
2329          * so the iteration count needs to be reset back to the beginning
2330          */
2331         hv_iterinit(hv);
2332         iter = HvAUX(hv);
2333         oldentry = entry = iter->xhv_eiter; /* HvEITER(hv) */
2334 #endif
2335     }
2336 #endif
2337
2338     /* hv_iterint now ensures this.  */
2339     assert (HvARRAY(hv));
2340
2341     /* At start of hash, entry is NULL.  */
2342     if (entry)
2343     {
2344         entry = HeNEXT(entry);
2345         if (!(flags & HV_ITERNEXT_WANTPLACEHOLDERS)) {
2346             /*
2347              * Skip past any placeholders -- don't want to include them in
2348              * any iteration.
2349              */
2350             while (entry && HeVAL(entry) == &PL_sv_placeholder) {
2351                 entry = HeNEXT(entry);
2352             }
2353         }
2354     }
2355
2356     /* Skip the entire loop if the hash is empty.   */
2357     if ((flags & HV_ITERNEXT_WANTPLACEHOLDERS)
2358         ? HvTOTALKEYS(hv) : HvUSEDKEYS(hv)) {
2359         while (!entry) {
2360             /* OK. Come to the end of the current list.  Grab the next one.  */
2361
2362             iter->xhv_riter++; /* HvRITER(hv)++ */
2363             if (iter->xhv_riter > (I32)xhv->xhv_max /* HvRITER(hv) > HvMAX(hv) */) {
2364                 /* There is no next one.  End of the hash.  */
2365                 iter->xhv_riter = -1; /* HvRITER(hv) = -1 */
2366                 break;
2367             }
2368             entry = (HvARRAY(hv))[iter->xhv_riter];
2369
2370             if (!(flags & HV_ITERNEXT_WANTPLACEHOLDERS)) {
2371                 /* If we have an entry, but it's a placeholder, don't count it.
2372                    Try the next.  */
2373                 while (entry && HeVAL(entry) == &PL_sv_placeholder)
2374                     entry = HeNEXT(entry);
2375             }
2376             /* Will loop again if this linked list starts NULL
2377                (for HV_ITERNEXT_WANTPLACEHOLDERS)
2378                or if we run through it and find only placeholders.  */
2379         }
2380     }
2381
2382     if (oldentry && HvLAZYDEL(hv)) {            /* was deleted earlier? */
2383         HvLAZYDEL_off(hv);
2384         hv_free_ent(hv, oldentry);
2385     }
2386
2387     /*if (HvREHASH(hv) && entry && !HeKREHASH(entry))
2388       PerlIO_printf(PerlIO_stderr(), "Awooga %p %p\n", (void*)hv, (void*)entry);*/
2389
2390     iter->xhv_eiter = entry; /* HvEITER(hv) = entry */
2391     return entry;
2392 }
2393
2394 /*
2395 =for apidoc hv_iterkey
2396
2397 Returns the key from the current position of the hash iterator.  See
2398 C<hv_iterinit>.
2399
2400 =cut
2401 */
2402
2403 char *
2404 Perl_hv_iterkey(pTHX_ register HE *entry, I32 *retlen)
2405 {
2406     PERL_ARGS_ASSERT_HV_ITERKEY;
2407
2408     if (HeKLEN(entry) == HEf_SVKEY) {
2409         STRLEN len;
2410         char * const p = SvPV(HeKEY_sv(entry), len);
2411         *retlen = len;
2412         return p;
2413     }
2414     else {
2415         *retlen = HeKLEN(entry);
2416         return HeKEY(entry);
2417     }
2418 }
2419
2420 /* unlike hv_iterval(), this always returns a mortal copy of the key */
2421 /*
2422 =for apidoc hv_iterkeysv
2423
2424 Returns the key as an C<SV*> from the current position of the hash
2425 iterator.  The return value will always be a mortal copy of the key.  Also
2426 see C<hv_iterinit>.
2427
2428 =cut
2429 */
2430
2431 SV *
2432 Perl_hv_iterkeysv(pTHX_ register HE *entry)
2433 {
2434     PERL_ARGS_ASSERT_HV_ITERKEYSV;
2435
2436     return sv_2mortal(newSVhek(HeKEY_hek(entry)));
2437 }
2438
2439 /*
2440 =for apidoc hv_iterval
2441
2442 Returns the value from the current position of the hash iterator.  See
2443 C<hv_iterkey>.
2444
2445 =cut
2446 */
2447
2448 SV *
2449 Perl_hv_iterval(pTHX_ HV *hv, register HE *entry)
2450 {
2451     PERL_ARGS_ASSERT_HV_ITERVAL;
2452
2453     if (SvRMAGICAL(hv)) {
2454         if (mg_find((const SV *)hv, PERL_MAGIC_tied)) {
2455             SV* const sv = sv_newmortal();
2456             if (HeKLEN(entry) == HEf_SVKEY)
2457                 mg_copy(MUTABLE_SV(hv), sv, (char*)HeKEY_sv(entry), HEf_SVKEY);
2458             else
2459                 mg_copy(MUTABLE_SV(hv), sv, HeKEY(entry), HeKLEN(entry));
2460             return sv;
2461         }
2462     }
2463     return HeVAL(entry);
2464 }
2465
2466 /*
2467 =for apidoc hv_iternextsv
2468
2469 Performs an C<hv_iternext>, C<hv_iterkey>, and C<hv_iterval> in one
2470 operation.
2471
2472 =cut
2473 */
2474
2475 SV *
2476 Perl_hv_iternextsv(pTHX_ HV *hv, char **key, I32 *retlen)
2477 {
2478     HE * const he = hv_iternext_flags(hv, 0);
2479
2480     PERL_ARGS_ASSERT_HV_ITERNEXTSV;
2481
2482     if (!he)
2483         return NULL;
2484     *key = hv_iterkey(he, retlen);
2485     return hv_iterval(hv, he);
2486 }
2487
2488 /*
2489
2490 Now a macro in hv.h
2491
2492 =for apidoc hv_magic
2493
2494 Adds magic to a hash.  See C<sv_magic>.
2495
2496 =cut
2497 */
2498
2499 /* possibly free a shared string if no one has access to it
2500  * len and hash must both be valid for str.
2501  */
2502 void
2503 Perl_unsharepvn(pTHX_ const char *str, I32 len, U32 hash)
2504 {
2505     unshare_hek_or_pvn (NULL, str, len, hash);
2506 }
2507
2508
2509 void
2510 Perl_unshare_hek(pTHX_ HEK *hek)
2511 {
2512     assert(hek);
2513     unshare_hek_or_pvn(hek, NULL, 0, 0);
2514 }
2515
2516 /* possibly free a shared string if no one has access to it
2517    hek if non-NULL takes priority over the other 3, else str, len and hash
2518    are used.  If so, len and hash must both be valid for str.
2519  */
2520 STATIC void
2521 S_unshare_hek_or_pvn(pTHX_ const HEK *hek, const char *str, I32 len, U32 hash)
2522 {
2523     dVAR;
2524     register XPVHV* xhv;
2525     HE *entry;
2526     register HE **oentry;
2527     bool is_utf8 = FALSE;
2528     int k_flags = 0;
2529     const char * const save = str;
2530     struct shared_he *he = NULL;
2531
2532     if (hek) {
2533         /* Find the shared he which is just before us in memory.  */
2534         he = (struct shared_he *)(((char *)hek)
2535                                   - STRUCT_OFFSET(struct shared_he,
2536                                                   shared_he_hek));
2537
2538         /* Assert that the caller passed us a genuine (or at least consistent)
2539            shared hek  */
2540         assert (he->shared_he_he.hent_hek == hek);
2541
2542         if (he->shared_he_he.he_valu.hent_refcount - 1) {
2543             --he->shared_he_he.he_valu.hent_refcount;
2544             return;
2545         }
2546
2547         hash = HEK_HASH(hek);
2548     } else if (len < 0) {
2549         STRLEN tmplen = -len;
2550         is_utf8 = TRUE;
2551         /* See the note in hv_fetch(). --jhi */
2552         str = (char*)bytes_from_utf8((U8*)str, &tmplen, &is_utf8);
2553         len = tmplen;
2554         if (is_utf8)
2555             k_flags = HVhek_UTF8;
2556         if (str != save)
2557             k_flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
2558     }
2559
2560     /* what follows was the moral equivalent of:
2561     if ((Svp = hv_fetch(PL_strtab, tmpsv, FALSE, hash))) {
2562         if (--*Svp == NULL)
2563             hv_delete(PL_strtab, str, len, G_DISCARD, hash);
2564     } */
2565     xhv = (XPVHV*)SvANY(PL_strtab);
2566     /* assert(xhv_array != 0) */
2567     oentry = &(HvARRAY(PL_strtab))[hash & (I32) HvMAX(PL_strtab)];
2568     if (he) {
2569         const HE *const he_he = &(he->shared_he_he);
2570         for (entry = *oentry; entry; oentry = &HeNEXT(entry), entry = *oentry) {
2571             if (entry == he_he)
2572                 break;
2573         }
2574     } else {
2575         const int flags_masked = k_flags & HVhek_MASK;
2576         for (entry = *oentry; entry; oentry = &HeNEXT(entry), entry = *oentry) {
2577             if (HeHASH(entry) != hash)          /* strings can't be equal */
2578                 continue;
2579             if (HeKLEN(entry) != len)
2580                 continue;
2581             if (HeKEY(entry) != str && memNE(HeKEY(entry),str,len))     /* is this it? */
2582                 continue;
2583             if (HeKFLAGS(entry) != flags_masked)
2584                 continue;
2585             break;
2586         }
2587     }
2588
2589     if (entry) {
2590         if (--entry->he_valu.hent_refcount == 0) {
2591             *oentry = HeNEXT(entry);
2592             Safefree(entry);
2593             xhv->xhv_keys--; /* HvTOTALKEYS(hv)-- */
2594         }
2595     }
2596
2597     if (!entry)
2598         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
2599                          "Attempt to free non-existent shared string '%s'%s"
2600                          pTHX__FORMAT,
2601                          hek ? HEK_KEY(hek) : str,
2602                          ((k_flags & HVhek_UTF8) ? " (utf8)" : "") pTHX__VALUE);
2603     if (k_flags & HVhek_FREEKEY)
2604         Safefree(str);
2605 }
2606
2607 /* get a (constant) string ptr from the global string table
2608  * string will get added if it is not already there.
2609  * len and hash must both be valid for str.
2610  */
2611 HEK *
2612 Perl_share_hek(pTHX_ const char *str, I32 len, register U32 hash)
2613 {
2614     bool is_utf8 = FALSE;
2615     int flags = 0;
2616     const char * const save = str;
2617
2618     PERL_ARGS_ASSERT_SHARE_HEK;
2619
2620     if (len < 0) {
2621       STRLEN tmplen = -len;
2622       is_utf8 = TRUE;
2623       /* See the note in hv_fetch(). --jhi */
2624       str = (char*)bytes_from_utf8((U8*)str, &tmplen, &is_utf8);
2625       len = tmplen;
2626       /* If we were able to downgrade here, then than means that we were passed
2627          in a key which only had chars 0-255, but was utf8 encoded.  */
2628       if (is_utf8)
2629           flags = HVhek_UTF8;
2630       /* If we found we were able to downgrade the string to bytes, then
2631          we should flag that it needs upgrading on keys or each.  Also flag
2632          that we need share_hek_flags to free the string.  */
2633       if (str != save)
2634           flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
2635     }
2636
2637     return share_hek_flags (str, len, hash, flags);
2638 }
2639
2640 STATIC HEK *
2641 S_share_hek_flags(pTHX_ const char *str, I32 len, register U32 hash, int flags)
2642 {
2643     dVAR;
2644     register HE *entry;
2645     const int flags_masked = flags & HVhek_MASK;
2646     const U32 hindex = hash & (I32) HvMAX(PL_strtab);
2647     register XPVHV * const xhv = (XPVHV*)SvANY(PL_strtab);
2648
2649     PERL_ARGS_ASSERT_SHARE_HEK_FLAGS;
2650
2651     /* what follows is the moral equivalent of:
2652
2653     if (!(Svp = hv_fetch(PL_strtab, str, len, FALSE)))
2654         hv_store(PL_strtab, str, len, NULL, hash);
2655
2656         Can't rehash the shared string table, so not sure if it's worth
2657         counting the number of entries in the linked list
2658     */
2659
2660     /* assert(xhv_array != 0) */
2661     entry = (HvARRAY(PL_strtab))[hindex];
2662     for (;entry; entry = HeNEXT(entry)) {
2663         if (HeHASH(entry) != hash)              /* strings can't be equal */
2664             continue;
2665         if (HeKLEN(entry) != len)
2666             continue;
2667         if (HeKEY(entry) != str && memNE(HeKEY(entry),str,len)) /* is this it? */
2668             continue;
2669         if (HeKFLAGS(entry) != flags_masked)
2670             continue;
2671         break;
2672     }
2673
2674     if (!entry) {
2675         /* What used to be head of the list.
2676            If this is NULL, then we're the first entry for this slot, which
2677            means we need to increate fill.  */
2678         struct shared_he *new_entry;
2679         HEK *hek;
2680         char *k;
2681         HE **const head = &HvARRAY(PL_strtab)[hindex];
2682         HE *const next = *head;
2683
2684         /* We don't actually store a HE from the arena and a regular HEK.
2685            Instead we allocate one chunk of memory big enough for both,
2686            and put the HEK straight after the HE. This way we can find the
2687            HEK directly from the HE.
2688         */
2689
2690         Newx(k, STRUCT_OFFSET(struct shared_he,
2691                                 shared_he_hek.hek_key[0]) + len + 2, char);
2692         new_entry = (struct shared_he *)k;
2693         entry = &(new_entry->shared_he_he);
2694         hek = &(new_entry->shared_he_hek);
2695
2696         Copy(str, HEK_KEY(hek), len, char);
2697         HEK_KEY(hek)[len] = 0;
2698         HEK_LEN(hek) = len;
2699         HEK_HASH(hek) = hash;
2700         HEK_FLAGS(hek) = (unsigned char)flags_masked;
2701
2702         /* Still "point" to the HEK, so that other code need not know what
2703            we're up to.  */
2704         HeKEY_hek(entry) = hek;
2705         entry->he_valu.hent_refcount = 0;
2706         HeNEXT(entry) = next;
2707         *head = entry;
2708
2709         xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */
2710         if (!next) {                    /* initial entry? */
2711         } else if (xhv->xhv_keys > xhv->xhv_max /* HvUSEDKEYS(hv) > HvMAX(hv) */) {
2712                 hsplit(PL_strtab);
2713         }
2714     }
2715
2716     ++entry->he_valu.hent_refcount;
2717
2718     if (flags & HVhek_FREEKEY)
2719         Safefree(str);
2720
2721     return HeKEY_hek(entry);
2722 }
2723
2724 I32 *
2725 Perl_hv_placeholders_p(pTHX_ HV *hv)
2726 {
2727     dVAR;
2728     MAGIC *mg = mg_find((const SV *)hv, PERL_MAGIC_rhash);
2729
2730     PERL_ARGS_ASSERT_HV_PLACEHOLDERS_P;
2731
2732     if (!mg) {
2733         mg = sv_magicext(MUTABLE_SV(hv), 0, PERL_MAGIC_rhash, 0, 0, 0);
2734
2735         if (!mg) {
2736             Perl_die(aTHX_ "panic: hv_placeholders_p");
2737         }
2738     }
2739     return &(mg->mg_len);
2740 }
2741
2742
2743 I32
2744 Perl_hv_placeholders_get(pTHX_ const HV *hv)
2745 {
2746     dVAR;
2747     MAGIC * const mg = mg_find((const SV *)hv, PERL_MAGIC_rhash);
2748
2749     PERL_ARGS_ASSERT_HV_PLACEHOLDERS_GET;
2750
2751     return mg ? mg->mg_len : 0;
2752 }
2753
2754 void
2755 Perl_hv_placeholders_set(pTHX_ HV *hv, I32 ph)
2756 {
2757     dVAR;
2758     MAGIC * const mg = mg_find((const SV *)hv, PERL_MAGIC_rhash);
2759
2760     PERL_ARGS_ASSERT_HV_PLACEHOLDERS_SET;
2761
2762     if (mg) {
2763         mg->mg_len = ph;
2764     } else if (ph) {
2765         if (!sv_magicext(MUTABLE_SV(hv), 0, PERL_MAGIC_rhash, 0, 0, ph))
2766             Perl_die(aTHX_ "panic: hv_placeholders_set");
2767     }
2768     /* else we don't need to add magic to record 0 placeholders.  */
2769 }
2770
2771 STATIC SV *
2772 S_refcounted_he_value(pTHX_ const struct refcounted_he *he)
2773 {
2774     dVAR;
2775     SV *value;
2776
2777     PERL_ARGS_ASSERT_REFCOUNTED_HE_VALUE;
2778
2779     switch(he->refcounted_he_data[0] & HVrhek_typemask) {
2780     case HVrhek_undef:
2781         value = newSV(0);
2782         break;
2783     case HVrhek_delete:
2784         value = &PL_sv_placeholder;
2785         break;
2786     case HVrhek_IV:
2787         value = newSViv(he->refcounted_he_val.refcounted_he_u_iv);
2788         break;
2789     case HVrhek_UV:
2790         value = newSVuv(he->refcounted_he_val.refcounted_he_u_uv);
2791         break;
2792     case HVrhek_PV:
2793     case HVrhek_PV_UTF8:
2794         /* Create a string SV that directly points to the bytes in our
2795            structure.  */
2796         value = newSV_type(SVt_PV);
2797         SvPV_set(value, (char *) he->refcounted_he_data + 1);
2798         SvCUR_set(value, he->refcounted_he_val.refcounted_he_u_len);
2799         /* This stops anything trying to free it  */
2800         SvLEN_set(value, 0);
2801         SvPOK_on(value);
2802         SvREADONLY_on(value);
2803         if ((he->refcounted_he_data[0] & HVrhek_typemask) == HVrhek_PV_UTF8)
2804             SvUTF8_on(value);
2805         break;
2806     default:
2807         Perl_croak(aTHX_ "panic: refcounted_he_value bad flags %"UVxf,
2808                    (UV)he->refcounted_he_data[0]);
2809     }
2810     return value;
2811 }
2812
2813 /*
2814 =for apidoc m|HV *|refcounted_he_chain_2hv|const struct refcounted_he *c|U32 flags
2815
2816 Generates and returns a C<HV *> representing the content of a
2817 C<refcounted_he> chain.
2818 I<flags> is currently unused and must be zero.
2819
2820 =cut
2821 */
2822 HV *
2823 Perl_refcounted_he_chain_2hv(pTHX_ const struct refcounted_he *chain, U32 flags)
2824 {
2825     dVAR;
2826     HV *hv;
2827     U32 placeholders, max;
2828
2829     if (flags)
2830         Perl_croak(aTHX_ "panic: refcounted_he_chain_2hv bad flags %"UVxf,
2831             (UV)flags);
2832
2833     /* We could chase the chain once to get an idea of the number of keys,
2834        and call ksplit.  But for now we'll make a potentially inefficient
2835        hash with only 8 entries in its array.  */
2836     hv = newHV();
2837     max = HvMAX(hv);
2838     if (!HvARRAY(hv)) {
2839         char *array;
2840         Newxz(array, PERL_HV_ARRAY_ALLOC_BYTES(max + 1), char);
2841         HvARRAY(hv) = (HE**)array;
2842     }
2843
2844     placeholders = 0;
2845     while (chain) {
2846 #ifdef USE_ITHREADS
2847         U32 hash = chain->refcounted_he_hash;
2848 #else
2849         U32 hash = HEK_HASH(chain->refcounted_he_hek);
2850 #endif
2851         HE **oentry = &((HvARRAY(hv))[hash & max]);
2852         HE *entry = *oentry;
2853         SV *value;
2854
2855         for (; entry; entry = HeNEXT(entry)) {
2856             if (HeHASH(entry) == hash) {
2857                 /* We might have a duplicate key here.  If so, entry is older
2858                    than the key we've already put in the hash, so if they are
2859                    the same, skip adding entry.  */
2860 #ifdef USE_ITHREADS
2861                 const STRLEN klen = HeKLEN(entry);
2862                 const char *const key = HeKEY(entry);
2863                 if (klen == chain->refcounted_he_keylen
2864                     && (!!HeKUTF8(entry)
2865                         == !!(chain->refcounted_he_data[0] & HVhek_UTF8))
2866                     && memEQ(key, REF_HE_KEY(chain), klen))
2867                     goto next_please;
2868 #else
2869                 if (HeKEY_hek(entry) == chain->refcounted_he_hek)
2870                     goto next_please;
2871                 if (HeKLEN(entry) == HEK_LEN(chain->refcounted_he_hek)
2872                     && HeKUTF8(entry) == HEK_UTF8(chain->refcounted_he_hek)
2873                     && memEQ(HeKEY(entry), HEK_KEY(chain->refcounted_he_hek),
2874                              HeKLEN(entry)))
2875                     goto next_please;
2876 #endif
2877             }
2878         }
2879         assert (!entry);
2880         entry = new_HE();
2881
2882 #ifdef USE_ITHREADS
2883         HeKEY_hek(entry)
2884             = share_hek_flags(REF_HE_KEY(chain),
2885                               chain->refcounted_he_keylen,
2886                               chain->refcounted_he_hash,
2887                               (chain->refcounted_he_data[0]
2888                                & (HVhek_UTF8|HVhek_WASUTF8)));
2889 #else
2890         HeKEY_hek(entry) = share_hek_hek(chain->refcounted_he_hek);
2891 #endif
2892         value = refcounted_he_value(chain);
2893         if (value == &PL_sv_placeholder)
2894             placeholders++;
2895         HeVAL(entry) = value;
2896
2897         /* Link it into the chain.  */
2898         HeNEXT(entry) = *oentry;
2899         *oentry = entry;
2900
2901         HvTOTALKEYS(hv)++;
2902
2903     next_please:
2904         chain = chain->refcounted_he_next;
2905     }
2906
2907     if (placeholders) {
2908         clear_placeholders(hv, placeholders);
2909         HvTOTALKEYS(hv) -= placeholders;
2910     }
2911
2912     /* We could check in the loop to see if we encounter any keys with key
2913        flags, but it's probably not worth it, as this per-hash flag is only
2914        really meant as an optimisation for things like Storable.  */
2915     HvHASKFLAGS_on(hv);
2916     DEBUG_A(Perl_hv_assert(aTHX_ hv));
2917
2918     return hv;
2919 }
2920
2921 /*
2922 =for apidoc m|SV *|refcounted_he_fetch_pvn|const struct refcounted_he *chain|const char *keypv|STRLEN keylen|U32 hash|U32 flags
2923
2924 Search along a C<refcounted_he> chain for an entry with the key specified
2925 by I<keypv> and I<keylen>.  If I<flags> has the C<REFCOUNTED_HE_KEY_UTF8>
2926 bit set, the key octets are interpreted as UTF-8, otherwise they
2927 are interpreted as Latin-1.  I<hash> is a precomputed hash of the key
2928 string, or zero if it has not been precomputed.  Returns a mortal scalar
2929 representing the value associated with the key, or C<&PL_sv_placeholder>
2930 if there is no value associated with the key.
2931
2932 =cut
2933 */
2934
2935 SV *
2936 Perl_refcounted_he_fetch_pvn(pTHX_ const struct refcounted_he *chain,
2937                          const char *keypv, STRLEN keylen, U32 hash, U32 flags)
2938 {
2939     dVAR;
2940     U8 utf8_flag;
2941     PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PVN;
2942
2943     if (flags & ~REFCOUNTED_HE_KEY_UTF8)
2944         Perl_croak(aTHX_ "panic: refcounted_he_fetch_pvn bad flags %"UVxf,
2945             (UV)flags);
2946     if (!chain)
2947         return &PL_sv_placeholder;
2948     if (flags & REFCOUNTED_HE_KEY_UTF8) {
2949         /* For searching purposes, canonicalise to Latin-1 where possible. */
2950         const char *keyend = keypv + keylen, *p;
2951         STRLEN nonascii_count = 0;
2952         for (p = keypv; p != keyend; p++) {
2953             U8 c = (U8)*p;
2954             if (c & 0x80) {
2955                 if (!((c & 0xfe) == 0xc2 && ++p != keyend &&
2956                             (((U8)*p) & 0xc0) == 0x80))
2957                     goto canonicalised_key;
2958                 nonascii_count++;
2959             }
2960         }
2961         if (nonascii_count) {
2962             char *q;
2963             const char *p = keypv, *keyend = keypv + keylen;
2964             keylen -= nonascii_count;
2965             Newx(q, keylen, char);
2966             SAVEFREEPV(q);
2967             keypv = q;
2968             for (; p != keyend; p++, q++) {
2969                 U8 c = (U8)*p;
2970                 *q = (char)
2971                     ((c & 0x80) ? ((c & 0x03) << 6) | (((U8)*++p) & 0x3f) : c);
2972             }
2973         }
2974         flags &= ~REFCOUNTED_HE_KEY_UTF8;
2975         canonicalised_key: ;
2976     }
2977     utf8_flag = (flags & REFCOUNTED_HE_KEY_UTF8) ? HVhek_UTF8 : 0;
2978     if (!hash)
2979         PERL_HASH(hash, keypv, keylen);
2980
2981     for (; chain; chain = chain->refcounted_he_next) {
2982         if (
2983 #ifdef USE_ITHREADS
2984             hash == chain->refcounted_he_hash &&
2985             keylen == chain->refcounted_he_keylen &&
2986             memEQ(REF_HE_KEY(chain), keypv, keylen) &&
2987             utf8_flag == (chain->refcounted_he_data[0] & HVhek_UTF8)
2988 #else
2989             hash == HEK_HASH(chain->refcounted_he_hek) &&
2990             keylen == (STRLEN)HEK_LEN(chain->refcounted_he_hek) &&
2991             memEQ(HEK_KEY(chain->refcounted_he_hek), keypv, keylen) &&
2992             utf8_flag == (HEK_FLAGS(chain->refcounted_he_hek) & HVhek_UTF8)
2993 #endif
2994         )
2995             return sv_2mortal(refcounted_he_value(chain));
2996     }
2997     return &PL_sv_placeholder;
2998 }
2999
3000 /*
3001 =for apidoc m|SV *|refcounted_he_fetch_pv|const struct refcounted_he *chain|const char *key|U32 hash|U32 flags
3002
3003 Like L</refcounted_he_fetch_pvn>, but takes a nul-terminated string
3004 instead of a string/length pair.
3005
3006 =cut
3007 */
3008
3009 SV *
3010 Perl_refcounted_he_fetch_pv(pTHX_ const struct refcounted_he *chain,
3011                          const char *key, U32 hash, U32 flags)
3012 {
3013     PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PV;
3014     return refcounted_he_fetch_pvn(chain, key, strlen(key), hash, flags);
3015 }
3016
3017 /*
3018 =for apidoc m|SV *|refcounted_he_fetch_sv|const struct refcounted_he *chain|SV *key|U32 hash|U32 flags
3019
3020 Like L</refcounted_he_fetch_pvn>, but takes a Perl scalar instead of a
3021 string/length pair.
3022
3023 =cut
3024 */
3025
3026 SV *
3027 Perl_refcounted_he_fetch_sv(pTHX_ const struct refcounted_he *chain,
3028                          SV *key, U32 hash, U32 flags)
3029 {
3030     const char *keypv;
3031     STRLEN keylen;
3032     PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_SV;
3033     if (flags & REFCOUNTED_HE_KEY_UTF8)
3034         Perl_croak(aTHX_ "panic: refcounted_he_fetch_sv bad flags %"UVxf,
3035             (UV)flags);
3036     keypv = SvPV_const(key, keylen);
3037     if (SvUTF8(key))
3038         flags |= REFCOUNTED_HE_KEY_UTF8;
3039     if (!hash && SvIsCOW_shared_hash(key))
3040         hash = SvSHARED_HASH(key);
3041     return refcounted_he_fetch_pvn(chain, keypv, keylen, hash, flags);
3042 }
3043
3044 /*
3045 =for apidoc m|struct refcounted_he *|refcounted_he_new_pvn|struct refcounted_he *parent|const char *keypv|STRLEN keylen|U32 hash|SV *value|U32 flags
3046
3047 Creates a new C<refcounted_he>.  This consists of a single key/value
3048 pair and a reference to an existing C<refcounted_he> chain (which may
3049 be empty), and thus forms a longer chain.  When using the longer chain,
3050 the new key/value pair takes precedence over any entry for the same key
3051 further along the chain.
3052
3053 The new key is specified by I<keypv> and I<keylen>.  If I<flags> has
3054 the C<REFCOUNTED_HE_KEY_UTF8> bit set, the key octets are interpreted
3055 as UTF-8, otherwise they are interpreted as Latin-1.  I<hash> is
3056 a precomputed hash of the key string, or zero if it has not been
3057 precomputed.
3058
3059 I<value> is the scalar value to store for this key.  I<value> is copied
3060 by this function, which thus does not take ownership of any reference
3061 to it, and later changes to the scalar will not be reflected in the
3062 value visible in the C<refcounted_he>.  Complex types of scalar will not
3063 be stored with referential integrity, but will be coerced to strings.
3064 I<value> may be either null or C<&PL_sv_placeholder> to indicate that no
3065 value is to be associated with the key; this, as with any non-null value,
3066 takes precedence over the existence of a value for the key further along
3067 the chain.
3068
3069 I<parent> points to the rest of the C<refcounted_he> chain to be
3070 attached to the new C<refcounted_he>.  This function takes ownership
3071 of one reference to I<parent>, and returns one reference to the new
3072 C<refcounted_he>.
3073
3074 =cut
3075 */
3076
3077 struct refcounted_he *
3078 Perl_refcounted_he_new_pvn(pTHX_ struct refcounted_he *parent,
3079         const char *keypv, STRLEN keylen, U32 hash, SV *value, U32 flags)
3080 {
3081     dVAR;
3082     STRLEN value_len = 0;
3083     const char *value_p = NULL;
3084     bool is_pv;
3085     char value_type;
3086     char hekflags;
3087     STRLEN key_offset = 1;
3088     struct refcounted_he *he;
3089     PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PVN;
3090
3091     if (!value || value == &PL_sv_placeholder) {
3092         value_type = HVrhek_delete;
3093     } else if (SvPOK(value)) {
3094         value_type = HVrhek_PV;
3095     } else if (SvIOK(value)) {
3096         value_type = SvUOK((const SV *)value) ? HVrhek_UV : HVrhek_IV;
3097     } else if (!SvOK(value)) {
3098         value_type = HVrhek_undef;
3099     } else {
3100         value_type = HVrhek_PV;
3101     }
3102     is_pv = value_type == HVrhek_PV;
3103     if (is_pv) {
3104         /* Do it this way so that the SvUTF8() test is after the SvPV, in case
3105            the value is overloaded, and doesn't yet have the UTF-8flag set.  */
3106         value_p = SvPV_const(value, value_len);
3107         if (SvUTF8(value))
3108             value_type = HVrhek_PV_UTF8;
3109         key_offset = value_len + 2;
3110     }
3111     hekflags = value_type;
3112
3113     if (flags & REFCOUNTED_HE_KEY_UTF8) {
3114         /* Canonicalise to Latin-1 where possible. */
3115         const char *keyend = keypv + keylen, *p;
3116         STRLEN nonascii_count = 0;
3117         for (p = keypv; p != keyend; p++) {
3118             U8 c = (U8)*p;
3119             if (c & 0x80) {
3120                 if (!((c & 0xfe) == 0xc2 && ++p != keyend &&
3121                             (((U8)*p) & 0xc0) == 0x80))
3122                     goto canonicalised_key;
3123                 nonascii_count++;
3124             }
3125         }
3126         if (nonascii_count) {
3127             char *q;
3128             const char *p = keypv, *keyend = keypv + keylen;
3129             keylen -= nonascii_count;
3130             Newx(q, keylen, char);
3131             SAVEFREEPV(q);
3132             keypv = q;
3133             for (; p != keyend; p++, q++) {
3134                 U8 c = (U8)*p;
3135                 *q = (char)
3136                     ((c & 0x80) ? ((c & 0x03) << 6) | (((U8)*++p) & 0x3f) : c);
3137             }
3138         }
3139         flags &= ~REFCOUNTED_HE_KEY_UTF8;
3140         canonicalised_key: ;
3141     }
3142     if (flags & REFCOUNTED_HE_KEY_UTF8)
3143         hekflags |= HVhek_UTF8;
3144     if (!hash)
3145         PERL_HASH(hash, keypv, keylen);
3146
3147 #ifdef USE_ITHREADS
3148     he = (struct refcounted_he*)
3149         PerlMemShared_malloc(sizeof(struct refcounted_he) - 1
3150                              + keylen
3151                              + key_offset);
3152 #else
3153     he = (struct refcounted_he*)
3154         PerlMemShared_malloc(sizeof(struct refcounted_he) - 1
3155                              + key_offset);
3156 #endif
3157
3158     he->refcounted_he_next = parent;
3159
3160     if (is_pv) {
3161         Copy(value_p, he->refcounted_he_data + 1, value_len + 1, char);
3162         he->refcounted_he_val.refcounted_he_u_len = value_len;
3163     } else if (value_type == HVrhek_IV) {
3164         he->refcounted_he_val.refcounted_he_u_iv = SvIVX(value);
3165     } else if (value_type == HVrhek_UV) {
3166         he->refcounted_he_val.refcounted_he_u_uv = SvUVX(value);
3167     }
3168
3169 #ifdef USE_ITHREADS
3170     he->refcounted_he_hash = hash;
3171     he->refcounted_he_keylen = keylen;
3172     Copy(keypv, he->refcounted_he_data + key_offset, keylen, char);
3173 #else
3174     he->refcounted_he_hek = share_hek_flags(keypv, keylen, hash, hekflags);
3175 #endif
3176
3177     he->refcounted_he_data[0] = hekflags;
3178     he->refcounted_he_refcnt = 1;
3179
3180     return he;
3181 }
3182
3183 /*
3184 =for apidoc m|struct refcounted_he *|refcounted_he_new_pv|struct refcounted_he *parent|const char *key|U32 hash|SV *value|U32 flags
3185
3186 Like L</refcounted_he_new_pvn>, but takes a nul-terminated string instead
3187 of a string/length pair.
3188
3189 =cut
3190 */
3191
3192 struct refcounted_he *
3193 Perl_refcounted_he_new_pv(pTHX_ struct refcounted_he *parent,
3194         const char *key, U32 hash, SV *value, U32 flags)
3195 {
3196     PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PV;
3197     return refcounted_he_new_pvn(parent, key, strlen(key), hash, value, flags);
3198 }
3199
3200 /*
3201 =for apidoc m|struct refcounted_he *|refcounted_he_new_sv|struct refcounted_he *parent|SV *key|U32 hash|SV *value|U32 flags
3202
3203 Like L</refcounted_he_new_pvn>, but takes a Perl scalar instead of a
3204 string/length pair.
3205
3206 =cut
3207 */
3208
3209 struct refcounted_he *
3210 Perl_refcounted_he_new_sv(pTHX_ struct refcounted_he *parent,
3211         SV *key, U32 hash, SV *value, U32 flags)
3212 {
3213     const char *keypv;
3214     STRLEN keylen;
3215     PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_SV;
3216     if (flags & REFCOUNTED_HE_KEY_UTF8)
3217         Perl_croak(aTHX_ "panic: refcounted_he_new_sv bad flags %"UVxf,
3218             (UV)flags);
3219     keypv = SvPV_const(key, keylen);
3220     if (SvUTF8(key))
3221         flags |= REFCOUNTED_HE_KEY_UTF8;
3222     if (!hash && SvIsCOW_shared_hash(key))
3223         hash = SvSHARED_HASH(key);
3224     return refcounted_he_new_pvn(parent, keypv, keylen, hash, value, flags);
3225 }
3226
3227 /*
3228 =for apidoc m|void|refcounted_he_free|struct refcounted_he *he
3229
3230 Decrements the reference count of a C<refcounted_he> by one.  If the
3231 reference count reaches zero the structure's memory is freed, which
3232 (recursively) causes a reduction of its parent C<refcounted_he>'s
3233 reference count.  It is safe to pass a null pointer to this function:
3234 no action occurs in this case.
3235
3236 =cut
3237 */
3238
3239 void
3240 Perl_refcounted_he_free(pTHX_ struct refcounted_he *he) {
3241     dVAR;
3242     PERL_UNUSED_CONTEXT;
3243
3244     while (he) {
3245         struct refcounted_he *copy;
3246         U32 new_count;
3247
3248         HINTS_REFCNT_LOCK;
3249         new_count = --he->refcounted_he_refcnt;
3250         HINTS_REFCNT_UNLOCK;
3251         
3252         if (new_count) {
3253             return;
3254         }
3255
3256 #ifndef USE_ITHREADS
3257         unshare_hek_or_pvn (he->refcounted_he_hek, 0, 0, 0);
3258 #endif
3259         copy = he;
3260         he = he->refcounted_he_next;
3261         PerlMemShared_free(copy);
3262     }
3263 }
3264
3265 /*
3266 =for apidoc m|struct refcounted_he *|refcounted_he_inc|struct refcounted_he *he
3267
3268 Increment the reference count of a C<refcounted_he>.  The pointer to the
3269 C<refcounted_he> is also returned.  It is safe to pass a null pointer
3270 to this function: no action occurs and a null pointer is returned.
3271
3272 =cut
3273 */
3274
3275 struct refcounted_he *
3276 Perl_refcounted_he_inc(pTHX_ struct refcounted_he *he)
3277 {
3278     dVAR;
3279     if (he) {
3280         HINTS_REFCNT_LOCK;
3281         he->refcounted_he_refcnt++;
3282         HINTS_REFCNT_UNLOCK;
3283     }
3284     return he;
3285 }
3286
3287 /* pp_entereval is aware that labels are stored with a key ':' at the top of
3288    the linked list.  */
3289 const char *
3290 Perl_fetch_cop_label(pTHX_ COP *const cop, STRLEN *len, U32 *flags) {
3291     struct refcounted_he *const chain = cop->cop_hints_hash;
3292
3293     PERL_ARGS_ASSERT_FETCH_COP_LABEL;
3294
3295     if (!chain)
3296         return NULL;
3297 #ifdef USE_ITHREADS
3298     if (chain->refcounted_he_keylen != 1)
3299         return NULL;
3300     if (*REF_HE_KEY(chain) != ':')
3301         return NULL;
3302 #else
3303     if ((STRLEN)HEK_LEN(chain->refcounted_he_hek) != 1)
3304         return NULL;
3305     if (*HEK_KEY(chain->refcounted_he_hek) != ':')
3306         return NULL;
3307 #endif
3308     /* Stop anyone trying to really mess us up by adding their own value for
3309        ':' into %^H  */
3310     if ((chain->refcounted_he_data[0] & HVrhek_typemask) != HVrhek_PV
3311         && (chain->refcounted_he_data[0] & HVrhek_typemask) != HVrhek_PV_UTF8)
3312         return NULL;
3313
3314     if (len)
3315         *len = chain->refcounted_he_val.refcounted_he_u_len;
3316     if (flags) {
3317         *flags = ((chain->refcounted_he_data[0] & HVrhek_typemask)
3318                   == HVrhek_PV_UTF8) ? SVf_UTF8 : 0;
3319     }
3320     return chain->refcounted_he_data + 1;
3321 }
3322
3323 void
3324 Perl_store_cop_label(pTHX_ COP *const cop, const char *label, STRLEN len,
3325                      U32 flags)
3326 {
3327     SV *labelsv;
3328     PERL_ARGS_ASSERT_STORE_COP_LABEL;
3329
3330     if (flags & ~(SVf_UTF8))
3331         Perl_croak(aTHX_ "panic: store_cop_label illegal flag bits 0x%" UVxf,
3332                    (UV)flags);
3333     labelsv = newSVpvn_flags(label, len, SVs_TEMP);
3334     if (flags & SVf_UTF8)
3335         SvUTF8_on(labelsv);
3336     cop->cop_hints_hash
3337         = refcounted_he_new_pvs(cop->cop_hints_hash, ":", labelsv, 0);
3338 }
3339
3340 /*
3341 =for apidoc hv_assert
3342
3343 Check that a hash is in an internally consistent state.
3344
3345 =cut
3346 */
3347
3348 #ifdef DEBUGGING
3349
3350 void
3351 Perl_hv_assert(pTHX_ HV *hv)
3352 {
3353     dVAR;
3354     HE* entry;
3355     int withflags = 0;
3356     int placeholders = 0;
3357     int real = 0;
3358     int bad = 0;
3359     const I32 riter = HvRITER_get(hv);
3360     HE *eiter = HvEITER_get(hv);
3361
3362     PERL_ARGS_ASSERT_HV_ASSERT;
3363
3364     (void)hv_iterinit(hv);
3365
3366     while ((entry = hv_iternext_flags(hv, HV_ITERNEXT_WANTPLACEHOLDERS))) {
3367         /* sanity check the values */
3368         if (HeVAL(entry) == &PL_sv_placeholder)
3369             placeholders++;
3370         else
3371             real++;
3372         /* sanity check the keys */
3373         if (HeSVKEY(entry)) {
3374             NOOP;   /* Don't know what to check on SV keys.  */
3375         } else if (HeKUTF8(entry)) {
3376             withflags++;
3377             if (HeKWASUTF8(entry)) {
3378                 PerlIO_printf(Perl_debug_log,
3379                             "hash key has both WASUTF8 and UTF8: '%.*s'\n",
3380                             (int) HeKLEN(entry),  HeKEY(entry));
3381                 bad = 1;
3382             }
3383         } else if (HeKWASUTF8(entry))
3384             withflags++;
3385     }
3386     if (!SvTIED_mg((const SV *)hv, PERL_MAGIC_tied)) {
3387         static const char bad_count[] = "Count %d %s(s), but hash reports %d\n";
3388         const int nhashkeys = HvUSEDKEYS(hv);
3389         const int nhashplaceholders = HvPLACEHOLDERS_get(hv);
3390
3391         if (nhashkeys != real) {
3392             PerlIO_printf(Perl_debug_log, bad_count, real, "keys", nhashkeys );
3393             bad = 1;
3394         }
3395         if (nhashplaceholders != placeholders) {
3396             PerlIO_printf(Perl_debug_log, bad_count, placeholders, "placeholder", nhashplaceholders );
3397             bad = 1;
3398         }
3399     }
3400     if (withflags && ! HvHASKFLAGS(hv)) {
3401         PerlIO_printf(Perl_debug_log,
3402                     "Hash has HASKFLAGS off but I count %d key(s) with flags\n",
3403                     withflags);
3404         bad = 1;
3405     }
3406     if (bad) {
3407         sv_dump(MUTABLE_SV(hv));
3408     }
3409     HvRITER_set(hv, riter);             /* Restore hash iterator state */
3410     HvEITER_set(hv, eiter);
3411 }
3412
3413 #endif
3414
3415 /*
3416  * Local variables:
3417  * c-indentation-style: bsd
3418  * c-basic-offset: 4
3419  * indent-tabs-mode: t
3420  * End:
3421  *
3422  * ex: set ts=8 sts=4 sw=4 noet:
3423  */