This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
bisect-runner.pl should check for t/perl when building test_prep.
[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) == (svtype)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             HeVAL(entry) = &PL_sv_placeholder;
1047             if (sv) {
1048                 /* deletion of method from stash */
1049                 if (isGV(sv) && isGV_with_GP(sv) && GvCVu(sv)
1050                  && HvENAME_get(hv))
1051                     mro_method_changed_in(hv);
1052                 SvREFCNT_dec(sv);
1053                 sv = NULL;
1054             }
1055         }
1056         else {
1057             sv = sv_2mortal(HeVAL(entry));
1058             HeVAL(entry) = &PL_sv_placeholder;
1059         }
1060
1061         /*
1062          * If a restricted hash, rather than really deleting the entry, put
1063          * a placeholder there. This marks the key as being "approved", so
1064          * we can still access via not-really-existing key without raising
1065          * an error.
1066          */
1067         if (SvREADONLY(hv))
1068             /* We'll be saving this slot, so the number of allocated keys
1069              * doesn't go down, but the number placeholders goes up */
1070             HvPLACEHOLDERS(hv)++;
1071         else {
1072             *oentry = HeNEXT(entry);
1073             if (SvOOK(hv) && entry == HvAUX(hv)->xhv_eiter /* HvEITER(hv) */)
1074                 HvLAZYDEL_on(hv);
1075             else {
1076                 if (SvOOK(hv) && HvLAZYDEL(hv) &&
1077                     entry == HeNEXT(HvAUX(hv)->xhv_eiter))
1078                     HeNEXT(HvAUX(hv)->xhv_eiter) = HeNEXT(entry);
1079                 hv_free_ent(hv, entry);
1080             }
1081             xhv->xhv_keys--; /* HvTOTALKEYS(hv)-- */
1082             if (xhv->xhv_keys == 0)
1083                 HvHASKFLAGS_off(hv);
1084         }
1085
1086         if (mro_changes == 1) mro_isa_changed_in(hv);
1087         else if (mro_changes == 2)
1088             mro_package_moved(NULL, stash, gv, 1);
1089
1090         return sv;
1091     }
1092     if (SvREADONLY(hv)) {
1093         hv_notallowed(k_flags, key, klen,
1094                         "Attempt to delete disallowed key '%"SVf"' from"
1095                         " a restricted hash");
1096     }
1097
1098     if (k_flags & HVhek_FREEKEY)
1099         Safefree(key);
1100     return NULL;
1101 }
1102
1103 STATIC void
1104 S_hsplit(pTHX_ HV *hv)
1105 {
1106     dVAR;
1107     register XPVHV* const xhv = (XPVHV*)SvANY(hv);
1108     const I32 oldsize = (I32) xhv->xhv_max+1; /* HvMAX(hv)+1 (sick) */
1109     register I32 newsize = oldsize * 2;
1110     register I32 i;
1111     char *a = (char*) HvARRAY(hv);
1112     register HE **aep;
1113     int longest_chain = 0;
1114     int was_shared;
1115
1116     PERL_ARGS_ASSERT_HSPLIT;
1117
1118     /*PerlIO_printf(PerlIO_stderr(), "hsplit called for %p which had %d\n",
1119       (void*)hv, (int) oldsize);*/
1120
1121     if (HvPLACEHOLDERS_get(hv) && !SvREADONLY(hv)) {
1122       /* Can make this clear any placeholders first for non-restricted hashes,
1123          even though Storable rebuilds restricted hashes by putting in all the
1124          placeholders (first) before turning on the readonly flag, because
1125          Storable always pre-splits the hash.  */
1126       hv_clear_placeholders(hv);
1127     }
1128                
1129     PL_nomemok = TRUE;
1130 #if defined(STRANGE_MALLOC) || defined(MYMALLOC)
1131     Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1132           + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1133     if (!a) {
1134       PL_nomemok = FALSE;
1135       return;
1136     }
1137     if (SvOOK(hv)) {
1138         Move(&a[oldsize * sizeof(HE*)], &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1139     }
1140 #else
1141     Newx(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1142         + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1143     if (!a) {
1144       PL_nomemok = FALSE;
1145       return;
1146     }
1147     Copy(HvARRAY(hv), a, oldsize * sizeof(HE*), char);
1148     if (SvOOK(hv)) {
1149         Copy(HvAUX(hv), &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1150     }
1151     Safefree(HvARRAY(hv));
1152 #endif
1153
1154     PL_nomemok = FALSE;
1155     Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char);     /* zero 2nd half*/
1156     xhv->xhv_max = --newsize;   /* HvMAX(hv) = --newsize */
1157     HvARRAY(hv) = (HE**) a;
1158     aep = (HE**)a;
1159
1160     for (i=0; i<oldsize; i++,aep++) {
1161         int left_length = 0;
1162         int right_length = 0;
1163         HE **oentry = aep;
1164         HE *entry = *aep;
1165         register HE **bep;
1166
1167         if (!entry)                             /* non-existent */
1168             continue;
1169         bep = aep+oldsize;
1170         do {
1171             if ((HeHASH(entry) & newsize) != (U32)i) {
1172                 *oentry = HeNEXT(entry);
1173                 HeNEXT(entry) = *bep;
1174                 *bep = entry;
1175                 right_length++;
1176             }
1177             else {
1178                 oentry = &HeNEXT(entry);
1179                 left_length++;
1180             }
1181             entry = *oentry;
1182         } while (entry);
1183         /* I think we don't actually need to keep track of the longest length,
1184            merely flag if anything is too long. But for the moment while
1185            developing this code I'll track it.  */
1186         if (left_length > longest_chain)
1187             longest_chain = left_length;
1188         if (right_length > longest_chain)
1189             longest_chain = right_length;
1190     }
1191
1192
1193     /* Pick your policy for "hashing isn't working" here:  */
1194     if (longest_chain <= HV_MAX_LENGTH_BEFORE_SPLIT /* split worked?  */
1195         || HvREHASH(hv)) {
1196         return;
1197     }
1198
1199     if (hv == PL_strtab) {
1200         /* Urg. Someone is doing something nasty to the string table.
1201            Can't win.  */
1202         return;
1203     }
1204
1205     /* Awooga. Awooga. Pathological data.  */
1206     /*PerlIO_printf(PerlIO_stderr(), "%p %d of %d with %d/%d buckets\n", (void*)hv,
1207       longest_chain, HvTOTALKEYS(hv), HvFILL(hv),  1+HvMAX(hv));*/
1208
1209     ++newsize;
1210     Newxz(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1211          + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1212     if (SvOOK(hv)) {
1213         Copy(HvAUX(hv), &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1214     }
1215
1216     was_shared = HvSHAREKEYS(hv);
1217
1218     HvSHAREKEYS_off(hv);
1219     HvREHASH_on(hv);
1220
1221     aep = HvARRAY(hv);
1222
1223     for (i=0; i<newsize; i++,aep++) {
1224         register HE *entry = *aep;
1225         while (entry) {
1226             /* We're going to trash this HE's next pointer when we chain it
1227                into the new hash below, so store where we go next.  */
1228             HE * const next = HeNEXT(entry);
1229             UV hash;
1230             HE **bep;
1231
1232             /* Rehash it */
1233             PERL_HASH_INTERNAL(hash, HeKEY(entry), HeKLEN(entry));
1234
1235             if (was_shared) {
1236                 /* Unshare it.  */
1237                 HEK * const new_hek
1238                     = save_hek_flags(HeKEY(entry), HeKLEN(entry),
1239                                      hash, HeKFLAGS(entry));
1240                 unshare_hek (HeKEY_hek(entry));
1241                 HeKEY_hek(entry) = new_hek;
1242             } else {
1243                 /* Not shared, so simply write the new hash in. */
1244                 HeHASH(entry) = hash;
1245             }
1246             /*PerlIO_printf(PerlIO_stderr(), "%d ", HeKFLAGS(entry));*/
1247             HEK_REHASH_on(HeKEY_hek(entry));
1248             /*PerlIO_printf(PerlIO_stderr(), "%d\n", HeKFLAGS(entry));*/
1249
1250             /* Copy oentry to the correct new chain.  */
1251             bep = ((HE**)a) + (hash & (I32) xhv->xhv_max);
1252             HeNEXT(entry) = *bep;
1253             *bep = entry;
1254
1255             entry = next;
1256         }
1257     }
1258     Safefree (HvARRAY(hv));
1259     HvARRAY(hv) = (HE **)a;
1260 }
1261
1262 void
1263 Perl_hv_ksplit(pTHX_ HV *hv, IV newmax)
1264 {
1265     dVAR;
1266     register XPVHV* xhv = (XPVHV*)SvANY(hv);
1267     const I32 oldsize = (I32) xhv->xhv_max+1; /* HvMAX(hv)+1 (sick) */
1268     register I32 newsize;
1269     register I32 i;
1270     register char *a;
1271     register HE **aep;
1272
1273     PERL_ARGS_ASSERT_HV_KSPLIT;
1274
1275     newsize = (I32) newmax;                     /* possible truncation here */
1276     if (newsize != newmax || newmax <= oldsize)
1277         return;
1278     while ((newsize & (1 + ~newsize)) != newsize) {
1279         newsize &= ~(newsize & (1 + ~newsize)); /* get proper power of 2 */
1280     }
1281     if (newsize < newmax)
1282         newsize *= 2;
1283     if (newsize < newmax)
1284         return;                                 /* overflow detection */
1285
1286     a = (char *) HvARRAY(hv);
1287     if (a) {
1288         PL_nomemok = TRUE;
1289 #if defined(STRANGE_MALLOC) || defined(MYMALLOC)
1290         Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1291               + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1292         if (!a) {
1293           PL_nomemok = FALSE;
1294           return;
1295         }
1296         if (SvOOK(hv)) {
1297             Copy(&a[oldsize * sizeof(HE*)], &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1298         }
1299 #else
1300         Newx(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1301             + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1302         if (!a) {
1303           PL_nomemok = FALSE;
1304           return;
1305         }
1306         Copy(HvARRAY(hv), a, oldsize * sizeof(HE*), char);
1307         if (SvOOK(hv)) {
1308             Copy(HvAUX(hv), &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1309         }
1310         Safefree(HvARRAY(hv));
1311 #endif
1312         PL_nomemok = FALSE;
1313         Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char); /* zero 2nd half*/
1314     }
1315     else {
1316         Newxz(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
1317     }
1318     xhv->xhv_max = --newsize;   /* HvMAX(hv) = --newsize */
1319     HvARRAY(hv) = (HE **) a;
1320     if (!xhv->xhv_keys /* !HvTOTALKEYS(hv) */)  /* skip rest if no entries */
1321         return;
1322
1323     aep = (HE**)a;
1324     for (i=0; i<oldsize; i++,aep++) {
1325         HE **oentry = aep;
1326         HE *entry = *aep;
1327
1328         if (!entry)                             /* non-existent */
1329             continue;
1330         do {
1331             register I32 j = (HeHASH(entry) & newsize);
1332
1333             if (j != i) {
1334                 j -= i;
1335                 *oentry = HeNEXT(entry);
1336                 HeNEXT(entry) = aep[j];
1337                 aep[j] = entry;
1338             }
1339             else
1340                 oentry = &HeNEXT(entry);
1341             entry = *oentry;
1342         } while (entry);
1343     }
1344 }
1345
1346 HV *
1347 Perl_newHVhv(pTHX_ HV *ohv)
1348 {
1349     dVAR;
1350     HV * const hv = newHV();
1351     STRLEN hv_max;
1352
1353     if (!ohv || !HvTOTALKEYS(ohv))
1354         return hv;
1355     hv_max = HvMAX(ohv);
1356
1357     if (!SvMAGICAL((const SV *)ohv)) {
1358         /* It's an ordinary hash, so copy it fast. AMS 20010804 */
1359         STRLEN i;
1360         const bool shared = !!HvSHAREKEYS(ohv);
1361         HE **ents, ** const oents = (HE **)HvARRAY(ohv);
1362         char *a;
1363         Newx(a, PERL_HV_ARRAY_ALLOC_BYTES(hv_max+1), char);
1364         ents = (HE**)a;
1365
1366         /* In each bucket... */
1367         for (i = 0; i <= hv_max; i++) {
1368             HE *prev = NULL;
1369             HE *oent = oents[i];
1370
1371             if (!oent) {
1372                 ents[i] = NULL;
1373                 continue;
1374             }
1375
1376             /* Copy the linked list of entries. */
1377             for (; oent; oent = HeNEXT(oent)) {
1378                 const U32 hash   = HeHASH(oent);
1379                 const char * const key = HeKEY(oent);
1380                 const STRLEN len = HeKLEN(oent);
1381                 const int flags  = HeKFLAGS(oent);
1382                 HE * const ent   = new_HE();
1383                 SV *const val    = HeVAL(oent);
1384
1385                 HeVAL(ent) = SvIMMORTAL(val) ? val : newSVsv(val);
1386                 HeKEY_hek(ent)
1387                     = shared ? share_hek_flags(key, len, hash, flags)
1388                              :  save_hek_flags(key, len, hash, flags);
1389                 if (prev)
1390                     HeNEXT(prev) = ent;
1391                 else
1392                     ents[i] = ent;
1393                 prev = ent;
1394                 HeNEXT(ent) = NULL;
1395             }
1396         }
1397
1398         HvMAX(hv)   = hv_max;
1399         HvTOTALKEYS(hv)  = HvTOTALKEYS(ohv);
1400         HvARRAY(hv) = ents;
1401     } /* not magical */
1402     else {
1403         /* Iterate over ohv, copying keys and values one at a time. */
1404         HE *entry;
1405         const I32 riter = HvRITER_get(ohv);
1406         HE * const eiter = HvEITER_get(ohv);
1407         STRLEN hv_fill = HvFILL(ohv);
1408
1409         /* Can we use fewer buckets? (hv_max is always 2^n-1) */
1410         while (hv_max && hv_max + 1 >= hv_fill * 2)
1411             hv_max = hv_max / 2;
1412         HvMAX(hv) = hv_max;
1413
1414         hv_iterinit(ohv);
1415         while ((entry = hv_iternext_flags(ohv, 0))) {
1416             SV *const val = HeVAL(entry);
1417             (void)hv_store_flags(hv, HeKEY(entry), HeKLEN(entry),
1418                                  SvIMMORTAL(val) ? val : newSVsv(val),
1419                                  HeHASH(entry), HeKFLAGS(entry));
1420         }
1421         HvRITER_set(ohv, riter);
1422         HvEITER_set(ohv, eiter);
1423     }
1424
1425     return hv;
1426 }
1427
1428 /*
1429 =for apidoc Am|HV *|hv_copy_hints_hv|HV *ohv
1430
1431 A specialised version of L</newHVhv> for copying C<%^H>.  I<ohv> must be
1432 a pointer to a hash (which may have C<%^H> magic, but should be generally
1433 non-magical), or C<NULL> (interpreted as an empty hash).  The content
1434 of I<ohv> is copied to a new hash, which has the C<%^H>-specific magic
1435 added to it.  A pointer to the new hash is returned.
1436
1437 =cut
1438 */
1439
1440 HV *
1441 Perl_hv_copy_hints_hv(pTHX_ HV *const ohv)
1442 {
1443     HV * const hv = newHV();
1444
1445     if (ohv && HvTOTALKEYS(ohv)) {
1446         STRLEN hv_max = HvMAX(ohv);
1447         STRLEN hv_fill = HvFILL(ohv);
1448         HE *entry;
1449         const I32 riter = HvRITER_get(ohv);
1450         HE * const eiter = HvEITER_get(ohv);
1451
1452         while (hv_max && hv_max + 1 >= hv_fill * 2)
1453             hv_max = hv_max / 2;
1454         HvMAX(hv) = hv_max;
1455
1456         hv_iterinit(ohv);
1457         while ((entry = hv_iternext_flags(ohv, 0))) {
1458             SV *const sv = newSVsv(HeVAL(entry));
1459             SV *heksv = newSVhek(HeKEY_hek(entry));
1460             sv_magic(sv, NULL, PERL_MAGIC_hintselem,
1461                      (char *)heksv, HEf_SVKEY);
1462             SvREFCNT_dec(heksv);
1463             (void)hv_store_flags(hv, HeKEY(entry), HeKLEN(entry),
1464                                  sv, HeHASH(entry), HeKFLAGS(entry));
1465         }
1466         HvRITER_set(ohv, riter);
1467         HvEITER_set(ohv, eiter);
1468     }
1469     hv_magic(hv, NULL, PERL_MAGIC_hints);
1470     return hv;
1471 }
1472
1473 /* like hv_free_ent, but returns the SV rather than freeing it */
1474 STATIC SV*
1475 S_hv_free_ent_ret(pTHX_ HV *hv, register HE *entry)
1476 {
1477     dVAR;
1478     SV *val;
1479
1480     PERL_ARGS_ASSERT_HV_FREE_ENT_RET;
1481
1482     if (!entry)
1483         return NULL;
1484     val = HeVAL(entry);
1485     if (val && isGV(val) && isGV_with_GP(val) && GvCVu(val) && HvENAME(hv))
1486         mro_method_changed_in(hv);      /* deletion of method from stash */
1487     if (HeKLEN(entry) == HEf_SVKEY) {
1488         SvREFCNT_dec(HeKEY_sv(entry));
1489         Safefree(HeKEY_hek(entry));
1490     }
1491     else if (HvSHAREKEYS(hv))
1492         unshare_hek(HeKEY_hek(entry));
1493     else
1494         Safefree(HeKEY_hek(entry));
1495     del_HE(entry);
1496     return val;
1497 }
1498
1499
1500 void
1501 Perl_hv_free_ent(pTHX_ HV *hv, register HE *entry)
1502 {
1503     dVAR;
1504     SV *val;
1505
1506     PERL_ARGS_ASSERT_HV_FREE_ENT;
1507
1508     if (!entry)
1509         return;
1510     val = hv_free_ent_ret(hv, entry);
1511     SvREFCNT_dec(val);
1512 }
1513
1514
1515 void
1516 Perl_hv_delayfree_ent(pTHX_ HV *hv, register HE *entry)
1517 {
1518     dVAR;
1519
1520     PERL_ARGS_ASSERT_HV_DELAYFREE_ENT;
1521
1522     if (!entry)
1523         return;
1524     /* SvREFCNT_inc to counter the SvREFCNT_dec in hv_free_ent  */
1525     sv_2mortal(SvREFCNT_inc(HeVAL(entry)));     /* free between statements */
1526     if (HeKLEN(entry) == HEf_SVKEY) {
1527         sv_2mortal(SvREFCNT_inc(HeKEY_sv(entry)));
1528     }
1529     hv_free_ent(hv, entry);
1530 }
1531
1532 /*
1533 =for apidoc hv_clear
1534
1535 Frees the all the elements of a hash, leaving it empty.
1536 The XS equivalent of %hash = (). See also L</hv_undef>.
1537
1538 =cut
1539 */
1540
1541 void
1542 Perl_hv_clear(pTHX_ HV *hv)
1543 {
1544     dVAR;
1545     register XPVHV* xhv;
1546     if (!hv)
1547         return;
1548
1549     DEBUG_A(Perl_hv_assert(aTHX_ hv));
1550
1551     xhv = (XPVHV*)SvANY(hv);
1552
1553     if (SvREADONLY(hv) && HvARRAY(hv) != NULL) {
1554         /* restricted hash: convert all keys to placeholders */
1555         STRLEN i;
1556         for (i = 0; i <= xhv->xhv_max; i++) {
1557             HE *entry = (HvARRAY(hv))[i];
1558             for (; entry; entry = HeNEXT(entry)) {
1559                 /* not already placeholder */
1560                 if (HeVAL(entry) != &PL_sv_placeholder) {
1561                     if (HeVAL(entry) && SvREADONLY(HeVAL(entry))
1562                      && !SvIsCOW(HeVAL(entry))) {
1563                         SV* const keysv = hv_iterkeysv(entry);
1564                         Perl_croak(aTHX_
1565                                    "Attempt to delete readonly key '%"SVf"' from a restricted hash",
1566                                    (void*)keysv);
1567                     }
1568                     SvREFCNT_dec(HeVAL(entry));
1569                     HeVAL(entry) = &PL_sv_placeholder;
1570                     HvPLACEHOLDERS(hv)++;
1571                 }
1572             }
1573         }
1574     }
1575     else {
1576         hfreeentries(hv);
1577         HvPLACEHOLDERS_set(hv, 0);
1578
1579         if (SvRMAGICAL(hv))
1580             mg_clear(MUTABLE_SV(hv));
1581
1582         HvHASKFLAGS_off(hv);
1583         HvREHASH_off(hv);
1584     }
1585     if (SvOOK(hv)) {
1586         if(HvENAME_get(hv))
1587             mro_isa_changed_in(hv);
1588         HvEITER_set(hv, NULL);
1589     }
1590 }
1591
1592 /*
1593 =for apidoc hv_clear_placeholders
1594
1595 Clears any placeholders from a hash.  If a restricted hash has any of its keys
1596 marked as readonly and the key is subsequently deleted, the key is not actually
1597 deleted but is marked by assigning it a value of &PL_sv_placeholder.  This tags
1598 it so it will be ignored by future operations such as iterating over the hash,
1599 but will still allow the hash to have a value reassigned to the key at some
1600 future point.  This function clears any such placeholder keys from the hash.
1601 See Hash::Util::lock_keys() for an example of its use.
1602
1603 =cut
1604 */
1605
1606 void
1607 Perl_hv_clear_placeholders(pTHX_ HV *hv)
1608 {
1609     dVAR;
1610     const U32 items = (U32)HvPLACEHOLDERS_get(hv);
1611
1612     PERL_ARGS_ASSERT_HV_CLEAR_PLACEHOLDERS;
1613
1614     if (items)
1615         clear_placeholders(hv, items);
1616 }
1617
1618 static void
1619 S_clear_placeholders(pTHX_ HV *hv, U32 items)
1620 {
1621     dVAR;
1622     I32 i;
1623
1624     PERL_ARGS_ASSERT_CLEAR_PLACEHOLDERS;
1625
1626     if (items == 0)
1627         return;
1628
1629     i = HvMAX(hv);
1630     do {
1631         /* Loop down the linked list heads  */
1632         HE **oentry = &(HvARRAY(hv))[i];
1633         HE *entry;
1634
1635         while ((entry = *oentry)) {
1636             if (HeVAL(entry) == &PL_sv_placeholder) {
1637                 *oentry = HeNEXT(entry);
1638                 if (entry == HvEITER_get(hv))
1639                     HvLAZYDEL_on(hv);
1640                 else {
1641                     if (SvOOK(hv) && HvLAZYDEL(hv) &&
1642                         entry == HeNEXT(HvAUX(hv)->xhv_eiter))
1643                         HeNEXT(HvAUX(hv)->xhv_eiter) = HeNEXT(entry);
1644                     hv_free_ent(hv, entry);
1645                 }
1646
1647                 if (--items == 0) {
1648                     /* Finished.  */
1649                     HvTOTALKEYS(hv) -= (IV)HvPLACEHOLDERS_get(hv);
1650                     if (HvUSEDKEYS(hv) == 0)
1651                         HvHASKFLAGS_off(hv);
1652                     HvPLACEHOLDERS_set(hv, 0);
1653                     return;
1654                 }
1655             } else {
1656                 oentry = &HeNEXT(entry);
1657             }
1658         }
1659     } while (--i >= 0);
1660     /* You can't get here, hence assertion should always fail.  */
1661     assert (items == 0);
1662     assert (0);
1663 }
1664
1665 STATIC void
1666 S_hfreeentries(pTHX_ HV *hv)
1667 {
1668     STRLEN index = 0;
1669     XPVHV * const xhv = (XPVHV*)SvANY(hv);
1670     SV *sv;
1671
1672     PERL_ARGS_ASSERT_HFREEENTRIES;
1673
1674     while ((sv = Perl_hfree_next_entry(aTHX_ hv, &index))||xhv->xhv_keys) {
1675         SvREFCNT_dec(sv);
1676     }
1677 }
1678
1679
1680 /* hfree_next_entry()
1681  * For use only by S_hfreeentries() and sv_clear().
1682  * Delete the next available HE from hv and return the associated SV.
1683  * Returns null on empty hash. Nevertheless null is not a reliable
1684  * indicator that the hash is empty, as the deleted entry may have a
1685  * null value.
1686  * indexp is a pointer to the current index into HvARRAY. The index should
1687  * initially be set to 0. hfree_next_entry() may update it.  */
1688
1689 SV*
1690 Perl_hfree_next_entry(pTHX_ HV *hv, STRLEN *indexp)
1691 {
1692     struct xpvhv_aux *iter;
1693     HE *entry;
1694     HE ** array;
1695 #ifdef DEBUGGING
1696     STRLEN orig_index = *indexp;
1697 #endif
1698
1699     PERL_ARGS_ASSERT_HFREE_NEXT_ENTRY;
1700
1701     if (SvOOK(hv) && ((iter = HvAUX(hv)))
1702         && ((entry = iter->xhv_eiter)) )
1703     {
1704         /* the iterator may get resurrected after each
1705          * destructor call, so check each time */
1706         if (entry && HvLAZYDEL(hv)) {   /* was deleted earlier? */
1707             HvLAZYDEL_off(hv);
1708             hv_free_ent(hv, entry);
1709             /* warning: at this point HvARRAY may have been
1710              * re-allocated, HvMAX changed etc */
1711         }
1712         iter->xhv_riter = -1;   /* HvRITER(hv) = -1 */
1713         iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */
1714     }
1715
1716     if (!((XPVHV*)SvANY(hv))->xhv_keys)
1717         return NULL;
1718
1719     array = HvARRAY(hv);
1720     assert(array);
1721     while ( ! ((entry = array[*indexp])) ) {
1722         if ((*indexp)++ >= HvMAX(hv))
1723             *indexp = 0;
1724         assert(*indexp != orig_index);
1725     }
1726     array[*indexp] = HeNEXT(entry);
1727     ((XPVHV*) SvANY(hv))->xhv_keys--;
1728
1729     if (   PL_phase != PERL_PHASE_DESTRUCT && HvENAME(hv)
1730         && HeVAL(entry) && isGV(HeVAL(entry))
1731         && GvHV(HeVAL(entry)) && HvENAME(GvHV(HeVAL(entry)))
1732     ) {
1733         STRLEN klen;
1734         const char * const key = HePV(entry,klen);
1735         if ((klen > 1 && key[klen-1]==':' && key[klen-2]==':')
1736          || (klen == 1 && key[0] == ':')) {
1737             mro_package_moved(
1738              NULL, GvHV(HeVAL(entry)),
1739              (GV *)HeVAL(entry), 0
1740             );
1741         }
1742     }
1743     return hv_free_ent_ret(hv, entry);
1744 }
1745
1746
1747 /*
1748 =for apidoc hv_undef
1749
1750 Undefines the hash.  The XS equivalent of undef(%hash).
1751
1752 As well as freeing all the elements of the hash (like hv_clear()), this
1753 also frees any auxiliary data and storage associated with the hash.
1754 See also L</hv_clear>.
1755
1756 =cut
1757 */
1758
1759 void
1760 Perl_hv_undef_flags(pTHX_ HV *hv, U32 flags)
1761 {
1762     dVAR;
1763     register XPVHV* xhv;
1764     const char *name;
1765
1766     if (!hv)
1767         return;
1768     DEBUG_A(Perl_hv_assert(aTHX_ hv));
1769     xhv = (XPVHV*)SvANY(hv);
1770
1771     /* The name must be deleted before the call to hfreeeeentries so that
1772        CVs are anonymised properly. But the effective name must be pre-
1773        served until after that call (and only deleted afterwards if the
1774        call originated from sv_clear). For stashes with one name that is
1775        both the canonical name and the effective name, hv_name_set has to
1776        allocate an array for storing the effective name. We can skip that
1777        during global destruction, as it does not matter where the CVs point
1778        if they will be freed anyway. */
1779     /* note that the code following prior to hfreeentries is duplicated
1780      * in sv_clear(), and changes here should be done there too */
1781     if (PL_phase != PERL_PHASE_DESTRUCT && (name = HvNAME(hv))) {
1782         if (PL_stashcache)
1783             (void)hv_delete(PL_stashcache, name, HvNAMELEN_get(hv), G_DISCARD);
1784         hv_name_set(hv, NULL, 0, 0);
1785     }
1786     hfreeentries(hv);
1787     if (SvOOK(hv)) {
1788       struct xpvhv_aux * const aux = HvAUX(hv);
1789       struct mro_meta *meta;
1790
1791       if ((name = HvENAME_get(hv))) {
1792         if (PL_phase != PERL_PHASE_DESTRUCT)
1793             mro_isa_changed_in(hv);
1794         if (PL_stashcache)
1795             (void)hv_delete(
1796                     PL_stashcache, name, HvENAMELEN_get(hv), G_DISCARD
1797                   );
1798       }
1799
1800       /* If this call originated from sv_clear, then we must check for
1801        * effective names that need freeing, as well as the usual name. */
1802       name = HvNAME(hv);
1803       if (flags & HV_NAME_SETALL ? !!aux->xhv_name_u.xhvnameu_name : !!name) {
1804         if (name && PL_stashcache)
1805             (void)hv_delete(PL_stashcache, name, HvNAMELEN_get(hv), G_DISCARD);
1806         hv_name_set(hv, NULL, 0, flags);
1807       }
1808       if((meta = aux->xhv_mro_meta)) {
1809         if (meta->mro_linear_all) {
1810             SvREFCNT_dec(MUTABLE_SV(meta->mro_linear_all));
1811             meta->mro_linear_all = NULL;
1812             /* This is just acting as a shortcut pointer.  */
1813             meta->mro_linear_current = NULL;
1814         } else if (meta->mro_linear_current) {
1815             /* Only the current MRO is stored, so this owns the data.
1816              */
1817             SvREFCNT_dec(meta->mro_linear_current);
1818             meta->mro_linear_current = NULL;
1819         }
1820         SvREFCNT_dec(meta->mro_nextmethod);
1821         SvREFCNT_dec(meta->isa);
1822         Safefree(meta);
1823         aux->xhv_mro_meta = NULL;
1824       }
1825       if (!aux->xhv_name_u.xhvnameu_name && ! aux->xhv_backreferences)
1826         SvFLAGS(hv) &= ~SVf_OOK;
1827     }
1828     if (!SvOOK(hv)) {
1829         Safefree(HvARRAY(hv));
1830         xhv->xhv_max   = 7;     /* HvMAX(hv) = 7 (it's a normal hash) */
1831         HvARRAY(hv) = 0;
1832     }
1833     HvPLACEHOLDERS_set(hv, 0);
1834
1835     if (SvRMAGICAL(hv))
1836         mg_clear(MUTABLE_SV(hv));
1837 }
1838
1839 /*
1840 =for apidoc hv_fill
1841
1842 Returns the number of hash buckets that happen to be in use. This function is
1843 wrapped by the macro C<HvFILL>.
1844
1845 Previously this value was stored in the HV structure, rather than being
1846 calculated on demand.
1847
1848 =cut
1849 */
1850
1851 STRLEN
1852 Perl_hv_fill(pTHX_ HV const *const hv)
1853 {
1854     STRLEN count = 0;
1855     HE **ents = HvARRAY(hv);
1856
1857     PERL_ARGS_ASSERT_HV_FILL;
1858
1859     if (ents) {
1860         HE *const *const last = ents + HvMAX(hv);
1861         count = last + 1 - ents;
1862
1863         do {
1864             if (!*ents)
1865                 --count;
1866         } while (++ents <= last);
1867     }
1868     return count;
1869 }
1870
1871 static struct xpvhv_aux*
1872 S_hv_auxinit(HV *hv) {
1873     struct xpvhv_aux *iter;
1874     char *array;
1875
1876     PERL_ARGS_ASSERT_HV_AUXINIT;
1877
1878     if (!HvARRAY(hv)) {
1879         Newxz(array, PERL_HV_ARRAY_ALLOC_BYTES(HvMAX(hv) + 1)
1880             + sizeof(struct xpvhv_aux), char);
1881     } else {
1882         array = (char *) HvARRAY(hv);
1883         Renew(array, PERL_HV_ARRAY_ALLOC_BYTES(HvMAX(hv) + 1)
1884               + sizeof(struct xpvhv_aux), char);
1885     }
1886     HvARRAY(hv) = (HE**) array;
1887     /* SvOOK_on(hv) attacks the IV flags.  */
1888     SvFLAGS(hv) |= SVf_OOK;
1889     iter = HvAUX(hv);
1890
1891     iter->xhv_riter = -1;       /* HvRITER(hv) = -1 */
1892     iter->xhv_eiter = NULL;     /* HvEITER(hv) = NULL */
1893     iter->xhv_name_u.xhvnameu_name = 0;
1894     iter->xhv_name_count = 0;
1895     iter->xhv_backreferences = 0;
1896     iter->xhv_mro_meta = NULL;
1897     return iter;
1898 }
1899
1900 /*
1901 =for apidoc hv_iterinit
1902
1903 Prepares a starting point to traverse a hash table.  Returns the number of
1904 keys in the hash (i.e. the same as C<HvUSEDKEYS(hv)>).  The return value is
1905 currently only meaningful for hashes without tie magic.
1906
1907 NOTE: Before version 5.004_65, C<hv_iterinit> used to return the number of
1908 hash buckets that happen to be in use.  If you still need that esoteric
1909 value, you can get it through the macro C<HvFILL(hv)>.
1910
1911
1912 =cut
1913 */
1914
1915 I32
1916 Perl_hv_iterinit(pTHX_ HV *hv)
1917 {
1918     PERL_ARGS_ASSERT_HV_ITERINIT;
1919
1920     /* FIXME: Are we not NULL, or do we croak? Place bets now! */
1921
1922     if (!hv)
1923         Perl_croak(aTHX_ "Bad hash");
1924
1925     if (SvOOK(hv)) {
1926         struct xpvhv_aux * const iter = HvAUX(hv);
1927         HE * const entry = iter->xhv_eiter; /* HvEITER(hv) */
1928         if (entry && HvLAZYDEL(hv)) {   /* was deleted earlier? */
1929             HvLAZYDEL_off(hv);
1930             hv_free_ent(hv, entry);
1931         }
1932         iter->xhv_riter = -1;   /* HvRITER(hv) = -1 */
1933         iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */
1934     } else {
1935         hv_auxinit(hv);
1936     }
1937
1938     /* used to be xhv->xhv_fill before 5.004_65 */
1939     return HvTOTALKEYS(hv);
1940 }
1941
1942 I32 *
1943 Perl_hv_riter_p(pTHX_ HV *hv) {
1944     struct xpvhv_aux *iter;
1945
1946     PERL_ARGS_ASSERT_HV_RITER_P;
1947
1948     if (!hv)
1949         Perl_croak(aTHX_ "Bad hash");
1950
1951     iter = SvOOK(hv) ? HvAUX(hv) : hv_auxinit(hv);
1952     return &(iter->xhv_riter);
1953 }
1954
1955 HE **
1956 Perl_hv_eiter_p(pTHX_ HV *hv) {
1957     struct xpvhv_aux *iter;
1958
1959     PERL_ARGS_ASSERT_HV_EITER_P;
1960
1961     if (!hv)
1962         Perl_croak(aTHX_ "Bad hash");
1963
1964     iter = SvOOK(hv) ? HvAUX(hv) : hv_auxinit(hv);
1965     return &(iter->xhv_eiter);
1966 }
1967
1968 void
1969 Perl_hv_riter_set(pTHX_ HV *hv, I32 riter) {
1970     struct xpvhv_aux *iter;
1971
1972     PERL_ARGS_ASSERT_HV_RITER_SET;
1973
1974     if (!hv)
1975         Perl_croak(aTHX_ "Bad hash");
1976
1977     if (SvOOK(hv)) {
1978         iter = HvAUX(hv);
1979     } else {
1980         if (riter == -1)
1981             return;
1982
1983         iter = hv_auxinit(hv);
1984     }
1985     iter->xhv_riter = riter;
1986 }
1987
1988 void
1989 Perl_hv_eiter_set(pTHX_ HV *hv, HE *eiter) {
1990     struct xpvhv_aux *iter;
1991
1992     PERL_ARGS_ASSERT_HV_EITER_SET;
1993
1994     if (!hv)
1995         Perl_croak(aTHX_ "Bad hash");
1996
1997     if (SvOOK(hv)) {
1998         iter = HvAUX(hv);
1999     } else {
2000         /* 0 is the default so don't go malloc()ing a new structure just to
2001            hold 0.  */
2002         if (!eiter)
2003             return;
2004
2005         iter = hv_auxinit(hv);
2006     }
2007     iter->xhv_eiter = eiter;
2008 }
2009
2010 void
2011 Perl_hv_name_set(pTHX_ HV *hv, const char *name, U32 len, U32 flags)
2012 {
2013     dVAR;
2014     struct xpvhv_aux *iter;
2015     U32 hash;
2016     HEK **spot;
2017
2018     PERL_ARGS_ASSERT_HV_NAME_SET;
2019     PERL_UNUSED_ARG(flags);
2020
2021     if (len > I32_MAX)
2022         Perl_croak(aTHX_ "panic: hv name too long (%"UVuf")", (UV) len);
2023
2024     if (SvOOK(hv)) {
2025         iter = HvAUX(hv);
2026         if (iter->xhv_name_u.xhvnameu_name) {
2027             if(iter->xhv_name_count) {
2028               if(flags & HV_NAME_SETALL) {
2029                 HEK ** const name = HvAUX(hv)->xhv_name_u.xhvnameu_names;
2030                 HEK **hekp = name + (
2031                     iter->xhv_name_count < 0
2032                      ? -iter->xhv_name_count
2033                      :  iter->xhv_name_count
2034                    );
2035                 while(hekp-- > name+1) 
2036                     unshare_hek_or_pvn(*hekp, 0, 0, 0);
2037                 /* The first elem may be null. */
2038                 if(*name) unshare_hek_or_pvn(*name, 0, 0, 0);
2039                 Safefree(name);
2040                 spot = &iter->xhv_name_u.xhvnameu_name;
2041                 iter->xhv_name_count = 0;
2042               }
2043               else {
2044                 if(iter->xhv_name_count > 0) {
2045                     /* shift some things over */
2046                     Renew(
2047                      iter->xhv_name_u.xhvnameu_names, iter->xhv_name_count + 1, HEK *
2048                     );
2049                     spot = iter->xhv_name_u.xhvnameu_names;
2050                     spot[iter->xhv_name_count] = spot[1];
2051                     spot[1] = spot[0];
2052                     iter->xhv_name_count = -(iter->xhv_name_count + 1);
2053                 }
2054                 else if(*(spot = iter->xhv_name_u.xhvnameu_names)) {
2055                     unshare_hek_or_pvn(*spot, 0, 0, 0);
2056                 }
2057               }
2058             }
2059             else if (flags & HV_NAME_SETALL) {
2060                 unshare_hek_or_pvn(iter->xhv_name_u.xhvnameu_name, 0, 0, 0);
2061                 spot = &iter->xhv_name_u.xhvnameu_name;
2062             }
2063             else {
2064                 HEK * const existing_name = iter->xhv_name_u.xhvnameu_name;
2065                 Newx(iter->xhv_name_u.xhvnameu_names, 2, HEK *);
2066                 iter->xhv_name_count = -2;
2067                 spot = iter->xhv_name_u.xhvnameu_names;
2068                 spot[1] = existing_name;
2069             }
2070         }
2071         else { spot = &iter->xhv_name_u.xhvnameu_name; iter->xhv_name_count = 0; }
2072     } else {
2073         if (name == 0)
2074             return;
2075
2076         iter = hv_auxinit(hv);
2077         spot = &iter->xhv_name_u.xhvnameu_name;
2078     }
2079     PERL_HASH(hash, name, len);
2080     *spot = name ? share_hek(name, len, hash) : NULL;
2081 }
2082
2083 /*
2084 =for apidoc hv_ename_add
2085
2086 Adds a name to a stash's internal list of effective names. See
2087 C<hv_ename_delete>.
2088
2089 This is called when a stash is assigned to a new location in the symbol
2090 table.
2091
2092 =cut
2093 */
2094
2095 void
2096 Perl_hv_ename_add(pTHX_ HV *hv, const char *name, U32 len, U32 flags)
2097 {
2098     dVAR;
2099     struct xpvhv_aux *aux = SvOOK(hv) ? HvAUX(hv) : hv_auxinit(hv);
2100     U32 hash;
2101
2102     PERL_ARGS_ASSERT_HV_ENAME_ADD;
2103     PERL_UNUSED_ARG(flags);
2104
2105     if (len > I32_MAX)
2106         Perl_croak(aTHX_ "panic: hv name too long (%"UVuf")", (UV) len);
2107
2108     PERL_HASH(hash, name, len);
2109
2110     if (aux->xhv_name_count) {
2111         HEK ** const xhv_name = aux->xhv_name_u.xhvnameu_names;
2112         I32 count = aux->xhv_name_count;
2113         HEK **hekp = xhv_name + (count < 0 ? -count : count);
2114         while (hekp-- > xhv_name)
2115             if (
2116              HEK_LEN(*hekp) == (I32)len && memEQ(HEK_KEY(*hekp), name, len)
2117             ) {
2118                 if (hekp == xhv_name && count < 0)
2119                     aux->xhv_name_count = -count;
2120                 return;
2121             }
2122         if (count < 0) aux->xhv_name_count--, count = -count;
2123         else aux->xhv_name_count++;
2124         Renew(aux->xhv_name_u.xhvnameu_names, count + 1, HEK *);
2125         (aux->xhv_name_u.xhvnameu_names)[count] = share_hek(name, len, hash);
2126     }
2127     else {
2128         HEK *existing_name = aux->xhv_name_u.xhvnameu_name;
2129         if (
2130             existing_name && HEK_LEN(existing_name) == (I32)len
2131          && memEQ(HEK_KEY(existing_name), name, len)
2132         ) return;
2133         Newx(aux->xhv_name_u.xhvnameu_names, 2, HEK *);
2134         aux->xhv_name_count = existing_name ? 2 : -2;
2135         *aux->xhv_name_u.xhvnameu_names = existing_name;
2136         (aux->xhv_name_u.xhvnameu_names)[1] = share_hek(name, len, hash);
2137     }
2138 }
2139
2140 /*
2141 =for apidoc hv_ename_delete
2142
2143 Removes a name from a stash's internal list of effective names. If this is
2144 the name returned by C<HvENAME>, then another name in the list will take
2145 its place (C<HvENAME> will use it).
2146
2147 This is called when a stash is deleted from the symbol table.
2148
2149 =cut
2150 */
2151
2152 void
2153 Perl_hv_ename_delete(pTHX_ HV *hv, const char *name, U32 len, U32 flags)
2154 {
2155     dVAR;
2156     struct xpvhv_aux *aux;
2157
2158     PERL_ARGS_ASSERT_HV_ENAME_DELETE;
2159     PERL_UNUSED_ARG(flags);
2160
2161     if (len > I32_MAX)
2162         Perl_croak(aTHX_ "panic: hv name too long (%"UVuf")", (UV) len);
2163
2164     if (!SvOOK(hv)) return;
2165
2166     aux = HvAUX(hv);
2167     if (!aux->xhv_name_u.xhvnameu_name) return;
2168
2169     if (aux->xhv_name_count) {
2170         HEK ** const namep = aux->xhv_name_u.xhvnameu_names;
2171         I32 const count = aux->xhv_name_count;
2172         HEK **victim = namep + (count < 0 ? -count : count);
2173         while (victim-- > namep + 1)
2174             if (
2175                 HEK_LEN(*victim) == (I32)len
2176              && memEQ(HEK_KEY(*victim), name, len)
2177             ) {
2178                 unshare_hek_or_pvn(*victim, 0, 0, 0);
2179                 if (count < 0) ++aux->xhv_name_count;
2180                 else --aux->xhv_name_count;
2181                 if (
2182                     (aux->xhv_name_count == 1 || aux->xhv_name_count == -1)
2183                  && !*namep
2184                 ) {  /* if there are none left */
2185                     Safefree(namep);
2186                     aux->xhv_name_u.xhvnameu_names = NULL;
2187                     aux->xhv_name_count = 0;
2188                 }
2189                 else {
2190                     /* Move the last one back to fill the empty slot. It
2191                        does not matter what order they are in. */
2192                     *victim = *(namep + (count < 0 ? -count : count) - 1);
2193                 }
2194                 return;
2195             }
2196         if (
2197             count > 0 && HEK_LEN(*namep) == (I32)len
2198          && memEQ(HEK_KEY(*namep),name,len)
2199         ) {
2200             aux->xhv_name_count = -count;
2201         }
2202     }
2203     else if(
2204         HEK_LEN(aux->xhv_name_u.xhvnameu_name) == (I32)len
2205      && memEQ(HEK_KEY(aux->xhv_name_u.xhvnameu_name), name, len)
2206     ) {
2207         HEK * const namehek = aux->xhv_name_u.xhvnameu_name;
2208         Newx(aux->xhv_name_u.xhvnameu_names, 1, HEK *);
2209         *aux->xhv_name_u.xhvnameu_names = namehek;
2210         aux->xhv_name_count = -1;
2211     }
2212 }
2213
2214 AV **
2215 Perl_hv_backreferences_p(pTHX_ HV *hv) {
2216     struct xpvhv_aux * const iter = SvOOK(hv) ? HvAUX(hv) : hv_auxinit(hv);
2217
2218     PERL_ARGS_ASSERT_HV_BACKREFERENCES_P;
2219     PERL_UNUSED_CONTEXT;
2220
2221     return &(iter->xhv_backreferences);
2222 }
2223
2224 void
2225 Perl_hv_kill_backrefs(pTHX_ HV *hv) {
2226     AV *av;
2227
2228     PERL_ARGS_ASSERT_HV_KILL_BACKREFS;
2229
2230     if (!SvOOK(hv))
2231         return;
2232
2233     av = HvAUX(hv)->xhv_backreferences;
2234
2235     if (av) {
2236         HvAUX(hv)->xhv_backreferences = 0;
2237         Perl_sv_kill_backrefs(aTHX_ MUTABLE_SV(hv), av);
2238         if (SvTYPE(av) == SVt_PVAV)
2239             SvREFCNT_dec(av);
2240     }
2241 }
2242
2243 /*
2244 hv_iternext is implemented as a macro in hv.h
2245
2246 =for apidoc hv_iternext
2247
2248 Returns entries from a hash iterator.  See C<hv_iterinit>.
2249
2250 You may call C<hv_delete> or C<hv_delete_ent> on the hash entry that the
2251 iterator currently points to, without losing your place or invalidating your
2252 iterator.  Note that in this case the current entry is deleted from the hash
2253 with your iterator holding the last reference to it.  Your iterator is flagged
2254 to free the entry on the next call to C<hv_iternext>, so you must not discard
2255 your iterator immediately else the entry will leak - call C<hv_iternext> to
2256 trigger the resource deallocation.
2257
2258 =for apidoc hv_iternext_flags
2259
2260 Returns entries from a hash iterator.  See C<hv_iterinit> and C<hv_iternext>.
2261 The C<flags> value will normally be zero; if HV_ITERNEXT_WANTPLACEHOLDERS is
2262 set the placeholders keys (for restricted hashes) will be returned in addition
2263 to normal keys. By default placeholders are automatically skipped over.
2264 Currently a placeholder is implemented with a value that is
2265 C<&Perl_sv_placeholder>. Note that the implementation of placeholders and
2266 restricted hashes may change, and the implementation currently is
2267 insufficiently abstracted for any change to be tidy.
2268
2269 =cut
2270 */
2271
2272 HE *
2273 Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags)
2274 {
2275     dVAR;
2276     register XPVHV* xhv;
2277     register HE *entry;
2278     HE *oldentry;
2279     MAGIC* mg;
2280     struct xpvhv_aux *iter;
2281
2282     PERL_ARGS_ASSERT_HV_ITERNEXT_FLAGS;
2283
2284     if (!hv)
2285         Perl_croak(aTHX_ "Bad hash");
2286
2287     xhv = (XPVHV*)SvANY(hv);
2288
2289     if (!SvOOK(hv)) {
2290         /* Too many things (well, pp_each at least) merrily assume that you can
2291            call iv_iternext without calling hv_iterinit, so we'll have to deal
2292            with it.  */
2293         hv_iterinit(hv);
2294     }
2295     iter = HvAUX(hv);
2296
2297     oldentry = entry = iter->xhv_eiter; /* HvEITER(hv) */
2298     if (SvMAGICAL(hv) && SvRMAGICAL(hv)) {
2299         if ( ( mg = mg_find((const SV *)hv, PERL_MAGIC_tied) ) ) {
2300             SV * const key = sv_newmortal();
2301             if (entry) {
2302                 sv_setsv(key, HeSVKEY_force(entry));
2303                 SvREFCNT_dec(HeSVKEY(entry));       /* get rid of previous key */
2304             }
2305             else {
2306                 char *k;
2307                 HEK *hek;
2308
2309                 /* one HE per MAGICAL hash */
2310                 iter->xhv_eiter = entry = new_HE(); /* HvEITER(hv) = new_HE() */
2311                 Zero(entry, 1, HE);
2312                 Newxz(k, HEK_BASESIZE + sizeof(const SV *), char);
2313                 hek = (HEK*)k;
2314                 HeKEY_hek(entry) = hek;
2315                 HeKLEN(entry) = HEf_SVKEY;
2316             }
2317             magic_nextpack(MUTABLE_SV(hv),mg,key);
2318             if (SvOK(key)) {
2319                 /* force key to stay around until next time */
2320                 HeSVKEY_set(entry, SvREFCNT_inc_simple_NN(key));
2321                 return entry;               /* beware, hent_val is not set */
2322             }
2323             SvREFCNT_dec(HeVAL(entry));
2324             Safefree(HeKEY_hek(entry));
2325             del_HE(entry);
2326             iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */
2327             return NULL;
2328         }
2329     }
2330 #if defined(DYNAMIC_ENV_FETCH) && !defined(__riscos__)  /* set up %ENV for iteration */
2331     if (!entry && SvRMAGICAL((const SV *)hv)
2332         && mg_find((const SV *)hv, PERL_MAGIC_env)) {
2333         prime_env_iter();
2334 #ifdef VMS
2335         /* The prime_env_iter() on VMS just loaded up new hash values
2336          * so the iteration count needs to be reset back to the beginning
2337          */
2338         hv_iterinit(hv);
2339         iter = HvAUX(hv);
2340         oldentry = entry = iter->xhv_eiter; /* HvEITER(hv) */
2341 #endif
2342     }
2343 #endif
2344
2345     /* hv_iterint now ensures this.  */
2346     assert (HvARRAY(hv));
2347
2348     /* At start of hash, entry is NULL.  */
2349     if (entry)
2350     {
2351         entry = HeNEXT(entry);
2352         if (!(flags & HV_ITERNEXT_WANTPLACEHOLDERS)) {
2353             /*
2354              * Skip past any placeholders -- don't want to include them in
2355              * any iteration.
2356              */
2357             while (entry && HeVAL(entry) == &PL_sv_placeholder) {
2358                 entry = HeNEXT(entry);
2359             }
2360         }
2361     }
2362
2363     /* Skip the entire loop if the hash is empty.   */
2364     if ((flags & HV_ITERNEXT_WANTPLACEHOLDERS)
2365         ? HvTOTALKEYS(hv) : HvUSEDKEYS(hv)) {
2366         while (!entry) {
2367             /* OK. Come to the end of the current list.  Grab the next one.  */
2368
2369             iter->xhv_riter++; /* HvRITER(hv)++ */
2370             if (iter->xhv_riter > (I32)xhv->xhv_max /* HvRITER(hv) > HvMAX(hv) */) {
2371                 /* There is no next one.  End of the hash.  */
2372                 iter->xhv_riter = -1; /* HvRITER(hv) = -1 */
2373                 break;
2374             }
2375             entry = (HvARRAY(hv))[iter->xhv_riter];
2376
2377             if (!(flags & HV_ITERNEXT_WANTPLACEHOLDERS)) {
2378                 /* If we have an entry, but it's a placeholder, don't count it.
2379                    Try the next.  */
2380                 while (entry && HeVAL(entry) == &PL_sv_placeholder)
2381                     entry = HeNEXT(entry);
2382             }
2383             /* Will loop again if this linked list starts NULL
2384                (for HV_ITERNEXT_WANTPLACEHOLDERS)
2385                or if we run through it and find only placeholders.  */
2386         }
2387     }
2388
2389     if (oldentry && HvLAZYDEL(hv)) {            /* was deleted earlier? */
2390         HvLAZYDEL_off(hv);
2391         hv_free_ent(hv, oldentry);
2392     }
2393
2394     /*if (HvREHASH(hv) && entry && !HeKREHASH(entry))
2395       PerlIO_printf(PerlIO_stderr(), "Awooga %p %p\n", (void*)hv, (void*)entry);*/
2396
2397     iter->xhv_eiter = entry; /* HvEITER(hv) = entry */
2398     return entry;
2399 }
2400
2401 /*
2402 =for apidoc hv_iterkey
2403
2404 Returns the key from the current position of the hash iterator.  See
2405 C<hv_iterinit>.
2406
2407 =cut
2408 */
2409
2410 char *
2411 Perl_hv_iterkey(pTHX_ register HE *entry, I32 *retlen)
2412 {
2413     PERL_ARGS_ASSERT_HV_ITERKEY;
2414
2415     if (HeKLEN(entry) == HEf_SVKEY) {
2416         STRLEN len;
2417         char * const p = SvPV(HeKEY_sv(entry), len);
2418         *retlen = len;
2419         return p;
2420     }
2421     else {
2422         *retlen = HeKLEN(entry);
2423         return HeKEY(entry);
2424     }
2425 }
2426
2427 /* unlike hv_iterval(), this always returns a mortal copy of the key */
2428 /*
2429 =for apidoc hv_iterkeysv
2430
2431 Returns the key as an C<SV*> from the current position of the hash
2432 iterator.  The return value will always be a mortal copy of the key.  Also
2433 see C<hv_iterinit>.
2434
2435 =cut
2436 */
2437
2438 SV *
2439 Perl_hv_iterkeysv(pTHX_ register HE *entry)
2440 {
2441     PERL_ARGS_ASSERT_HV_ITERKEYSV;
2442
2443     return sv_2mortal(newSVhek(HeKEY_hek(entry)));
2444 }
2445
2446 /*
2447 =for apidoc hv_iterval
2448
2449 Returns the value from the current position of the hash iterator.  See
2450 C<hv_iterkey>.
2451
2452 =cut
2453 */
2454
2455 SV *
2456 Perl_hv_iterval(pTHX_ HV *hv, register HE *entry)
2457 {
2458     PERL_ARGS_ASSERT_HV_ITERVAL;
2459
2460     if (SvRMAGICAL(hv)) {
2461         if (mg_find((const SV *)hv, PERL_MAGIC_tied)) {
2462             SV* const sv = sv_newmortal();
2463             if (HeKLEN(entry) == HEf_SVKEY)
2464                 mg_copy(MUTABLE_SV(hv), sv, (char*)HeKEY_sv(entry), HEf_SVKEY);
2465             else
2466                 mg_copy(MUTABLE_SV(hv), sv, HeKEY(entry), HeKLEN(entry));
2467             return sv;
2468         }
2469     }
2470     return HeVAL(entry);
2471 }
2472
2473 /*
2474 =for apidoc hv_iternextsv
2475
2476 Performs an C<hv_iternext>, C<hv_iterkey>, and C<hv_iterval> in one
2477 operation.
2478
2479 =cut
2480 */
2481
2482 SV *
2483 Perl_hv_iternextsv(pTHX_ HV *hv, char **key, I32 *retlen)
2484 {
2485     HE * const he = hv_iternext_flags(hv, 0);
2486
2487     PERL_ARGS_ASSERT_HV_ITERNEXTSV;
2488
2489     if (!he)
2490         return NULL;
2491     *key = hv_iterkey(he, retlen);
2492     return hv_iterval(hv, he);
2493 }
2494
2495 /*
2496
2497 Now a macro in hv.h
2498
2499 =for apidoc hv_magic
2500
2501 Adds magic to a hash.  See C<sv_magic>.
2502
2503 =cut
2504 */
2505
2506 /* possibly free a shared string if no one has access to it
2507  * len and hash must both be valid for str.
2508  */
2509 void
2510 Perl_unsharepvn(pTHX_ const char *str, I32 len, U32 hash)
2511 {
2512     unshare_hek_or_pvn (NULL, str, len, hash);
2513 }
2514
2515
2516 void
2517 Perl_unshare_hek(pTHX_ HEK *hek)
2518 {
2519     assert(hek);
2520     unshare_hek_or_pvn(hek, NULL, 0, 0);
2521 }
2522
2523 /* possibly free a shared string if no one has access to it
2524    hek if non-NULL takes priority over the other 3, else str, len and hash
2525    are used.  If so, len and hash must both be valid for str.
2526  */
2527 STATIC void
2528 S_unshare_hek_or_pvn(pTHX_ const HEK *hek, const char *str, I32 len, U32 hash)
2529 {
2530     dVAR;
2531     register XPVHV* xhv;
2532     HE *entry;
2533     register HE **oentry;
2534     bool is_utf8 = FALSE;
2535     int k_flags = 0;
2536     const char * const save = str;
2537     struct shared_he *he = NULL;
2538
2539     if (hek) {
2540         /* Find the shared he which is just before us in memory.  */
2541         he = (struct shared_he *)(((char *)hek)
2542                                   - STRUCT_OFFSET(struct shared_he,
2543                                                   shared_he_hek));
2544
2545         /* Assert that the caller passed us a genuine (or at least consistent)
2546            shared hek  */
2547         assert (he->shared_he_he.hent_hek == hek);
2548
2549         if (he->shared_he_he.he_valu.hent_refcount - 1) {
2550             --he->shared_he_he.he_valu.hent_refcount;
2551             return;
2552         }
2553
2554         hash = HEK_HASH(hek);
2555     } else if (len < 0) {
2556         STRLEN tmplen = -len;
2557         is_utf8 = TRUE;
2558         /* See the note in hv_fetch(). --jhi */
2559         str = (char*)bytes_from_utf8((U8*)str, &tmplen, &is_utf8);
2560         len = tmplen;
2561         if (is_utf8)
2562             k_flags = HVhek_UTF8;
2563         if (str != save)
2564             k_flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
2565     }
2566
2567     /* what follows was the moral equivalent of:
2568     if ((Svp = hv_fetch(PL_strtab, tmpsv, FALSE, hash))) {
2569         if (--*Svp == NULL)
2570             hv_delete(PL_strtab, str, len, G_DISCARD, hash);
2571     } */
2572     xhv = (XPVHV*)SvANY(PL_strtab);
2573     /* assert(xhv_array != 0) */
2574     oentry = &(HvARRAY(PL_strtab))[hash & (I32) HvMAX(PL_strtab)];
2575     if (he) {
2576         const HE *const he_he = &(he->shared_he_he);
2577         for (entry = *oentry; entry; oentry = &HeNEXT(entry), entry = *oentry) {
2578             if (entry == he_he)
2579                 break;
2580         }
2581     } else {
2582         const int flags_masked = k_flags & HVhek_MASK;
2583         for (entry = *oentry; entry; oentry = &HeNEXT(entry), entry = *oentry) {
2584             if (HeHASH(entry) != hash)          /* strings can't be equal */
2585                 continue;
2586             if (HeKLEN(entry) != len)
2587                 continue;
2588             if (HeKEY(entry) != str && memNE(HeKEY(entry),str,len))     /* is this it? */
2589                 continue;
2590             if (HeKFLAGS(entry) != flags_masked)
2591                 continue;
2592             break;
2593         }
2594     }
2595
2596     if (entry) {
2597         if (--entry->he_valu.hent_refcount == 0) {
2598             *oentry = HeNEXT(entry);
2599             Safefree(entry);
2600             xhv->xhv_keys--; /* HvTOTALKEYS(hv)-- */
2601         }
2602     }
2603
2604     if (!entry)
2605         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
2606                          "Attempt to free non-existent shared string '%s'%s"
2607                          pTHX__FORMAT,
2608                          hek ? HEK_KEY(hek) : str,
2609                          ((k_flags & HVhek_UTF8) ? " (utf8)" : "") pTHX__VALUE);
2610     if (k_flags & HVhek_FREEKEY)
2611         Safefree(str);
2612 }
2613
2614 /* get a (constant) string ptr from the global string table
2615  * string will get added if it is not already there.
2616  * len and hash must both be valid for str.
2617  */
2618 HEK *
2619 Perl_share_hek(pTHX_ const char *str, I32 len, register U32 hash)
2620 {
2621     bool is_utf8 = FALSE;
2622     int flags = 0;
2623     const char * const save = str;
2624
2625     PERL_ARGS_ASSERT_SHARE_HEK;
2626
2627     if (len < 0) {
2628       STRLEN tmplen = -len;
2629       is_utf8 = TRUE;
2630       /* See the note in hv_fetch(). --jhi */
2631       str = (char*)bytes_from_utf8((U8*)str, &tmplen, &is_utf8);
2632       len = tmplen;
2633       /* If we were able to downgrade here, then than means that we were passed
2634          in a key which only had chars 0-255, but was utf8 encoded.  */
2635       if (is_utf8)
2636           flags = HVhek_UTF8;
2637       /* If we found we were able to downgrade the string to bytes, then
2638          we should flag that it needs upgrading on keys or each.  Also flag
2639          that we need share_hek_flags to free the string.  */
2640       if (str != save)
2641           flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
2642     }
2643
2644     return share_hek_flags (str, len, hash, flags);
2645 }
2646
2647 STATIC HEK *
2648 S_share_hek_flags(pTHX_ const char *str, I32 len, register U32 hash, int flags)
2649 {
2650     dVAR;
2651     register HE *entry;
2652     const int flags_masked = flags & HVhek_MASK;
2653     const U32 hindex = hash & (I32) HvMAX(PL_strtab);
2654     register XPVHV * const xhv = (XPVHV*)SvANY(PL_strtab);
2655
2656     PERL_ARGS_ASSERT_SHARE_HEK_FLAGS;
2657
2658     /* what follows is the moral equivalent of:
2659
2660     if (!(Svp = hv_fetch(PL_strtab, str, len, FALSE)))
2661         hv_store(PL_strtab, str, len, NULL, hash);
2662
2663         Can't rehash the shared string table, so not sure if it's worth
2664         counting the number of entries in the linked list
2665     */
2666
2667     /* assert(xhv_array != 0) */
2668     entry = (HvARRAY(PL_strtab))[hindex];
2669     for (;entry; entry = HeNEXT(entry)) {
2670         if (HeHASH(entry) != hash)              /* strings can't be equal */
2671             continue;
2672         if (HeKLEN(entry) != len)
2673             continue;
2674         if (HeKEY(entry) != str && memNE(HeKEY(entry),str,len)) /* is this it? */
2675             continue;
2676         if (HeKFLAGS(entry) != flags_masked)
2677             continue;
2678         break;
2679     }
2680
2681     if (!entry) {
2682         /* What used to be head of the list.
2683            If this is NULL, then we're the first entry for this slot, which
2684            means we need to increate fill.  */
2685         struct shared_he *new_entry;
2686         HEK *hek;
2687         char *k;
2688         HE **const head = &HvARRAY(PL_strtab)[hindex];
2689         HE *const next = *head;
2690
2691         /* We don't actually store a HE from the arena and a regular HEK.
2692            Instead we allocate one chunk of memory big enough for both,
2693            and put the HEK straight after the HE. This way we can find the
2694            HEK directly from the HE.
2695         */
2696
2697         Newx(k, STRUCT_OFFSET(struct shared_he,
2698                                 shared_he_hek.hek_key[0]) + len + 2, char);
2699         new_entry = (struct shared_he *)k;
2700         entry = &(new_entry->shared_he_he);
2701         hek = &(new_entry->shared_he_hek);
2702
2703         Copy(str, HEK_KEY(hek), len, char);
2704         HEK_KEY(hek)[len] = 0;
2705         HEK_LEN(hek) = len;
2706         HEK_HASH(hek) = hash;
2707         HEK_FLAGS(hek) = (unsigned char)flags_masked;
2708
2709         /* Still "point" to the HEK, so that other code need not know what
2710            we're up to.  */
2711         HeKEY_hek(entry) = hek;
2712         entry->he_valu.hent_refcount = 0;
2713         HeNEXT(entry) = next;
2714         *head = entry;
2715
2716         xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */
2717         if (!next) {                    /* initial entry? */
2718         } else if (xhv->xhv_keys > xhv->xhv_max /* HvUSEDKEYS(hv) > HvMAX(hv) */) {
2719                 hsplit(PL_strtab);
2720         }
2721     }
2722
2723     ++entry->he_valu.hent_refcount;
2724
2725     if (flags & HVhek_FREEKEY)
2726         Safefree(str);
2727
2728     return HeKEY_hek(entry);
2729 }
2730
2731 I32 *
2732 Perl_hv_placeholders_p(pTHX_ HV *hv)
2733 {
2734     dVAR;
2735     MAGIC *mg = mg_find((const SV *)hv, PERL_MAGIC_rhash);
2736
2737     PERL_ARGS_ASSERT_HV_PLACEHOLDERS_P;
2738
2739     if (!mg) {
2740         mg = sv_magicext(MUTABLE_SV(hv), 0, PERL_MAGIC_rhash, 0, 0, 0);
2741
2742         if (!mg) {
2743             Perl_die(aTHX_ "panic: hv_placeholders_p");
2744         }
2745     }
2746     return &(mg->mg_len);
2747 }
2748
2749
2750 I32
2751 Perl_hv_placeholders_get(pTHX_ const HV *hv)
2752 {
2753     dVAR;
2754     MAGIC * const mg = mg_find((const SV *)hv, PERL_MAGIC_rhash);
2755
2756     PERL_ARGS_ASSERT_HV_PLACEHOLDERS_GET;
2757
2758     return mg ? mg->mg_len : 0;
2759 }
2760
2761 void
2762 Perl_hv_placeholders_set(pTHX_ HV *hv, I32 ph)
2763 {
2764     dVAR;
2765     MAGIC * const mg = mg_find((const SV *)hv, PERL_MAGIC_rhash);
2766
2767     PERL_ARGS_ASSERT_HV_PLACEHOLDERS_SET;
2768
2769     if (mg) {
2770         mg->mg_len = ph;
2771     } else if (ph) {
2772         if (!sv_magicext(MUTABLE_SV(hv), 0, PERL_MAGIC_rhash, 0, 0, ph))
2773             Perl_die(aTHX_ "panic: hv_placeholders_set");
2774     }
2775     /* else we don't need to add magic to record 0 placeholders.  */
2776 }
2777
2778 STATIC SV *
2779 S_refcounted_he_value(pTHX_ const struct refcounted_he *he)
2780 {
2781     dVAR;
2782     SV *value;
2783
2784     PERL_ARGS_ASSERT_REFCOUNTED_HE_VALUE;
2785
2786     switch(he->refcounted_he_data[0] & HVrhek_typemask) {
2787     case HVrhek_undef:
2788         value = newSV(0);
2789         break;
2790     case HVrhek_delete:
2791         value = &PL_sv_placeholder;
2792         break;
2793     case HVrhek_IV:
2794         value = newSViv(he->refcounted_he_val.refcounted_he_u_iv);
2795         break;
2796     case HVrhek_UV:
2797         value = newSVuv(he->refcounted_he_val.refcounted_he_u_uv);
2798         break;
2799     case HVrhek_PV:
2800     case HVrhek_PV_UTF8:
2801         /* Create a string SV that directly points to the bytes in our
2802            structure.  */
2803         value = newSV_type(SVt_PV);
2804         SvPV_set(value, (char *) he->refcounted_he_data + 1);
2805         SvCUR_set(value, he->refcounted_he_val.refcounted_he_u_len);
2806         /* This stops anything trying to free it  */
2807         SvLEN_set(value, 0);
2808         SvPOK_on(value);
2809         SvREADONLY_on(value);
2810         if ((he->refcounted_he_data[0] & HVrhek_typemask) == HVrhek_PV_UTF8)
2811             SvUTF8_on(value);
2812         break;
2813     default:
2814         Perl_croak(aTHX_ "panic: refcounted_he_value bad flags %"UVxf,
2815                    (UV)he->refcounted_he_data[0]);
2816     }
2817     return value;
2818 }
2819
2820 /*
2821 =for apidoc m|HV *|refcounted_he_chain_2hv|const struct refcounted_he *c|U32 flags
2822
2823 Generates and returns a C<HV *> representing the content of a
2824 C<refcounted_he> chain.
2825 I<flags> is currently unused and must be zero.
2826
2827 =cut
2828 */
2829 HV *
2830 Perl_refcounted_he_chain_2hv(pTHX_ const struct refcounted_he *chain, U32 flags)
2831 {
2832     dVAR;
2833     HV *hv;
2834     U32 placeholders, max;
2835
2836     if (flags)
2837         Perl_croak(aTHX_ "panic: refcounted_he_chain_2hv bad flags %"UVxf,
2838             (UV)flags);
2839
2840     /* We could chase the chain once to get an idea of the number of keys,
2841        and call ksplit.  But for now we'll make a potentially inefficient
2842        hash with only 8 entries in its array.  */
2843     hv = newHV();
2844     max = HvMAX(hv);
2845     if (!HvARRAY(hv)) {
2846         char *array;
2847         Newxz(array, PERL_HV_ARRAY_ALLOC_BYTES(max + 1), char);
2848         HvARRAY(hv) = (HE**)array;
2849     }
2850
2851     placeholders = 0;
2852     while (chain) {
2853 #ifdef USE_ITHREADS
2854         U32 hash = chain->refcounted_he_hash;
2855 #else
2856         U32 hash = HEK_HASH(chain->refcounted_he_hek);
2857 #endif
2858         HE **oentry = &((HvARRAY(hv))[hash & max]);
2859         HE *entry = *oentry;
2860         SV *value;
2861
2862         for (; entry; entry = HeNEXT(entry)) {
2863             if (HeHASH(entry) == hash) {
2864                 /* We might have a duplicate key here.  If so, entry is older
2865                    than the key we've already put in the hash, so if they are
2866                    the same, skip adding entry.  */
2867 #ifdef USE_ITHREADS
2868                 const STRLEN klen = HeKLEN(entry);
2869                 const char *const key = HeKEY(entry);
2870                 if (klen == chain->refcounted_he_keylen
2871                     && (!!HeKUTF8(entry)
2872                         == !!(chain->refcounted_he_data[0] & HVhek_UTF8))
2873                     && memEQ(key, REF_HE_KEY(chain), klen))
2874                     goto next_please;
2875 #else
2876                 if (HeKEY_hek(entry) == chain->refcounted_he_hek)
2877                     goto next_please;
2878                 if (HeKLEN(entry) == HEK_LEN(chain->refcounted_he_hek)
2879                     && HeKUTF8(entry) == HEK_UTF8(chain->refcounted_he_hek)
2880                     && memEQ(HeKEY(entry), HEK_KEY(chain->refcounted_he_hek),
2881                              HeKLEN(entry)))
2882                     goto next_please;
2883 #endif
2884             }
2885         }
2886         assert (!entry);
2887         entry = new_HE();
2888
2889 #ifdef USE_ITHREADS
2890         HeKEY_hek(entry)
2891             = share_hek_flags(REF_HE_KEY(chain),
2892                               chain->refcounted_he_keylen,
2893                               chain->refcounted_he_hash,
2894                               (chain->refcounted_he_data[0]
2895                                & (HVhek_UTF8|HVhek_WASUTF8)));
2896 #else
2897         HeKEY_hek(entry) = share_hek_hek(chain->refcounted_he_hek);
2898 #endif
2899         value = refcounted_he_value(chain);
2900         if (value == &PL_sv_placeholder)
2901             placeholders++;
2902         HeVAL(entry) = value;
2903
2904         /* Link it into the chain.  */
2905         HeNEXT(entry) = *oentry;
2906         *oentry = entry;
2907
2908         HvTOTALKEYS(hv)++;
2909
2910     next_please:
2911         chain = chain->refcounted_he_next;
2912     }
2913
2914     if (placeholders) {
2915         clear_placeholders(hv, placeholders);
2916         HvTOTALKEYS(hv) -= placeholders;
2917     }
2918
2919     /* We could check in the loop to see if we encounter any keys with key
2920        flags, but it's probably not worth it, as this per-hash flag is only
2921        really meant as an optimisation for things like Storable.  */
2922     HvHASKFLAGS_on(hv);
2923     DEBUG_A(Perl_hv_assert(aTHX_ hv));
2924
2925     return hv;
2926 }
2927
2928 /*
2929 =for apidoc m|SV *|refcounted_he_fetch_pvn|const struct refcounted_he *chain|const char *keypv|STRLEN keylen|U32 hash|U32 flags
2930
2931 Search along a C<refcounted_he> chain for an entry with the key specified
2932 by I<keypv> and I<keylen>.  If I<flags> has the C<REFCOUNTED_HE_KEY_UTF8>
2933 bit set, the key octets are interpreted as UTF-8, otherwise they
2934 are interpreted as Latin-1.  I<hash> is a precomputed hash of the key
2935 string, or zero if it has not been precomputed.  Returns a mortal scalar
2936 representing the value associated with the key, or C<&PL_sv_placeholder>
2937 if there is no value associated with the key.
2938
2939 =cut
2940 */
2941
2942 SV *
2943 Perl_refcounted_he_fetch_pvn(pTHX_ const struct refcounted_he *chain,
2944                          const char *keypv, STRLEN keylen, U32 hash, U32 flags)
2945 {
2946     dVAR;
2947     U8 utf8_flag;
2948     PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PVN;
2949
2950     if (flags & ~REFCOUNTED_HE_KEY_UTF8)
2951         Perl_croak(aTHX_ "panic: refcounted_he_fetch_pvn bad flags %"UVxf,
2952             (UV)flags);
2953     if (!chain)
2954         return &PL_sv_placeholder;
2955     if (flags & REFCOUNTED_HE_KEY_UTF8) {
2956         /* For searching purposes, canonicalise to Latin-1 where possible. */
2957         const char *keyend = keypv + keylen, *p;
2958         STRLEN nonascii_count = 0;
2959         for (p = keypv; p != keyend; p++) {
2960             U8 c = (U8)*p;
2961             if (c & 0x80) {
2962                 if (!((c & 0xfe) == 0xc2 && ++p != keyend &&
2963                             (((U8)*p) & 0xc0) == 0x80))
2964                     goto canonicalised_key;
2965                 nonascii_count++;
2966             }
2967         }
2968         if (nonascii_count) {
2969             char *q;
2970             const char *p = keypv, *keyend = keypv + keylen;
2971             keylen -= nonascii_count;
2972             Newx(q, keylen, char);
2973             SAVEFREEPV(q);
2974             keypv = q;
2975             for (; p != keyend; p++, q++) {
2976                 U8 c = (U8)*p;
2977                 *q = (char)
2978                     ((c & 0x80) ? ((c & 0x03) << 6) | (((U8)*++p) & 0x3f) : c);
2979             }
2980         }
2981         flags &= ~REFCOUNTED_HE_KEY_UTF8;
2982         canonicalised_key: ;
2983     }
2984     utf8_flag = (flags & REFCOUNTED_HE_KEY_UTF8) ? HVhek_UTF8 : 0;
2985     if (!hash)
2986         PERL_HASH(hash, keypv, keylen);
2987
2988     for (; chain; chain = chain->refcounted_he_next) {
2989         if (
2990 #ifdef USE_ITHREADS
2991             hash == chain->refcounted_he_hash &&
2992             keylen == chain->refcounted_he_keylen &&
2993             memEQ(REF_HE_KEY(chain), keypv, keylen) &&
2994             utf8_flag == (chain->refcounted_he_data[0] & HVhek_UTF8)
2995 #else
2996             hash == HEK_HASH(chain->refcounted_he_hek) &&
2997             keylen == (STRLEN)HEK_LEN(chain->refcounted_he_hek) &&
2998             memEQ(HEK_KEY(chain->refcounted_he_hek), keypv, keylen) &&
2999             utf8_flag == (HEK_FLAGS(chain->refcounted_he_hek) & HVhek_UTF8)
3000 #endif
3001         )
3002             return sv_2mortal(refcounted_he_value(chain));
3003     }
3004     return &PL_sv_placeholder;
3005 }
3006
3007 /*
3008 =for apidoc m|SV *|refcounted_he_fetch_pv|const struct refcounted_he *chain|const char *key|U32 hash|U32 flags
3009
3010 Like L</refcounted_he_fetch_pvn>, but takes a nul-terminated string
3011 instead of a string/length pair.
3012
3013 =cut
3014 */
3015
3016 SV *
3017 Perl_refcounted_he_fetch_pv(pTHX_ const struct refcounted_he *chain,
3018                          const char *key, U32 hash, U32 flags)
3019 {
3020     PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PV;
3021     return refcounted_he_fetch_pvn(chain, key, strlen(key), hash, flags);
3022 }
3023
3024 /*
3025 =for apidoc m|SV *|refcounted_he_fetch_sv|const struct refcounted_he *chain|SV *key|U32 hash|U32 flags
3026
3027 Like L</refcounted_he_fetch_pvn>, but takes a Perl scalar instead of a
3028 string/length pair.
3029
3030 =cut
3031 */
3032
3033 SV *
3034 Perl_refcounted_he_fetch_sv(pTHX_ const struct refcounted_he *chain,
3035                          SV *key, U32 hash, U32 flags)
3036 {
3037     const char *keypv;
3038     STRLEN keylen;
3039     PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_SV;
3040     if (flags & REFCOUNTED_HE_KEY_UTF8)
3041         Perl_croak(aTHX_ "panic: refcounted_he_fetch_sv bad flags %"UVxf,
3042             (UV)flags);
3043     keypv = SvPV_const(key, keylen);
3044     if (SvUTF8(key))
3045         flags |= REFCOUNTED_HE_KEY_UTF8;
3046     if (!hash && SvIsCOW_shared_hash(key))
3047         hash = SvSHARED_HASH(key);
3048     return refcounted_he_fetch_pvn(chain, keypv, keylen, hash, flags);
3049 }
3050
3051 /*
3052 =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
3053
3054 Creates a new C<refcounted_he>.  This consists of a single key/value
3055 pair and a reference to an existing C<refcounted_he> chain (which may
3056 be empty), and thus forms a longer chain.  When using the longer chain,
3057 the new key/value pair takes precedence over any entry for the same key
3058 further along the chain.
3059
3060 The new key is specified by I<keypv> and I<keylen>.  If I<flags> has
3061 the C<REFCOUNTED_HE_KEY_UTF8> bit set, the key octets are interpreted
3062 as UTF-8, otherwise they are interpreted as Latin-1.  I<hash> is
3063 a precomputed hash of the key string, or zero if it has not been
3064 precomputed.
3065
3066 I<value> is the scalar value to store for this key.  I<value> is copied
3067 by this function, which thus does not take ownership of any reference
3068 to it, and later changes to the scalar will not be reflected in the
3069 value visible in the C<refcounted_he>.  Complex types of scalar will not
3070 be stored with referential integrity, but will be coerced to strings.
3071 I<value> may be either null or C<&PL_sv_placeholder> to indicate that no
3072 value is to be associated with the key; this, as with any non-null value,
3073 takes precedence over the existence of a value for the key further along
3074 the chain.
3075
3076 I<parent> points to the rest of the C<refcounted_he> chain to be
3077 attached to the new C<refcounted_he>.  This function takes ownership
3078 of one reference to I<parent>, and returns one reference to the new
3079 C<refcounted_he>.
3080
3081 =cut
3082 */
3083
3084 struct refcounted_he *
3085 Perl_refcounted_he_new_pvn(pTHX_ struct refcounted_he *parent,
3086         const char *keypv, STRLEN keylen, U32 hash, SV *value, U32 flags)
3087 {
3088     dVAR;
3089     STRLEN value_len = 0;
3090     const char *value_p = NULL;
3091     bool is_pv;
3092     char value_type;
3093     char hekflags;
3094     STRLEN key_offset = 1;
3095     struct refcounted_he *he;
3096     PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PVN;
3097
3098     if (!value || value == &PL_sv_placeholder) {
3099         value_type = HVrhek_delete;
3100     } else if (SvPOK(value)) {
3101         value_type = HVrhek_PV;
3102     } else if (SvIOK(value)) {
3103         value_type = SvUOK((const SV *)value) ? HVrhek_UV : HVrhek_IV;
3104     } else if (!SvOK(value)) {
3105         value_type = HVrhek_undef;
3106     } else {
3107         value_type = HVrhek_PV;
3108     }
3109     is_pv = value_type == HVrhek_PV;
3110     if (is_pv) {
3111         /* Do it this way so that the SvUTF8() test is after the SvPV, in case
3112            the value is overloaded, and doesn't yet have the UTF-8flag set.  */
3113         value_p = SvPV_const(value, value_len);
3114         if (SvUTF8(value))
3115             value_type = HVrhek_PV_UTF8;
3116         key_offset = value_len + 2;
3117     }
3118     hekflags = value_type;
3119
3120     if (flags & REFCOUNTED_HE_KEY_UTF8) {
3121         /* Canonicalise to Latin-1 where possible. */
3122         const char *keyend = keypv + keylen, *p;
3123         STRLEN nonascii_count = 0;
3124         for (p = keypv; p != keyend; p++) {
3125             U8 c = (U8)*p;
3126             if (c & 0x80) {
3127                 if (!((c & 0xfe) == 0xc2 && ++p != keyend &&
3128                             (((U8)*p) & 0xc0) == 0x80))
3129                     goto canonicalised_key;
3130                 nonascii_count++;
3131             }
3132         }
3133         if (nonascii_count) {
3134             char *q;
3135             const char *p = keypv, *keyend = keypv + keylen;
3136             keylen -= nonascii_count;
3137             Newx(q, keylen, char);
3138             SAVEFREEPV(q);
3139             keypv = q;
3140             for (; p != keyend; p++, q++) {
3141                 U8 c = (U8)*p;
3142                 *q = (char)
3143                     ((c & 0x80) ? ((c & 0x03) << 6) | (((U8)*++p) & 0x3f) : c);
3144             }
3145         }
3146         flags &= ~REFCOUNTED_HE_KEY_UTF8;
3147         canonicalised_key: ;
3148     }
3149     if (flags & REFCOUNTED_HE_KEY_UTF8)
3150         hekflags |= HVhek_UTF8;
3151     if (!hash)
3152         PERL_HASH(hash, keypv, keylen);
3153
3154 #ifdef USE_ITHREADS
3155     he = (struct refcounted_he*)
3156         PerlMemShared_malloc(sizeof(struct refcounted_he) - 1
3157                              + keylen
3158                              + key_offset);
3159 #else
3160     he = (struct refcounted_he*)
3161         PerlMemShared_malloc(sizeof(struct refcounted_he) - 1
3162                              + key_offset);
3163 #endif
3164
3165     he->refcounted_he_next = parent;
3166
3167     if (is_pv) {
3168         Copy(value_p, he->refcounted_he_data + 1, value_len + 1, char);
3169         he->refcounted_he_val.refcounted_he_u_len = value_len;
3170     } else if (value_type == HVrhek_IV) {
3171         he->refcounted_he_val.refcounted_he_u_iv = SvIVX(value);
3172     } else if (value_type == HVrhek_UV) {
3173         he->refcounted_he_val.refcounted_he_u_uv = SvUVX(value);
3174     }
3175
3176 #ifdef USE_ITHREADS
3177     he->refcounted_he_hash = hash;
3178     he->refcounted_he_keylen = keylen;
3179     Copy(keypv, he->refcounted_he_data + key_offset, keylen, char);
3180 #else
3181     he->refcounted_he_hek = share_hek_flags(keypv, keylen, hash, hekflags);
3182 #endif
3183
3184     he->refcounted_he_data[0] = hekflags;
3185     he->refcounted_he_refcnt = 1;
3186
3187     return he;
3188 }
3189
3190 /*
3191 =for apidoc m|struct refcounted_he *|refcounted_he_new_pv|struct refcounted_he *parent|const char *key|U32 hash|SV *value|U32 flags
3192
3193 Like L</refcounted_he_new_pvn>, but takes a nul-terminated string instead
3194 of a string/length pair.
3195
3196 =cut
3197 */
3198
3199 struct refcounted_he *
3200 Perl_refcounted_he_new_pv(pTHX_ struct refcounted_he *parent,
3201         const char *key, U32 hash, SV *value, U32 flags)
3202 {
3203     PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PV;
3204     return refcounted_he_new_pvn(parent, key, strlen(key), hash, value, flags);
3205 }
3206
3207 /*
3208 =for apidoc m|struct refcounted_he *|refcounted_he_new_sv|struct refcounted_he *parent|SV *key|U32 hash|SV *value|U32 flags
3209
3210 Like L</refcounted_he_new_pvn>, but takes a Perl scalar instead of a
3211 string/length pair.
3212
3213 =cut
3214 */
3215
3216 struct refcounted_he *
3217 Perl_refcounted_he_new_sv(pTHX_ struct refcounted_he *parent,
3218         SV *key, U32 hash, SV *value, U32 flags)
3219 {
3220     const char *keypv;
3221     STRLEN keylen;
3222     PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_SV;
3223     if (flags & REFCOUNTED_HE_KEY_UTF8)
3224         Perl_croak(aTHX_ "panic: refcounted_he_new_sv bad flags %"UVxf,
3225             (UV)flags);
3226     keypv = SvPV_const(key, keylen);
3227     if (SvUTF8(key))
3228         flags |= REFCOUNTED_HE_KEY_UTF8;
3229     if (!hash && SvIsCOW_shared_hash(key))
3230         hash = SvSHARED_HASH(key);
3231     return refcounted_he_new_pvn(parent, keypv, keylen, hash, value, flags);
3232 }
3233
3234 /*
3235 =for apidoc m|void|refcounted_he_free|struct refcounted_he *he
3236
3237 Decrements the reference count of a C<refcounted_he> by one.  If the
3238 reference count reaches zero the structure's memory is freed, which
3239 (recursively) causes a reduction of its parent C<refcounted_he>'s
3240 reference count.  It is safe to pass a null pointer to this function:
3241 no action occurs in this case.
3242
3243 =cut
3244 */
3245
3246 void
3247 Perl_refcounted_he_free(pTHX_ struct refcounted_he *he) {
3248     dVAR;
3249     PERL_UNUSED_CONTEXT;
3250
3251     while (he) {
3252         struct refcounted_he *copy;
3253         U32 new_count;
3254
3255         HINTS_REFCNT_LOCK;
3256         new_count = --he->refcounted_he_refcnt;
3257         HINTS_REFCNT_UNLOCK;
3258         
3259         if (new_count) {
3260             return;
3261         }
3262
3263 #ifndef USE_ITHREADS
3264         unshare_hek_or_pvn (he->refcounted_he_hek, 0, 0, 0);
3265 #endif
3266         copy = he;
3267         he = he->refcounted_he_next;
3268         PerlMemShared_free(copy);
3269     }
3270 }
3271
3272 /*
3273 =for apidoc m|struct refcounted_he *|refcounted_he_inc|struct refcounted_he *he
3274
3275 Increment the reference count of a C<refcounted_he>.  The pointer to the
3276 C<refcounted_he> is also returned.  It is safe to pass a null pointer
3277 to this function: no action occurs and a null pointer is returned.
3278
3279 =cut
3280 */
3281
3282 struct refcounted_he *
3283 Perl_refcounted_he_inc(pTHX_ struct refcounted_he *he)
3284 {
3285     dVAR;
3286     if (he) {
3287         HINTS_REFCNT_LOCK;
3288         he->refcounted_he_refcnt++;
3289         HINTS_REFCNT_UNLOCK;
3290     }
3291     return he;
3292 }
3293
3294 /*
3295 =for apidoc cop_fetch_label
3296
3297 Returns the label attached to a cop.
3298 The flags pointer may be set to C<SVf_UTF8> or 0.
3299
3300 =cut
3301 */
3302
3303 /* pp_entereval is aware that labels are stored with a key ':' at the top of
3304    the linked list.  */
3305 const char *
3306 Perl_cop_fetch_label(pTHX_ COP *const cop, STRLEN *len, U32 *flags) {
3307     struct refcounted_he *const chain = cop->cop_hints_hash;
3308
3309     PERL_ARGS_ASSERT_COP_FETCH_LABEL;
3310
3311     if (!chain)
3312         return NULL;
3313 #ifdef USE_ITHREADS
3314     if (chain->refcounted_he_keylen != 1)
3315         return NULL;
3316     if (*REF_HE_KEY(chain) != ':')
3317         return NULL;
3318 #else
3319     if ((STRLEN)HEK_LEN(chain->refcounted_he_hek) != 1)
3320         return NULL;
3321     if (*HEK_KEY(chain->refcounted_he_hek) != ':')
3322         return NULL;
3323 #endif
3324     /* Stop anyone trying to really mess us up by adding their own value for
3325        ':' into %^H  */
3326     if ((chain->refcounted_he_data[0] & HVrhek_typemask) != HVrhek_PV
3327         && (chain->refcounted_he_data[0] & HVrhek_typemask) != HVrhek_PV_UTF8)
3328         return NULL;
3329
3330     if (len)
3331         *len = chain->refcounted_he_val.refcounted_he_u_len;
3332     if (flags) {
3333         *flags = ((chain->refcounted_he_data[0] & HVrhek_typemask)
3334                   == HVrhek_PV_UTF8) ? SVf_UTF8 : 0;
3335     }
3336     return chain->refcounted_he_data + 1;
3337 }
3338
3339 /*
3340 =for apidoc cop_store_label
3341
3342 Save a label into a C<cop_hints_hash>. You need to set flags to C<SVf_UTF8>
3343 for a utf-8 label.
3344
3345 =cut
3346 */
3347
3348 void
3349 Perl_cop_store_label(pTHX_ COP *const cop, const char *label, STRLEN len,
3350                      U32 flags)
3351 {
3352     SV *labelsv;
3353     PERL_ARGS_ASSERT_COP_STORE_LABEL;
3354
3355     if (flags & ~(SVf_UTF8))
3356         Perl_croak(aTHX_ "panic: cop_store_label illegal flag bits 0x%" UVxf,
3357                    (UV)flags);
3358     labelsv = newSVpvn_flags(label, len, SVs_TEMP);
3359     if (flags & SVf_UTF8)
3360         SvUTF8_on(labelsv);
3361     cop->cop_hints_hash
3362         = refcounted_he_new_pvs(cop->cop_hints_hash, ":", labelsv, 0);
3363 }
3364
3365 /*
3366 =for apidoc hv_assert
3367
3368 Check that a hash is in an internally consistent state.
3369
3370 =cut
3371 */
3372
3373 #ifdef DEBUGGING
3374
3375 void
3376 Perl_hv_assert(pTHX_ HV *hv)
3377 {
3378     dVAR;
3379     HE* entry;
3380     int withflags = 0;
3381     int placeholders = 0;
3382     int real = 0;
3383     int bad = 0;
3384     const I32 riter = HvRITER_get(hv);
3385     HE *eiter = HvEITER_get(hv);
3386
3387     PERL_ARGS_ASSERT_HV_ASSERT;
3388
3389     (void)hv_iterinit(hv);
3390
3391     while ((entry = hv_iternext_flags(hv, HV_ITERNEXT_WANTPLACEHOLDERS))) {
3392         /* sanity check the values */
3393         if (HeVAL(entry) == &PL_sv_placeholder)
3394             placeholders++;
3395         else
3396             real++;
3397         /* sanity check the keys */
3398         if (HeSVKEY(entry)) {
3399             NOOP;   /* Don't know what to check on SV keys.  */
3400         } else if (HeKUTF8(entry)) {
3401             withflags++;
3402             if (HeKWASUTF8(entry)) {
3403                 PerlIO_printf(Perl_debug_log,
3404                             "hash key has both WASUTF8 and UTF8: '%.*s'\n",
3405                             (int) HeKLEN(entry),  HeKEY(entry));
3406                 bad = 1;
3407             }
3408         } else if (HeKWASUTF8(entry))
3409             withflags++;
3410     }
3411     if (!SvTIED_mg((const SV *)hv, PERL_MAGIC_tied)) {
3412         static const char bad_count[] = "Count %d %s(s), but hash reports %d\n";
3413         const int nhashkeys = HvUSEDKEYS(hv);
3414         const int nhashplaceholders = HvPLACEHOLDERS_get(hv);
3415
3416         if (nhashkeys != real) {
3417             PerlIO_printf(Perl_debug_log, bad_count, real, "keys", nhashkeys );
3418             bad = 1;
3419         }
3420         if (nhashplaceholders != placeholders) {
3421             PerlIO_printf(Perl_debug_log, bad_count, placeholders, "placeholder", nhashplaceholders );
3422             bad = 1;
3423         }
3424     }
3425     if (withflags && ! HvHASKFLAGS(hv)) {
3426         PerlIO_printf(Perl_debug_log,
3427                     "Hash has HASKFLAGS off but I count %d key(s) with flags\n",
3428                     withflags);
3429         bad = 1;
3430     }
3431     if (bad) {
3432         sv_dump(MUTABLE_SV(hv));
3433     }
3434     HvRITER_set(hv, riter);             /* Restore hash iterator state */
3435     HvEITER_set(hv, eiter);
3436 }
3437
3438 #endif
3439
3440 /*
3441  * Local variables:
3442  * c-indentation-style: bsd
3443  * c-basic-offset: 4
3444  * indent-tabs-mode: t
3445  * End:
3446  *
3447  * ex: set ts=8 sts=4 sw=4 noet:
3448  */