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