244feb63ca046f8f4002a89cd68f7a4291fc1ba5
[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         } else if (xhv->xhv_keys > (IV)xhv->xhv_max) {
821             hsplit(hv);
822         } else if(!HvREHASH(hv)) {
823             U32 n_links = 1;
824
825             while ((counter = HeNEXT(counter)))
826                 n_links++;
827
828             if (n_links > HV_MAX_LENGTH_BEFORE_SPLIT) {
829                 /* Use only the old HvKEYS(hv) > HvMAX(hv) condition to limit
830                    bucket splits on a rehashed hash, as we're not going to
831                    split it again, and if someone is lucky (evil) enough to
832                    get all the keys in one list they could exhaust our memory
833                    as we repeatedly double the number of buckets on every
834                    entry. Linear search feels a less worse thing to do.  */
835                 hsplit(hv);
836             }
837         }
838     }
839
840     if (return_svp) {
841         return entry ? (void *) &HeVAL(entry) : NULL;
842     }
843     return (void *) entry;
844 }
845
846 STATIC void
847 S_hv_magic_check(HV *hv, bool *needs_copy, bool *needs_store)
848 {
849     const MAGIC *mg = SvMAGIC(hv);
850
851     PERL_ARGS_ASSERT_HV_MAGIC_CHECK;
852
853     *needs_copy = FALSE;
854     *needs_store = TRUE;
855     while (mg) {
856         if (isUPPER(mg->mg_type)) {
857             *needs_copy = TRUE;
858             if (mg->mg_type == PERL_MAGIC_tied) {
859                 *needs_store = FALSE;
860                 return; /* We've set all there is to set. */
861             }
862         }
863         mg = mg->mg_moremagic;
864     }
865 }
866
867 /*
868 =for apidoc hv_scalar
869
870 Evaluates the hash in scalar context and returns the result. Handles magic when the hash is tied.
871
872 =cut
873 */
874
875 SV *
876 Perl_hv_scalar(pTHX_ HV *hv)
877 {
878     SV *sv;
879
880     PERL_ARGS_ASSERT_HV_SCALAR;
881
882     if (SvRMAGICAL(hv)) {
883         MAGIC * const mg = mg_find((const SV *)hv, PERL_MAGIC_tied);
884         if (mg)
885             return magic_scalarpack(hv, mg);
886     }
887
888     sv = sv_newmortal();
889     if (HvTOTALKEYS((const HV *)hv)) 
890         Perl_sv_setpvf(aTHX_ sv, "%ld/%ld",
891                 (long)HvFILL(hv), (long)HvMAX(hv) + 1);
892     else
893         sv_setiv(sv, 0);
894     
895     return sv;
896 }
897
898 /*
899 =for apidoc hv_delete
900
901 Deletes a key/value pair in the hash.  The value SV is removed from the
902 hash and returned to the caller.  The C<klen> is the length of the key.
903 The C<flags> value will normally be zero; if set to G_DISCARD then NULL
904 will be returned.
905
906 =for apidoc hv_delete_ent
907
908 Deletes a key/value pair in the hash.  The value SV is removed from the
909 hash and returned to the caller.  The C<flags> value will normally be zero;
910 if set to G_DISCARD then NULL will be returned.  C<hash> can be a valid
911 precomputed hash value, or 0 to ask for it to be computed.
912
913 =cut
914 */
915
916 STATIC SV *
917 S_hv_delete_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen,
918                    int k_flags, I32 d_flags, U32 hash)
919 {
920     dVAR;
921     register XPVHV* xhv;
922     register HE *entry;
923     register HE **oentry;
924     HE *const *first_entry;
925     bool is_utf8 = (k_flags & HVhek_UTF8) ? TRUE : FALSE;
926     int masked_flags;
927
928     if (SvRMAGICAL(hv)) {
929         bool needs_copy;
930         bool needs_store;
931         hv_magic_check (hv, &needs_copy, &needs_store);
932
933         if (needs_copy) {
934             SV *sv;
935             entry = (HE *) hv_common(hv, keysv, key, klen,
936                                      k_flags & ~HVhek_FREEKEY,
937                                      HV_FETCH_LVALUE|HV_DISABLE_UVAR_XKEY,
938                                      NULL, hash);
939             sv = entry ? HeVAL(entry) : NULL;
940             if (sv) {
941                 if (SvMAGICAL(sv)) {
942                     mg_clear(sv);
943                 }
944                 if (!needs_store) {
945                     if (mg_find(sv, PERL_MAGIC_tiedelem)) {
946                         /* No longer an element */
947                         sv_unmagic(sv, PERL_MAGIC_tiedelem);
948                         return sv;
949                     }           
950                     return NULL;                /* element cannot be deleted */
951                 }
952 #ifdef ENV_IS_CASELESS
953                 else if (mg_find((const SV *)hv, PERL_MAGIC_env)) {
954                     /* XXX This code isn't UTF8 clean.  */
955                     keysv = newSVpvn_flags(key, klen, SVs_TEMP);
956                     if (k_flags & HVhek_FREEKEY) {
957                         Safefree(key);
958                     }
959                     key = strupr(SvPVX(keysv));
960                     is_utf8 = 0;
961                     k_flags = 0;
962                     hash = 0;
963                 }
964 #endif
965             }
966         }
967     }
968     xhv = (XPVHV*)SvANY(hv);
969     if (!HvARRAY(hv))
970         return NULL;
971
972     if (is_utf8) {
973         const char * const keysave = key;
974         key = (char*)bytes_from_utf8((U8*)key, &klen, &is_utf8);
975
976         if (is_utf8)
977             k_flags |= HVhek_UTF8;
978         else
979             k_flags &= ~HVhek_UTF8;
980         if (key != keysave) {
981             if (k_flags & HVhek_FREEKEY) {
982                 /* This shouldn't happen if our caller does what we expect,
983                    but strictly the API allows it.  */
984                 Safefree(keysave);
985             }
986             k_flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
987         }
988         HvHASKFLAGS_on(MUTABLE_SV(hv));
989     }
990
991     if (HvREHASH(hv)) {
992         PERL_HASH_INTERNAL(hash, key, klen);
993     } else if (!hash) {
994         if (keysv && (SvIsCOW_shared_hash(keysv))) {
995             hash = SvSHARED_HASH(keysv);
996         } else {
997             PERL_HASH(hash, key, klen);
998         }
999     }
1000
1001     masked_flags = (k_flags & HVhek_MASK);
1002
1003     first_entry = oentry = &(HvARRAY(hv))[hash & (I32) HvMAX(hv)];
1004     entry = *oentry;
1005     for (; entry; oentry = &HeNEXT(entry), entry = *oentry) {
1006         SV *sv;
1007         if (HeHASH(entry) != hash)              /* strings can't be equal */
1008             continue;
1009         if (HeKLEN(entry) != (I32)klen)
1010             continue;
1011         if (HeKEY(entry) != key && memNE(HeKEY(entry),key,klen))        /* is this it? */
1012             continue;
1013         if ((HeKFLAGS(entry) ^ masked_flags) & HVhek_UTF8)
1014             continue;
1015
1016         if (hv == PL_strtab) {
1017             if (k_flags & HVhek_FREEKEY)
1018                 Safefree(key);
1019             Perl_croak(aTHX_ S_strtab_error, "delete");
1020         }
1021
1022         /* if placeholder is here, it's already been deleted.... */
1023         if (HeVAL(entry) == &PL_sv_placeholder) {
1024             if (k_flags & HVhek_FREEKEY)
1025                 Safefree(key);
1026             return NULL;
1027         }
1028         if (SvREADONLY(hv) && HeVAL(entry) && SvREADONLY(HeVAL(entry))) {
1029             hv_notallowed(k_flags, key, klen,
1030                             "Attempt to delete readonly key '%"SVf"' from"
1031                             " a restricted hash");
1032         }
1033         if (k_flags & HVhek_FREEKEY)
1034             Safefree(key);
1035
1036         if (d_flags & G_DISCARD)
1037             sv = NULL;
1038         else {
1039             sv = sv_2mortal(HeVAL(entry));
1040             HeVAL(entry) = &PL_sv_placeholder;
1041         }
1042
1043         /*
1044          * If a restricted hash, rather than really deleting the entry, put
1045          * a placeholder there. This marks the key as being "approved", so
1046          * we can still access via not-really-existing key without raising
1047          * an error.
1048          */
1049         if (SvREADONLY(hv)) {
1050             SvREFCNT_dec(HeVAL(entry));
1051             HeVAL(entry) = &PL_sv_placeholder;
1052             /* We'll be saving this slot, so the number of allocated keys
1053              * doesn't go down, but the number placeholders goes up */
1054             HvPLACEHOLDERS(hv)++;
1055         } else {
1056             *oentry = HeNEXT(entry);
1057             if (SvOOK(hv) && entry == HvAUX(hv)->xhv_eiter /* HvEITER(hv) */)
1058                 HvLAZYDEL_on(hv);
1059             else
1060                 hv_free_ent(hv, entry);
1061             xhv->xhv_keys--; /* HvTOTALKEYS(hv)-- */
1062             if (xhv->xhv_keys == 0)
1063                 HvHASKFLAGS_off(hv);
1064         }
1065         return sv;
1066     }
1067     if (SvREADONLY(hv)) {
1068         hv_notallowed(k_flags, key, klen,
1069                         "Attempt to delete disallowed key '%"SVf"' from"
1070                         " a restricted hash");
1071     }
1072
1073     if (k_flags & HVhek_FREEKEY)
1074         Safefree(key);
1075     return NULL;
1076 }
1077
1078 STATIC void
1079 S_hsplit(pTHX_ HV *hv)
1080 {
1081     dVAR;
1082     register XPVHV* const xhv = (XPVHV*)SvANY(hv);
1083     const I32 oldsize = (I32) xhv->xhv_max+1; /* HvMAX(hv)+1 (sick) */
1084     register I32 newsize = oldsize * 2;
1085     register I32 i;
1086     char *a = (char*) HvARRAY(hv);
1087     register HE **aep;
1088     register HE **oentry;
1089     int longest_chain = 0;
1090     int was_shared;
1091
1092     PERL_ARGS_ASSERT_HSPLIT;
1093
1094     /*PerlIO_printf(PerlIO_stderr(), "hsplit called for %p which had %d\n",
1095       (void*)hv, (int) oldsize);*/
1096
1097     if (HvPLACEHOLDERS_get(hv) && !SvREADONLY(hv)) {
1098       /* Can make this clear any placeholders first for non-restricted hashes,
1099          even though Storable rebuilds restricted hashes by putting in all the
1100          placeholders (first) before turning on the readonly flag, because
1101          Storable always pre-splits the hash.  */
1102       hv_clear_placeholders(hv);
1103     }
1104                
1105     PL_nomemok = TRUE;
1106 #if defined(STRANGE_MALLOC) || defined(MYMALLOC)
1107     Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1108           + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1109     if (!a) {
1110       PL_nomemok = FALSE;
1111       return;
1112     }
1113     if (SvOOK(hv)) {
1114         Move(&a[oldsize * sizeof(HE*)], &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1115     }
1116 #else
1117     Newx(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1118         + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1119     if (!a) {
1120       PL_nomemok = FALSE;
1121       return;
1122     }
1123     Copy(HvARRAY(hv), a, oldsize * sizeof(HE*), char);
1124     if (SvOOK(hv)) {
1125         Copy(HvAUX(hv), &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1126     }
1127     if (oldsize >= 64) {
1128         offer_nice_chunk(HvARRAY(hv),
1129                          PERL_HV_ARRAY_ALLOC_BYTES(oldsize)
1130                          + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0));
1131     }
1132     else
1133         Safefree(HvARRAY(hv));
1134 #endif
1135
1136     PL_nomemok = FALSE;
1137     Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char);     /* zero 2nd half*/
1138     xhv->xhv_max = --newsize;   /* HvMAX(hv) = --newsize */
1139     HvARRAY(hv) = (HE**) a;
1140     aep = (HE**)a;
1141
1142     for (i=0; i<oldsize; i++,aep++) {
1143         int left_length = 0;
1144         int right_length = 0;
1145         register HE *entry;
1146         register HE **bep;
1147
1148         if (!*aep)                              /* non-existent */
1149             continue;
1150         bep = aep+oldsize;
1151         for (oentry = aep, entry = *aep; entry; entry = *oentry) {
1152             if ((HeHASH(entry) & newsize) != (U32)i) {
1153                 *oentry = HeNEXT(entry);
1154                 HeNEXT(entry) = *bep;
1155                 *bep = entry;
1156                 right_length++;
1157                 continue;
1158             }
1159             else {
1160                 oentry = &HeNEXT(entry);
1161                 left_length++;
1162             }
1163         }
1164         /* I think we don't actually need to keep track of the longest length,
1165            merely flag if anything is too long. But for the moment while
1166            developing this code I'll track it.  */
1167         if (left_length > longest_chain)
1168             longest_chain = left_length;
1169         if (right_length > longest_chain)
1170             longest_chain = right_length;
1171     }
1172
1173
1174     /* Pick your policy for "hashing isn't working" here:  */
1175     if (longest_chain <= HV_MAX_LENGTH_BEFORE_SPLIT /* split worked?  */
1176         || HvREHASH(hv)) {
1177         return;
1178     }
1179
1180     if (hv == PL_strtab) {
1181         /* Urg. Someone is doing something nasty to the string table.
1182            Can't win.  */
1183         return;
1184     }
1185
1186     /* Awooga. Awooga. Pathological data.  */
1187     /*PerlIO_printf(PerlIO_stderr(), "%p %d of %d with %d/%d buckets\n", (void*)hv,
1188       longest_chain, HvTOTALKEYS(hv), HvFILL(hv),  1+HvMAX(hv));*/
1189
1190     ++newsize;
1191     Newxz(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1192          + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1193     if (SvOOK(hv)) {
1194         Copy(HvAUX(hv), &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1195     }
1196
1197     was_shared = HvSHAREKEYS(hv);
1198
1199     HvSHAREKEYS_off(hv);
1200     HvREHASH_on(hv);
1201
1202     aep = HvARRAY(hv);
1203
1204     for (i=0; i<newsize; i++,aep++) {
1205         register HE *entry = *aep;
1206         while (entry) {
1207             /* We're going to trash this HE's next pointer when we chain it
1208                into the new hash below, so store where we go next.  */
1209             HE * const next = HeNEXT(entry);
1210             UV hash;
1211             HE **bep;
1212
1213             /* Rehash it */
1214             PERL_HASH_INTERNAL(hash, HeKEY(entry), HeKLEN(entry));
1215
1216             if (was_shared) {
1217                 /* Unshare it.  */
1218                 HEK * const new_hek
1219                     = save_hek_flags(HeKEY(entry), HeKLEN(entry),
1220                                      hash, HeKFLAGS(entry));
1221                 unshare_hek (HeKEY_hek(entry));
1222                 HeKEY_hek(entry) = new_hek;
1223             } else {
1224                 /* Not shared, so simply write the new hash in. */
1225                 HeHASH(entry) = hash;
1226             }
1227             /*PerlIO_printf(PerlIO_stderr(), "%d ", HeKFLAGS(entry));*/
1228             HEK_REHASH_on(HeKEY_hek(entry));
1229             /*PerlIO_printf(PerlIO_stderr(), "%d\n", HeKFLAGS(entry));*/
1230
1231             /* Copy oentry to the correct new chain.  */
1232             bep = ((HE**)a) + (hash & (I32) xhv->xhv_max);
1233             HeNEXT(entry) = *bep;
1234             *bep = entry;
1235
1236             entry = next;
1237         }
1238     }
1239     Safefree (HvARRAY(hv));
1240     HvARRAY(hv) = (HE **)a;
1241 }
1242
1243 void
1244 Perl_hv_ksplit(pTHX_ HV *hv, IV newmax)
1245 {
1246     dVAR;
1247     register XPVHV* xhv = (XPVHV*)SvANY(hv);
1248     const I32 oldsize = (I32) xhv->xhv_max+1; /* HvMAX(hv)+1 (sick) */
1249     register I32 newsize;
1250     register I32 i;
1251     register char *a;
1252     register HE **aep;
1253     register HE *entry;
1254     register HE **oentry;
1255
1256     PERL_ARGS_ASSERT_HV_KSPLIT;
1257
1258     newsize = (I32) newmax;                     /* possible truncation here */
1259     if (newsize != newmax || newmax <= oldsize)
1260         return;
1261     while ((newsize & (1 + ~newsize)) != newsize) {
1262         newsize &= ~(newsize & (1 + ~newsize)); /* get proper power of 2 */
1263     }
1264     if (newsize < newmax)
1265         newsize *= 2;
1266     if (newsize < newmax)
1267         return;                                 /* overflow detection */
1268
1269     a = (char *) HvARRAY(hv);
1270     if (a) {
1271         PL_nomemok = TRUE;
1272 #if defined(STRANGE_MALLOC) || defined(MYMALLOC)
1273         Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1274               + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1275         if (!a) {
1276           PL_nomemok = FALSE;
1277           return;
1278         }
1279         if (SvOOK(hv)) {
1280             Copy(&a[oldsize * sizeof(HE*)], &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1281         }
1282 #else
1283         Newx(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
1284             + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
1285         if (!a) {
1286           PL_nomemok = FALSE;
1287           return;
1288         }
1289         Copy(HvARRAY(hv), a, oldsize * sizeof(HE*), char);
1290         if (SvOOK(hv)) {
1291             Copy(HvAUX(hv), &a[newsize * sizeof(HE*)], 1, struct xpvhv_aux);
1292         }
1293         if (oldsize >= 64) {
1294             offer_nice_chunk(HvARRAY(hv),
1295                              PERL_HV_ARRAY_ALLOC_BYTES(oldsize)
1296                              + (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0));
1297         }
1298         else
1299             Safefree(HvARRAY(hv));
1300 #endif
1301         PL_nomemok = FALSE;
1302         Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char); /* zero 2nd half*/
1303     }
1304     else {
1305         Newxz(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
1306     }
1307     xhv->xhv_max = --newsize;   /* HvMAX(hv) = --newsize */
1308     HvARRAY(hv) = (HE **) a;
1309     if (!xhv->xhv_keys /* !HvTOTALKEYS(hv) */)  /* skip rest if no entries */
1310         return;
1311
1312     aep = (HE**)a;
1313     for (i=0; i<oldsize; i++,aep++) {
1314         if (!*aep)                              /* non-existent */
1315             continue;
1316         for (oentry = aep, entry = *aep; entry; entry = *oentry) {
1317             register I32 j = (HeHASH(entry) & newsize);
1318
1319             if (j != i) {
1320                 j -= i;
1321                 *oentry = HeNEXT(entry);
1322                 HeNEXT(entry) = aep[j];
1323                 aep[j] = entry;
1324                 continue;
1325             }
1326             else
1327                 oentry = &HeNEXT(entry);
1328         }
1329     }
1330 }
1331
1332 HV *
1333 Perl_newHVhv(pTHX_ HV *ohv)
1334 {
1335     dVAR;
1336     HV * const hv = newHV();
1337     STRLEN hv_max;
1338
1339     if (!ohv || !HvTOTALKEYS(ohv))
1340         return hv;
1341     hv_max = HvMAX(ohv);
1342
1343     if (!SvMAGICAL((const SV *)ohv)) {
1344         /* It's an ordinary hash, so copy it fast. AMS 20010804 */
1345         STRLEN i;
1346         const bool shared = !!HvSHAREKEYS(ohv);
1347         HE **ents, ** const oents = (HE **)HvARRAY(ohv);
1348         char *a;
1349         Newx(a, PERL_HV_ARRAY_ALLOC_BYTES(hv_max+1), char);
1350         ents = (HE**)a;
1351
1352         /* In each bucket... */
1353         for (i = 0; i <= hv_max; i++) {
1354             HE *prev = NULL;
1355             HE *oent = oents[i];
1356
1357             if (!oent) {
1358                 ents[i] = NULL;
1359                 continue;
1360             }
1361
1362             /* Copy the linked list of entries. */
1363             for (; oent; oent = HeNEXT(oent)) {
1364                 const U32 hash   = HeHASH(oent);
1365                 const char * const key = HeKEY(oent);
1366                 const STRLEN len = HeKLEN(oent);
1367                 const int flags  = HeKFLAGS(oent);
1368                 HE * const ent   = new_HE();
1369                 SV *const val    = HeVAL(oent);
1370
1371                 HeVAL(ent) = SvIMMORTAL(val) ? val : newSVsv(val);
1372                 HeKEY_hek(ent)
1373                     = shared ? share_hek_flags(key, len, hash, flags)
1374                              :  save_hek_flags(key, len, hash, flags);
1375                 if (prev)
1376                     HeNEXT(prev) = ent;
1377                 else
1378                     ents[i] = ent;
1379                 prev = ent;
1380                 HeNEXT(ent) = NULL;
1381             }
1382         }
1383
1384         HvMAX(hv)   = hv_max;
1385         HvTOTALKEYS(hv)  = HvTOTALKEYS(ohv);
1386         HvARRAY(hv) = ents;
1387     } /* not magical */
1388     else {
1389         /* Iterate over ohv, copying keys and values one at a time. */
1390         HE *entry;
1391         const I32 riter = HvRITER_get(ohv);
1392         HE * const eiter = HvEITER_get(ohv);
1393         STRLEN hv_fill = HvFILL(ohv);
1394
1395         /* Can we use fewer buckets? (hv_max is always 2^n-1) */
1396         while (hv_max && hv_max + 1 >= hv_fill * 2)
1397             hv_max = hv_max / 2;
1398         HvMAX(hv) = hv_max;
1399
1400         hv_iterinit(ohv);
1401         while ((entry = hv_iternext_flags(ohv, 0))) {
1402             SV *const val = HeVAL(entry);
1403             (void)hv_store_flags(hv, HeKEY(entry), HeKLEN(entry),
1404                                  SvIMMORTAL(val) ? val : newSVsv(val),
1405                                  HeHASH(entry), HeKFLAGS(entry));
1406         }
1407         HvRITER_set(ohv, riter);
1408         HvEITER_set(ohv, eiter);
1409     }
1410
1411     return hv;
1412 }
1413
1414 /* A rather specialised version of newHVhv for copying %^H, ensuring all the
1415    magic stays on it.  */
1416 HV *
1417 Perl_hv_copy_hints_hv(pTHX_ HV *const ohv)
1418 {
1419     HV * const hv = newHV();
1420
1421     if (ohv && HvTOTALKEYS(ohv)) {
1422         STRLEN hv_max = HvMAX(ohv);
1423         STRLEN hv_fill = HvFILL(ohv);
1424         HE *entry;
1425         const I32 riter = HvRITER_get(ohv);
1426         HE * const eiter = HvEITER_get(ohv);
1427
1428         while (hv_max && hv_max + 1 >= hv_fill * 2)
1429             hv_max = hv_max / 2;
1430         HvMAX(hv) = hv_max;
1431
1432         hv_iterinit(ohv);
1433         while ((entry = hv_iternext_flags(ohv, 0))) {
1434             SV *const sv = newSVsv(HeVAL(entry));
1435             SV *heksv = newSVhek(HeKEY_hek(entry));
1436             sv_magic(sv, NULL, PERL_MAGIC_hintselem,
1437                      (char *)heksv, HEf_SVKEY);
1438             SvREFCNT_dec(heksv);
1439             (void)hv_store_flags(hv, HeKEY(entry), HeKLEN(entry),
1440                                  sv, HeHASH(entry), HeKFLAGS(entry));
1441         }
1442         HvRITER_set(ohv, riter);
1443         HvEITER_set(ohv, eiter);
1444     }
1445     hv_magic(hv, NULL, PERL_MAGIC_hints);
1446     return hv;
1447 }
1448
1449 void
1450 Perl_hv_free_ent(pTHX_ HV *hv, register HE *entry)
1451 {
1452     dVAR;
1453     SV *val;
1454
1455     PERL_ARGS_ASSERT_HV_FREE_ENT;
1456
1457     if (!entry)
1458         return;
1459     val = HeVAL(entry);
1460     if (HvNAME(hv) && anonymise_cv(HvNAME_HEK(hv), val) && GvCVu(val))
1461         mro_method_changed_in(hv);
1462     SvREFCNT_dec(val);
1463     if (HeKLEN(entry) == HEf_SVKEY) {
1464         SvREFCNT_dec(HeKEY_sv(entry));
1465         Safefree(HeKEY_hek(entry));
1466     }
1467     else if (HvSHAREKEYS(hv))
1468         unshare_hek(HeKEY_hek(entry));
1469     else
1470         Safefree(HeKEY_hek(entry));
1471     del_HE(entry);
1472 }
1473
1474 static I32
1475 S_anonymise_cv(pTHX_ HEK *stash, SV *val)
1476 {
1477     CV *cv;
1478
1479     PERL_ARGS_ASSERT_ANONYMISE_CV;
1480
1481     if (val && isGV(val) && isGV_with_GP(val) && (cv = GvCV(val))) {
1482         if ((SV *)CvGV(cv) == val) {
1483             GV *anongv;
1484
1485             if (stash) {
1486                 SV *gvname = newSVhek(stash);
1487                 sv_catpvs(gvname, "::__ANON__");
1488                 anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
1489                 SvREFCNT_dec(gvname);
1490             } else {
1491                 anongv = gv_fetchpvs("__ANON__::__ANON__", GV_ADDMULTI,
1492                                      SVt_PVCV);
1493             }
1494             CvGV(cv) = anongv;
1495             CvANON_on(cv);
1496             return 1;
1497         }
1498     }
1499     return 0;
1500 }
1501
1502 void
1503 Perl_hv_delayfree_ent(pTHX_ HV *hv, register HE *entry)
1504 {
1505     dVAR;
1506
1507     PERL_ARGS_ASSERT_HV_DELAYFREE_ENT;
1508
1509     if (!entry)
1510         return;
1511     /* SvREFCNT_inc to counter the SvREFCNT_dec in hv_free_ent  */
1512     sv_2mortal(SvREFCNT_inc(HeVAL(entry)));     /* free between statements */
1513     if (HeKLEN(entry) == HEf_SVKEY) {
1514         sv_2mortal(SvREFCNT_inc(HeKEY_sv(entry)));
1515     }
1516     hv_free_ent(hv, entry);
1517 }
1518
1519 /*
1520 =for apidoc hv_clear
1521
1522 Clears a hash, making it empty.
1523
1524 =cut
1525 */
1526
1527 void
1528 Perl_hv_clear(pTHX_ HV *hv)
1529 {
1530     dVAR;
1531     register XPVHV* xhv;
1532     if (!hv)
1533         return;
1534
1535     DEBUG_A(Perl_hv_assert(aTHX_ hv));
1536
1537     xhv = (XPVHV*)SvANY(hv);
1538
1539     if (SvREADONLY(hv) && HvARRAY(hv) != NULL) {
1540         /* restricted hash: convert all keys to placeholders */
1541         STRLEN i;
1542         for (i = 0; i <= xhv->xhv_max; i++) {
1543             HE *entry = (HvARRAY(hv))[i];
1544             for (; entry; entry = HeNEXT(entry)) {
1545                 /* not already placeholder */
1546                 if (HeVAL(entry) != &PL_sv_placeholder) {
1547                     if (HeVAL(entry) && SvREADONLY(HeVAL(entry))) {
1548                         SV* const keysv = hv_iterkeysv(entry);
1549                         Perl_croak(aTHX_
1550                                    "Attempt to delete readonly key '%"SVf"' from a restricted hash",
1551                                    (void*)keysv);
1552                     }
1553                     SvREFCNT_dec(HeVAL(entry));
1554                     HeVAL(entry) = &PL_sv_placeholder;
1555                     HvPLACEHOLDERS(hv)++;
1556                 }
1557             }
1558         }
1559         goto reset;
1560     }
1561
1562     hfreeentries(hv);
1563     HvPLACEHOLDERS_set(hv, 0);
1564     if (HvARRAY(hv))
1565         Zero(HvARRAY(hv), xhv->xhv_max+1 /* HvMAX(hv)+1 */, HE*);
1566
1567     if (SvRMAGICAL(hv))
1568         mg_clear(MUTABLE_SV(hv));
1569
1570     HvHASKFLAGS_off(hv);
1571     HvREHASH_off(hv);
1572     reset:
1573     if (SvOOK(hv)) {
1574         if(HvNAME_get(hv))
1575             mro_isa_changed_in(hv);
1576         HvEITER_set(hv, NULL);
1577     }
1578 }
1579
1580 /*
1581 =for apidoc hv_clear_placeholders
1582
1583 Clears any placeholders from a hash.  If a restricted hash has any of its keys
1584 marked as readonly and the key is subsequently deleted, the key is not actually
1585 deleted but is marked by assigning it a value of &PL_sv_placeholder.  This tags
1586 it so it will be ignored by future operations such as iterating over the hash,
1587 but will still allow the hash to have a value reassigned to the key at some
1588 future point.  This function clears any such placeholder keys from the hash.
1589 See Hash::Util::lock_keys() for an example of its use.
1590
1591 =cut
1592 */
1593
1594 void
1595 Perl_hv_clear_placeholders(pTHX_ HV *hv)
1596 {
1597     dVAR;
1598     const U32 items = (U32)HvPLACEHOLDERS_get(hv);
1599
1600     PERL_ARGS_ASSERT_HV_CLEAR_PLACEHOLDERS;
1601
1602     if (items)
1603         clear_placeholders(hv, items);
1604 }
1605
1606 static void
1607 S_clear_placeholders(pTHX_ HV *hv, U32 items)
1608 {
1609     dVAR;
1610     I32 i;
1611
1612     PERL_ARGS_ASSERT_CLEAR_PLACEHOLDERS;
1613
1614     if (items == 0)
1615         return;
1616
1617     i = HvMAX(hv);
1618     do {
1619         /* Loop down the linked list heads  */
1620         bool first = TRUE;
1621         HE **oentry = &(HvARRAY(hv))[i];
1622         HE *entry;
1623
1624         while ((entry = *oentry)) {
1625             if (HeVAL(entry) == &PL_sv_placeholder) {
1626                 *oentry = HeNEXT(entry);
1627                 if (entry == HvEITER_get(hv))
1628                     HvLAZYDEL_on(hv);
1629                 else
1630                     hv_free_ent(hv, entry);
1631
1632                 if (--items == 0) {
1633                     /* Finished.  */
1634                     HvTOTALKEYS(hv) -= (IV)HvPLACEHOLDERS_get(hv);
1635                     if (HvKEYS(hv) == 0)
1636                         HvHASKFLAGS_off(hv);
1637                     HvPLACEHOLDERS_set(hv, 0);
1638                     return;
1639                 }
1640             } else {
1641                 oentry = &HeNEXT(entry);
1642                 first = FALSE;
1643             }
1644         }
1645     } while (--i >= 0);
1646     /* You can't get here, hence assertion should always fail.  */
1647     assert (items == 0);
1648     assert (0);
1649 }
1650
1651 STATIC void
1652 S_hfreeentries(pTHX_ HV *hv)
1653 {
1654     /* This is the array that we're going to restore  */
1655     HE **const orig_array = HvARRAY(hv);
1656     HEK *name;
1657     int attempts = 100;
1658
1659     PERL_ARGS_ASSERT_HFREEENTRIES;
1660
1661     if (!orig_array)
1662         return;
1663
1664     if (HvNAME(hv) && orig_array != NULL) {
1665         /* symbol table: make all the contained subs ANON */
1666         STRLEN i;
1667         XPVHV *xhv = (XPVHV*)SvANY(hv);
1668
1669         for (i = 0; i <= xhv->xhv_max; i++) {
1670             HE *entry = (HvARRAY(hv))[i];
1671             for (; entry; entry = HeNEXT(entry)) {
1672                 SV *val = HeVAL(entry);
1673                 /* we need to put the subs in the __ANON__ symtable, as
1674                  * this one is being cleared. */
1675                 anonymise_cv(NULL, val);
1676             }
1677         }
1678     }
1679
1680     if (SvOOK(hv)) {
1681         /* If the hash is actually a symbol table with a name, look after the
1682            name.  */
1683         struct xpvhv_aux *iter = HvAUX(hv);
1684
1685         name = iter->xhv_name;
1686         iter->xhv_name = NULL;
1687     } else {
1688         name = NULL;
1689     }
1690
1691     /* orig_array remains unchanged throughout the loop. If after freeing all
1692        the entries it turns out that one of the little blighters has triggered
1693        an action that has caused HvARRAY to be re-allocated, then we set
1694        array to the new HvARRAY, and try again.  */
1695
1696     while (1) {
1697         /* This is the one we're going to try to empty.  First time round
1698            it's the original array.  (Hopefully there will only be 1 time
1699            round) */
1700         HE ** const array = HvARRAY(hv);
1701         I32 i = HvMAX(hv);
1702
1703         /* Because we have taken xhv_name out, the only allocated pointer
1704            in the aux structure that might exist is the backreference array.
1705         */
1706
1707         if (SvOOK(hv)) {
1708             HE *entry;
1709             struct mro_meta *meta;
1710             struct xpvhv_aux *iter = HvAUX(hv);
1711             /* If there are weak references to this HV, we need to avoid
1712                freeing them up here.  In particular we need to keep the AV
1713                visible as what we're deleting might well have weak references
1714                back to this HV, so the for loop below may well trigger
1715                the removal of backreferences from this array.  */
1716
1717             if (iter->xhv_backreferences) {
1718                 /* So donate them to regular backref magic to keep them safe.
1719                    The sv_magic will increase the reference count of the AV,
1720                    so we need to drop it first. */
1721                 SvREFCNT_dec(iter->xhv_backreferences);
1722                 if (AvFILLp(iter->xhv_backreferences) == -1) {
1723                     /* Turns out that the array is empty. Just free it.  */
1724                     SvREFCNT_dec(iter->xhv_backreferences);
1725
1726                 } else {
1727                     sv_magic(MUTABLE_SV(hv),
1728                              MUTABLE_SV(iter->xhv_backreferences),
1729                              PERL_MAGIC_backref, NULL, 0);
1730                 }
1731                 iter->xhv_backreferences = NULL;
1732             }
1733
1734             entry = iter->xhv_eiter; /* HvEITER(hv) */
1735             if (entry && HvLAZYDEL(hv)) {       /* was deleted earlier? */
1736                 HvLAZYDEL_off(hv);
1737                 hv_free_ent(hv, entry);
1738             }
1739             iter->xhv_riter = -1;       /* HvRITER(hv) = -1 */
1740             iter->xhv_eiter = NULL;     /* HvEITER(hv) = NULL */
1741
1742             if((meta = iter->xhv_mro_meta)) {
1743                 if (meta->mro_linear_all) {
1744                     SvREFCNT_dec(MUTABLE_SV(meta->mro_linear_all));
1745                     meta->mro_linear_all = NULL;
1746                     /* This is just acting as a shortcut pointer.  */
1747                     meta->mro_linear_current = NULL;
1748                 } else if (meta->mro_linear_current) {
1749                     /* Only the current MRO is stored, so this owns the data.
1750                      */
1751                     SvREFCNT_dec(meta->mro_linear_current);
1752                     meta->mro_linear_current = NULL;
1753                 }
1754                 if(meta->mro_nextmethod) SvREFCNT_dec(meta->mro_nextmethod);
1755                 SvREFCNT_dec(meta->isa);
1756                 Safefree(meta);
1757                 iter->xhv_mro_meta = NULL;
1758             }
1759
1760             /* There are now no allocated pointers in the aux structure.  */
1761
1762             SvFLAGS(hv) &= ~SVf_OOK; /* Goodbye, aux structure.  */
1763             /* What aux structure?  */
1764         }
1765
1766         /* make everyone else think the array is empty, so that the destructors
1767          * called for freed entries can't recusively mess with us */
1768         HvARRAY(hv) = NULL;
1769         ((XPVHV*) SvANY(hv))->xhv_keys = 0;
1770
1771
1772         do {
1773             /* Loop down the linked list heads  */
1774             HE *entry = array[i];
1775
1776             while (entry) {
1777                 register HE * const oentry = entry;
1778                 entry = HeNEXT(entry);
1779                 hv_free_ent(hv, oentry);
1780             }
1781         } while (--i >= 0);
1782
1783         /* As there are no allocated pointers in the aux structure, it's now
1784            safe to free the array we just cleaned up, if it's not the one we're
1785            going to put back.  */
1786         if (array != orig_array) {
1787             Safefree(array);
1788         }
1789
1790         if (!HvARRAY(hv)) {
1791             /* Good. No-one added anything this time round.  */
1792             break;
1793         }
1794
1795         if (SvOOK(hv)) {
1796             /* Someone attempted to iterate or set the hash name while we had
1797                the array set to 0.  We'll catch backferences on the next time
1798                round the while loop.  */
1799             assert(HvARRAY(hv));
1800
1801             if (HvAUX(hv)->xhv_name) {
1802                 unshare_hek_or_pvn(HvAUX(hv)->xhv_name, 0, 0, 0);
1803             }
1804         }
1805
1806         if (--attempts == 0) {
1807             Perl_die(aTHX_ "panic: hfreeentries failed to free hash - something is repeatedly re-creating entries");
1808         }
1809     }
1810         
1811     HvARRAY(hv) = orig_array;
1812
1813     /* If the hash was actually a symbol table, put the name back.  */
1814     if (name) {
1815         /* We have restored the original array.  If name is non-NULL, then
1816            the original array had an aux structure at the end. So this is
1817            valid:  */
1818         SvFLAGS(hv) |= SVf_OOK;
1819         HvAUX(hv)->xhv_name = name;
1820     }
1821 }
1822
1823 /*
1824 =for apidoc hv_undef
1825
1826 Undefines the hash.
1827
1828 =cut
1829 */
1830
1831 void
1832 Perl_hv_undef(pTHX_ HV *hv)
1833 {
1834     dVAR;
1835     register XPVHV* xhv;
1836     const char *name;
1837
1838     if (!hv)
1839         return;
1840     DEBUG_A(Perl_hv_assert(aTHX_ hv));
1841     xhv = (XPVHV*)SvANY(hv);
1842
1843     if ((name = HvNAME_get(hv)) && !PL_dirty)
1844         mro_isa_changed_in(hv);
1845
1846     hfreeentries(hv);
1847     if (name) {
1848         if (PL_stashcache)
1849             (void)hv_delete(PL_stashcache, name, HvNAMELEN_get(hv), G_DISCARD);
1850         hv_name_set(hv, NULL, 0, 0);
1851     }
1852     SvFLAGS(hv) &= ~SVf_OOK;
1853     Safefree(HvARRAY(hv));
1854     xhv->xhv_max   = 7; /* HvMAX(hv) = 7 (it's a normal hash) */
1855     HvARRAY(hv) = 0;
1856     HvPLACEHOLDERS_set(hv, 0);
1857
1858     if (SvRMAGICAL(hv))
1859         mg_clear(MUTABLE_SV(hv));
1860 }
1861
1862 /*
1863 =for apidoc hv_fill
1864
1865 Returns the number of hash buckets that happen to be in use. This function is
1866 wrapped by the macro C<HvFILL>.
1867
1868 Previously this value was stored in the HV structure, rather than being
1869 calculated on demand.
1870
1871 =cut
1872 */
1873
1874 STRLEN
1875 Perl_hv_fill(pTHX_ HV const *const hv)
1876 {
1877     STRLEN count = 0;
1878     HE **ents = HvARRAY(hv);
1879
1880     PERL_ARGS_ASSERT_HV_FILL;
1881
1882     if (ents) {
1883         HE *const *const end = ents + HvMAX(hv);
1884
1885         do {
1886             if (*ents)
1887                 ++count;
1888         } while (++ents <= end);
1889     }
1890     return count;
1891 }
1892
1893 static struct xpvhv_aux*
1894 S_hv_auxinit(HV *hv) {
1895     struct xpvhv_aux *iter;
1896     char *array;
1897
1898     PERL_ARGS_ASSERT_HV_AUXINIT;
1899
1900     if (!HvARRAY(hv)) {
1901         Newxz(array, PERL_HV_ARRAY_ALLOC_BYTES(HvMAX(hv) + 1)
1902             + sizeof(struct xpvhv_aux), char);
1903     } else {
1904         array = (char *) HvARRAY(hv);
1905         Renew(array, PERL_HV_ARRAY_ALLOC_BYTES(HvMAX(hv) + 1)
1906               + sizeof(struct xpvhv_aux), char);
1907     }
1908     HvARRAY(hv) = (HE**) array;
1909     /* SvOOK_on(hv) attacks the IV flags.  */
1910     SvFLAGS(hv) |= SVf_OOK;
1911     iter = HvAUX(hv);
1912
1913     iter->xhv_riter = -1;       /* HvRITER(hv) = -1 */
1914     iter->xhv_eiter = NULL;     /* HvEITER(hv) = NULL */
1915     iter->xhv_name = 0;
1916     iter->xhv_backreferences = 0;
1917     iter->xhv_mro_meta = NULL;
1918     return iter;
1919 }
1920
1921 /*
1922 =for apidoc hv_iterinit
1923
1924 Prepares a starting point to traverse a hash table.  Returns the number of
1925 keys in the hash (i.e. the same as C<HvKEYS(tb)>).  The return value is
1926 currently only meaningful for hashes without tie magic.
1927
1928 NOTE: Before version 5.004_65, C<hv_iterinit> used to return the number of
1929 hash buckets that happen to be in use.  If you still need that esoteric
1930 value, you can get it through the macro C<HvFILL(tb)>.
1931
1932
1933 =cut
1934 */
1935
1936 I32
1937 Perl_hv_iterinit(pTHX_ HV *hv)
1938 {
1939     PERL_ARGS_ASSERT_HV_ITERINIT;
1940
1941     /* FIXME: Are we not NULL, or do we croak? Place bets now! */
1942
1943     if (!hv)
1944         Perl_croak(aTHX_ "Bad hash");
1945
1946     if (SvOOK(hv)) {
1947         struct xpvhv_aux * const iter = HvAUX(hv);
1948         HE * const entry = iter->xhv_eiter; /* HvEITER(hv) */
1949         if (entry && HvLAZYDEL(hv)) {   /* was deleted earlier? */
1950             HvLAZYDEL_off(hv);
1951             hv_free_ent(hv, entry);
1952         }
1953         iter->xhv_riter = -1;   /* HvRITER(hv) = -1 */
1954         iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */
1955     } else {
1956         hv_auxinit(hv);
1957     }
1958
1959     /* used to be xhv->xhv_fill before 5.004_65 */
1960     return HvTOTALKEYS(hv);
1961 }
1962
1963 I32 *
1964 Perl_hv_riter_p(pTHX_ HV *hv) {
1965     struct xpvhv_aux *iter;
1966
1967     PERL_ARGS_ASSERT_HV_RITER_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_riter);
1974 }
1975
1976 HE **
1977 Perl_hv_eiter_p(pTHX_ HV *hv) {
1978     struct xpvhv_aux *iter;
1979
1980     PERL_ARGS_ASSERT_HV_EITER_P;
1981
1982     if (!hv)
1983         Perl_croak(aTHX_ "Bad hash");
1984
1985     iter = SvOOK(hv) ? HvAUX(hv) : hv_auxinit(hv);
1986     return &(iter->xhv_eiter);
1987 }
1988
1989 void
1990 Perl_hv_riter_set(pTHX_ HV *hv, I32 riter) {
1991     struct xpvhv_aux *iter;
1992
1993     PERL_ARGS_ASSERT_HV_RITER_SET;
1994
1995     if (!hv)
1996         Perl_croak(aTHX_ "Bad hash");
1997
1998     if (SvOOK(hv)) {
1999         iter = HvAUX(hv);
2000     } else {
2001         if (riter == -1)
2002             return;
2003
2004         iter = hv_auxinit(hv);
2005     }
2006     iter->xhv_riter = riter;
2007 }
2008
2009 void
2010 Perl_hv_eiter_set(pTHX_ HV *hv, HE *eiter) {
2011     struct xpvhv_aux *iter;
2012
2013     PERL_ARGS_ASSERT_HV_EITER_SET;
2014
2015     if (!hv)
2016         Perl_croak(aTHX_ "Bad hash");
2017
2018     if (SvOOK(hv)) {
2019         iter = HvAUX(hv);
2020     } else {
2021         /* 0 is the default so don't go malloc()ing a new structure just to
2022            hold 0.  */
2023         if (!eiter)
2024             return;
2025
2026         iter = hv_auxinit(hv);
2027     }
2028     iter->xhv_eiter = eiter;
2029 }
2030
2031 void
2032 Perl_hv_name_set(pTHX_ HV *hv, const char *name, U32 len, U32 flags)
2033 {
2034     dVAR;
2035     struct xpvhv_aux *iter;
2036     U32 hash;
2037
2038     PERL_ARGS_ASSERT_HV_NAME_SET;
2039     PERL_UNUSED_ARG(flags);
2040
2041     if (len > I32_MAX)
2042         Perl_croak(aTHX_ "panic: hv name too long (%"UVuf")", (UV) len);
2043
2044     if (SvOOK(hv)) {
2045         iter = HvAUX(hv);
2046         if (iter->xhv_name) {
2047             unshare_hek_or_pvn(iter->xhv_name, 0, 0, 0);
2048         }
2049     } else {
2050         if (name == 0)
2051             return;
2052
2053         iter = hv_auxinit(hv);
2054     }
2055     PERL_HASH(hash, name, len);
2056     iter->xhv_name = name ? share_hek(name, len, hash) : NULL;
2057 }
2058
2059 AV **
2060 Perl_hv_backreferences_p(pTHX_ HV *hv) {
2061     struct xpvhv_aux * const iter = SvOOK(hv) ? HvAUX(hv) : hv_auxinit(hv);
2062
2063     PERL_ARGS_ASSERT_HV_BACKREFERENCES_P;
2064     PERL_UNUSED_CONTEXT;
2065
2066     return &(iter->xhv_backreferences);
2067 }
2068
2069 void
2070 Perl_hv_kill_backrefs(pTHX_ HV *hv) {
2071     AV *av;
2072
2073     PERL_ARGS_ASSERT_HV_KILL_BACKREFS;
2074
2075     if (!SvOOK(hv))
2076         return;
2077
2078     av = HvAUX(hv)->xhv_backreferences;
2079
2080     if (av) {
2081         HvAUX(hv)->xhv_backreferences = 0;
2082         Perl_sv_kill_backrefs(aTHX_ MUTABLE_SV(hv), av);
2083         SvREFCNT_dec(av);
2084     }
2085 }
2086
2087 /*
2088 hv_iternext is implemented as a macro in hv.h
2089
2090 =for apidoc hv_iternext
2091
2092 Returns entries from a hash iterator.  See C<hv_iterinit>.
2093
2094 You may call C<hv_delete> or C<hv_delete_ent> on the hash entry that the
2095 iterator currently points to, without losing your place or invalidating your
2096 iterator.  Note that in this case the current entry is deleted from the hash
2097 with your iterator holding the last reference to it.  Your iterator is flagged
2098 to free the entry on the next call to C<hv_iternext>, so you must not discard
2099 your iterator immediately else the entry will leak - call C<hv_iternext> to
2100 trigger the resource deallocation.
2101
2102 =for apidoc hv_iternext_flags
2103
2104 Returns entries from a hash iterator.  See C<hv_iterinit> and C<hv_iternext>.
2105 The C<flags> value will normally be zero; if HV_ITERNEXT_WANTPLACEHOLDERS is
2106 set the placeholders keys (for restricted hashes) will be returned in addition
2107 to normal keys. By default placeholders are automatically skipped over.
2108 Currently a placeholder is implemented with a value that is
2109 C<&Perl_sv_placeholder>. Note that the implementation of placeholders and
2110 restricted hashes may change, and the implementation currently is
2111 insufficiently abstracted for any change to be tidy.
2112
2113 =cut
2114 */
2115
2116 HE *
2117 Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags)
2118 {
2119     dVAR;
2120     register XPVHV* xhv;
2121     register HE *entry;
2122     HE *oldentry;
2123     MAGIC* mg;
2124     struct xpvhv_aux *iter;
2125
2126     PERL_ARGS_ASSERT_HV_ITERNEXT_FLAGS;
2127
2128     if (!hv)
2129         Perl_croak(aTHX_ "Bad hash");
2130
2131     xhv = (XPVHV*)SvANY(hv);
2132
2133     if (!SvOOK(hv)) {
2134         /* Too many things (well, pp_each at least) merrily assume that you can
2135            call iv_iternext without calling hv_iterinit, so we'll have to deal
2136            with it.  */
2137         hv_iterinit(hv);
2138     }
2139     iter = HvAUX(hv);
2140
2141     oldentry = entry = iter->xhv_eiter; /* HvEITER(hv) */
2142     if (SvMAGICAL(hv) && SvRMAGICAL(hv)) {
2143         if ( ( mg = mg_find((const SV *)hv, PERL_MAGIC_tied) ) ) {
2144             SV * const key = sv_newmortal();
2145             if (entry) {
2146                 sv_setsv(key, HeSVKEY_force(entry));
2147                 SvREFCNT_dec(HeSVKEY(entry));       /* get rid of previous key */
2148             }
2149             else {
2150                 char *k;
2151                 HEK *hek;
2152
2153                 /* one HE per MAGICAL hash */
2154                 iter->xhv_eiter = entry = new_HE(); /* HvEITER(hv) = new_HE() */
2155                 Zero(entry, 1, HE);
2156                 Newxz(k, HEK_BASESIZE + sizeof(const SV *), char);
2157                 hek = (HEK*)k;
2158                 HeKEY_hek(entry) = hek;
2159                 HeKLEN(entry) = HEf_SVKEY;
2160             }
2161             magic_nextpack(MUTABLE_SV(hv),mg,key);
2162             if (SvOK(key)) {
2163                 /* force key to stay around until next time */
2164                 HeSVKEY_set(entry, SvREFCNT_inc_simple_NN(key));
2165                 return entry;               /* beware, hent_val is not set */
2166             }
2167             SvREFCNT_dec(HeVAL(entry));
2168             Safefree(HeKEY_hek(entry));
2169             del_HE(entry);
2170             iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */
2171             return NULL;
2172         }
2173     }
2174 #if defined(DYNAMIC_ENV_FETCH) && !defined(__riscos__)  /* set up %ENV for iteration */
2175     if (!entry && SvRMAGICAL((const SV *)hv)
2176         && mg_find((const SV *)hv, PERL_MAGIC_env)) {
2177         prime_env_iter();
2178 #ifdef VMS
2179         /* The prime_env_iter() on VMS just loaded up new hash values
2180          * so the iteration count needs to be reset back to the beginning
2181          */
2182         hv_iterinit(hv);
2183         iter = HvAUX(hv);
2184         oldentry = entry = iter->xhv_eiter; /* HvEITER(hv) */
2185 #endif
2186     }
2187 #endif
2188
2189     /* hv_iterint now ensures this.  */
2190     assert (HvARRAY(hv));
2191
2192     /* At start of hash, entry is NULL.  */
2193     if (entry)
2194     {
2195         entry = HeNEXT(entry);
2196         if (!(flags & HV_ITERNEXT_WANTPLACEHOLDERS)) {
2197             /*
2198              * Skip past any placeholders -- don't want to include them in
2199              * any iteration.
2200              */
2201             while (entry && HeVAL(entry) == &PL_sv_placeholder) {
2202                 entry = HeNEXT(entry);
2203             }
2204         }
2205     }
2206
2207     /* Skip the entire loop if the hash is empty.   */
2208     if ((flags & HV_ITERNEXT_WANTPLACEHOLDERS)
2209         ? HvTOTALKEYS(hv) : HvUSEDKEYS(hv)) {
2210         while (!entry) {
2211             /* OK. Come to the end of the current list.  Grab the next one.  */
2212
2213             iter->xhv_riter++; /* HvRITER(hv)++ */
2214             if (iter->xhv_riter > (I32)xhv->xhv_max /* HvRITER(hv) > HvMAX(hv) */) {
2215                 /* There is no next one.  End of the hash.  */
2216                 iter->xhv_riter = -1; /* HvRITER(hv) = -1 */
2217                 break;
2218             }
2219             entry = (HvARRAY(hv))[iter->xhv_riter];
2220
2221             if (!(flags & HV_ITERNEXT_WANTPLACEHOLDERS)) {
2222                 /* If we have an entry, but it's a placeholder, don't count it.
2223                    Try the next.  */
2224                 while (entry && HeVAL(entry) == &PL_sv_placeholder)
2225                     entry = HeNEXT(entry);
2226             }
2227             /* Will loop again if this linked list starts NULL
2228                (for HV_ITERNEXT_WANTPLACEHOLDERS)
2229                or if we run through it and find only placeholders.  */
2230         }
2231     }
2232
2233     if (oldentry && HvLAZYDEL(hv)) {            /* was deleted earlier? */
2234         HvLAZYDEL_off(hv);
2235         hv_free_ent(hv, oldentry);
2236     }
2237
2238     /*if (HvREHASH(hv) && entry && !HeKREHASH(entry))
2239       PerlIO_printf(PerlIO_stderr(), "Awooga %p %p\n", (void*)hv, (void*)entry);*/
2240
2241     iter->xhv_eiter = entry; /* HvEITER(hv) = entry */
2242     return entry;
2243 }
2244
2245 /*
2246 =for apidoc hv_iterkey
2247
2248 Returns the key from the current position of the hash iterator.  See
2249 C<hv_iterinit>.
2250
2251 =cut
2252 */
2253
2254 char *
2255 Perl_hv_iterkey(pTHX_ register HE *entry, I32 *retlen)
2256 {
2257     PERL_ARGS_ASSERT_HV_ITERKEY;
2258
2259     if (HeKLEN(entry) == HEf_SVKEY) {
2260         STRLEN len;
2261         char * const p = SvPV(HeKEY_sv(entry), len);
2262         *retlen = len;
2263         return p;
2264     }
2265     else {
2266         *retlen = HeKLEN(entry);
2267         return HeKEY(entry);
2268     }
2269 }
2270
2271 /* unlike hv_iterval(), this always returns a mortal copy of the key */
2272 /*
2273 =for apidoc hv_iterkeysv
2274
2275 Returns the key as an C<SV*> from the current position of the hash
2276 iterator.  The return value will always be a mortal copy of the key.  Also
2277 see C<hv_iterinit>.
2278
2279 =cut
2280 */
2281
2282 SV *
2283 Perl_hv_iterkeysv(pTHX_ register HE *entry)
2284 {
2285     PERL_ARGS_ASSERT_HV_ITERKEYSV;
2286
2287     return sv_2mortal(newSVhek(HeKEY_hek(entry)));
2288 }
2289
2290 /*
2291 =for apidoc hv_iterval
2292
2293 Returns the value from the current position of the hash iterator.  See
2294 C<hv_iterkey>.
2295
2296 =cut
2297 */
2298
2299 SV *
2300 Perl_hv_iterval(pTHX_ HV *hv, register HE *entry)
2301 {
2302     PERL_ARGS_ASSERT_HV_ITERVAL;
2303
2304     if (SvRMAGICAL(hv)) {
2305         if (mg_find((const SV *)hv, PERL_MAGIC_tied)) {
2306             SV* const sv = sv_newmortal();
2307             if (HeKLEN(entry) == HEf_SVKEY)
2308                 mg_copy(MUTABLE_SV(hv), sv, (char*)HeKEY_sv(entry), HEf_SVKEY);
2309             else
2310                 mg_copy(MUTABLE_SV(hv), sv, HeKEY(entry), HeKLEN(entry));
2311             return sv;
2312         }
2313     }
2314     return HeVAL(entry);
2315 }
2316
2317 /*
2318 =for apidoc hv_iternextsv
2319
2320 Performs an C<hv_iternext>, C<hv_iterkey>, and C<hv_iterval> in one
2321 operation.
2322
2323 =cut
2324 */
2325
2326 SV *
2327 Perl_hv_iternextsv(pTHX_ HV *hv, char **key, I32 *retlen)
2328 {
2329     HE * const he = hv_iternext_flags(hv, 0);
2330
2331     PERL_ARGS_ASSERT_HV_ITERNEXTSV;
2332
2333     if (!he)
2334         return NULL;
2335     *key = hv_iterkey(he, retlen);
2336     return hv_iterval(hv, he);
2337 }
2338
2339 /*
2340
2341 Now a macro in hv.h
2342
2343 =for apidoc hv_magic
2344
2345 Adds magic to a hash.  See C<sv_magic>.
2346
2347 =cut
2348 */
2349
2350 /* possibly free a shared string if no one has access to it
2351  * len and hash must both be valid for str.
2352  */
2353 void
2354 Perl_unsharepvn(pTHX_ const char *str, I32 len, U32 hash)
2355 {
2356     unshare_hek_or_pvn (NULL, str, len, hash);
2357 }
2358
2359
2360 void
2361 Perl_unshare_hek(pTHX_ HEK *hek)
2362 {
2363     assert(hek);
2364     unshare_hek_or_pvn(hek, NULL, 0, 0);
2365 }
2366
2367 /* possibly free a shared string if no one has access to it
2368    hek if non-NULL takes priority over the other 3, else str, len and hash
2369    are used.  If so, len and hash must both be valid for str.
2370  */
2371 STATIC void
2372 S_unshare_hek_or_pvn(pTHX_ const HEK *hek, const char *str, I32 len, U32 hash)
2373 {
2374     dVAR;
2375     register XPVHV* xhv;
2376     HE *entry;
2377     register HE **oentry;
2378     HE **first;
2379     bool is_utf8 = FALSE;
2380     int k_flags = 0;
2381     const char * const save = str;
2382     struct shared_he *he = NULL;
2383
2384     if (hek) {
2385         /* Find the shared he which is just before us in memory.  */
2386         he = (struct shared_he *)(((char *)hek)
2387                                   - STRUCT_OFFSET(struct shared_he,
2388                                                   shared_he_hek));
2389
2390         /* Assert that the caller passed us a genuine (or at least consistent)
2391            shared hek  */
2392         assert (he->shared_he_he.hent_hek == hek);
2393
2394         if (he->shared_he_he.he_valu.hent_refcount - 1) {
2395             --he->shared_he_he.he_valu.hent_refcount;
2396             return;
2397         }
2398
2399         hash = HEK_HASH(hek);
2400     } else if (len < 0) {
2401         STRLEN tmplen = -len;
2402         is_utf8 = TRUE;
2403         /* See the note in hv_fetch(). --jhi */
2404         str = (char*)bytes_from_utf8((U8*)str, &tmplen, &is_utf8);
2405         len = tmplen;
2406         if (is_utf8)
2407             k_flags = HVhek_UTF8;
2408         if (str != save)
2409             k_flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
2410     }
2411
2412     /* what follows was the moral equivalent of:
2413     if ((Svp = hv_fetch(PL_strtab, tmpsv, FALSE, hash))) {
2414         if (--*Svp == NULL)
2415             hv_delete(PL_strtab, str, len, G_DISCARD, hash);
2416     } */
2417     xhv = (XPVHV*)SvANY(PL_strtab);
2418     /* assert(xhv_array != 0) */
2419     first = oentry = &(HvARRAY(PL_strtab))[hash & (I32) HvMAX(PL_strtab)];
2420     if (he) {
2421         const HE *const he_he = &(he->shared_he_he);
2422         for (entry = *oentry; entry; oentry = &HeNEXT(entry), entry = *oentry) {
2423             if (entry == he_he)
2424                 break;
2425         }
2426     } else {
2427         const int flags_masked = k_flags & HVhek_MASK;
2428         for (entry = *oentry; entry; oentry = &HeNEXT(entry), entry = *oentry) {
2429             if (HeHASH(entry) != hash)          /* strings can't be equal */
2430                 continue;
2431             if (HeKLEN(entry) != len)
2432                 continue;
2433             if (HeKEY(entry) != str && memNE(HeKEY(entry),str,len))     /* is this it? */
2434                 continue;
2435             if (HeKFLAGS(entry) != flags_masked)
2436                 continue;
2437             break;
2438         }
2439     }
2440
2441     if (entry) {
2442         if (--entry->he_valu.hent_refcount == 0) {
2443             *oentry = HeNEXT(entry);
2444             Safefree(entry);
2445             xhv->xhv_keys--; /* HvTOTALKEYS(hv)-- */
2446         }
2447     }
2448
2449     if (!entry)
2450         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
2451                          "Attempt to free non-existent shared string '%s'%s"
2452                          pTHX__FORMAT,
2453                          hek ? HEK_KEY(hek) : str,
2454                          ((k_flags & HVhek_UTF8) ? " (utf8)" : "") pTHX__VALUE);
2455     if (k_flags & HVhek_FREEKEY)
2456         Safefree(str);
2457 }
2458
2459 /* get a (constant) string ptr from the global string table
2460  * string will get added if it is not already there.
2461  * len and hash must both be valid for str.
2462  */
2463 HEK *
2464 Perl_share_hek(pTHX_ const char *str, I32 len, register U32 hash)
2465 {
2466     bool is_utf8 = FALSE;
2467     int flags = 0;
2468     const char * const save = str;
2469
2470     PERL_ARGS_ASSERT_SHARE_HEK;
2471
2472     if (len < 0) {
2473       STRLEN tmplen = -len;
2474       is_utf8 = TRUE;
2475       /* See the note in hv_fetch(). --jhi */
2476       str = (char*)bytes_from_utf8((U8*)str, &tmplen, &is_utf8);
2477       len = tmplen;
2478       /* If we were able to downgrade here, then than means that we were passed
2479          in a key which only had chars 0-255, but was utf8 encoded.  */
2480       if (is_utf8)
2481           flags = HVhek_UTF8;
2482       /* If we found we were able to downgrade the string to bytes, then
2483          we should flag that it needs upgrading on keys or each.  Also flag
2484          that we need share_hek_flags to free the string.  */
2485       if (str != save)
2486           flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
2487     }
2488
2489     return share_hek_flags (str, len, hash, flags);
2490 }
2491
2492 STATIC HEK *
2493 S_share_hek_flags(pTHX_ const char *str, I32 len, register U32 hash, int flags)
2494 {
2495     dVAR;
2496     register HE *entry;
2497     const int flags_masked = flags & HVhek_MASK;
2498     const U32 hindex = hash & (I32) HvMAX(PL_strtab);
2499     register XPVHV * const xhv = (XPVHV*)SvANY(PL_strtab);
2500
2501     PERL_ARGS_ASSERT_SHARE_HEK_FLAGS;
2502
2503     /* what follows is the moral equivalent of:
2504
2505     if (!(Svp = hv_fetch(PL_strtab, str, len, FALSE)))
2506         hv_store(PL_strtab, str, len, NULL, hash);
2507
2508         Can't rehash the shared string table, so not sure if it's worth
2509         counting the number of entries in the linked list
2510     */
2511
2512     /* assert(xhv_array != 0) */
2513     entry = (HvARRAY(PL_strtab))[hindex];
2514     for (;entry; entry = HeNEXT(entry)) {
2515         if (HeHASH(entry) != hash)              /* strings can't be equal */
2516             continue;
2517         if (HeKLEN(entry) != len)
2518             continue;
2519         if (HeKEY(entry) != str && memNE(HeKEY(entry),str,len)) /* is this it? */
2520             continue;
2521         if (HeKFLAGS(entry) != flags_masked)
2522             continue;
2523         break;
2524     }
2525
2526     if (!entry) {
2527         /* What used to be head of the list.
2528            If this is NULL, then we're the first entry for this slot, which
2529            means we need to increate fill.  */
2530         struct shared_he *new_entry;
2531         HEK *hek;
2532         char *k;
2533         HE **const head = &HvARRAY(PL_strtab)[hindex];
2534         HE *const next = *head;
2535
2536         /* We don't actually store a HE from the arena and a regular HEK.
2537            Instead we allocate one chunk of memory big enough for both,
2538            and put the HEK straight after the HE. This way we can find the
2539            HEK directly from the HE.
2540         */
2541
2542         Newx(k, STRUCT_OFFSET(struct shared_he,
2543                                 shared_he_hek.hek_key[0]) + len + 2, char);
2544         new_entry = (struct shared_he *)k;
2545         entry = &(new_entry->shared_he_he);
2546         hek = &(new_entry->shared_he_hek);
2547
2548         Copy(str, HEK_KEY(hek), len, char);
2549         HEK_KEY(hek)[len] = 0;
2550         HEK_LEN(hek) = len;
2551         HEK_HASH(hek) = hash;
2552         HEK_FLAGS(hek) = (unsigned char)flags_masked;
2553
2554         /* Still "point" to the HEK, so that other code need not know what
2555            we're up to.  */
2556         HeKEY_hek(entry) = hek;
2557         entry->he_valu.hent_refcount = 0;
2558         HeNEXT(entry) = next;
2559         *head = entry;
2560
2561         xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */
2562         if (!next) {                    /* initial entry? */
2563         } else if (xhv->xhv_keys > (IV)xhv->xhv_max /* HvKEYS(hv) > HvMAX(hv) */) {
2564                 hsplit(PL_strtab);
2565         }
2566     }
2567
2568     ++entry->he_valu.hent_refcount;
2569
2570     if (flags & HVhek_FREEKEY)
2571         Safefree(str);
2572
2573     return HeKEY_hek(entry);
2574 }
2575
2576 I32 *
2577 Perl_hv_placeholders_p(pTHX_ HV *hv)
2578 {
2579     dVAR;
2580     MAGIC *mg = mg_find((const SV *)hv, PERL_MAGIC_rhash);
2581
2582     PERL_ARGS_ASSERT_HV_PLACEHOLDERS_P;
2583
2584     if (!mg) {
2585         mg = sv_magicext(MUTABLE_SV(hv), 0, PERL_MAGIC_rhash, 0, 0, 0);
2586
2587         if (!mg) {
2588             Perl_die(aTHX_ "panic: hv_placeholders_p");
2589         }
2590     }
2591     return &(mg->mg_len);
2592 }
2593
2594
2595 I32
2596 Perl_hv_placeholders_get(pTHX_ const HV *hv)
2597 {
2598     dVAR;
2599     MAGIC * const mg = mg_find((const SV *)hv, PERL_MAGIC_rhash);
2600
2601     PERL_ARGS_ASSERT_HV_PLACEHOLDERS_GET;
2602
2603     return mg ? mg->mg_len : 0;
2604 }
2605
2606 void
2607 Perl_hv_placeholders_set(pTHX_ HV *hv, I32 ph)
2608 {
2609     dVAR;
2610     MAGIC * const mg = mg_find((const SV *)hv, PERL_MAGIC_rhash);
2611
2612     PERL_ARGS_ASSERT_HV_PLACEHOLDERS_SET;
2613
2614     if (mg) {
2615         mg->mg_len = ph;
2616     } else if (ph) {
2617         if (!sv_magicext(MUTABLE_SV(hv), 0, PERL_MAGIC_rhash, 0, 0, ph))
2618             Perl_die(aTHX_ "panic: hv_placeholders_set");
2619     }
2620     /* else we don't need to add magic to record 0 placeholders.  */
2621 }
2622
2623 STATIC SV *
2624 S_refcounted_he_value(pTHX_ const struct refcounted_he *he)
2625 {
2626     dVAR;
2627     SV *value;
2628
2629     PERL_ARGS_ASSERT_REFCOUNTED_HE_VALUE;
2630
2631     switch(he->refcounted_he_data[0] & HVrhek_typemask) {
2632     case HVrhek_undef:
2633         value = newSV(0);
2634         break;
2635     case HVrhek_delete:
2636         value = &PL_sv_placeholder;
2637         break;
2638     case HVrhek_IV:
2639         value = newSViv(he->refcounted_he_val.refcounted_he_u_iv);
2640         break;
2641     case HVrhek_UV:
2642         value = newSVuv(he->refcounted_he_val.refcounted_he_u_uv);
2643         break;
2644     case HVrhek_PV:
2645     case HVrhek_PV_UTF8:
2646         /* Create a string SV that directly points to the bytes in our
2647            structure.  */
2648         value = newSV_type(SVt_PV);
2649         SvPV_set(value, (char *) he->refcounted_he_data + 1);
2650         SvCUR_set(value, he->refcounted_he_val.refcounted_he_u_len);
2651         /* This stops anything trying to free it  */
2652         SvLEN_set(value, 0);
2653         SvPOK_on(value);
2654         SvREADONLY_on(value);
2655         if ((he->refcounted_he_data[0] & HVrhek_typemask) == HVrhek_PV_UTF8)
2656             SvUTF8_on(value);
2657         break;
2658     default:
2659         Perl_croak(aTHX_ "panic: refcounted_he_value bad flags %x",
2660                    he->refcounted_he_data[0]);
2661     }
2662     return value;
2663 }
2664
2665 /*
2666 =for apidoc refcounted_he_chain_2hv
2667
2668 Generates and returns a C<HV *> by walking up the tree starting at the passed
2669 in C<struct refcounted_he *>.
2670
2671 =cut
2672 */
2673 HV *
2674 Perl_refcounted_he_chain_2hv(pTHX_ const struct refcounted_he *chain)
2675 {
2676     dVAR;
2677     HV *hv = newHV();
2678     U32 placeholders = 0;
2679     /* We could chase the chain once to get an idea of the number of keys,
2680        and call ksplit.  But for now we'll make a potentially inefficient
2681        hash with only 8 entries in its array.  */
2682     const U32 max = HvMAX(hv);
2683
2684     if (!HvARRAY(hv)) {
2685         char *array;
2686         Newxz(array, PERL_HV_ARRAY_ALLOC_BYTES(max + 1), char);
2687         HvARRAY(hv) = (HE**)array;
2688     }
2689
2690     while (chain) {
2691 #ifdef USE_ITHREADS
2692         U32 hash = chain->refcounted_he_hash;
2693 #else
2694         U32 hash = HEK_HASH(chain->refcounted_he_hek);
2695 #endif
2696         HE **oentry = &((HvARRAY(hv))[hash & max]);
2697         HE *entry = *oentry;
2698         SV *value;
2699
2700         for (; entry; entry = HeNEXT(entry)) {
2701             if (HeHASH(entry) == hash) {
2702                 /* We might have a duplicate key here.  If so, entry is older
2703                    than the key we've already put in the hash, so if they are
2704                    the same, skip adding entry.  */
2705 #ifdef USE_ITHREADS
2706                 const STRLEN klen = HeKLEN(entry);
2707                 const char *const key = HeKEY(entry);
2708                 if (klen == chain->refcounted_he_keylen
2709                     && (!!HeKUTF8(entry)
2710                         == !!(chain->refcounted_he_data[0] & HVhek_UTF8))
2711                     && memEQ(key, REF_HE_KEY(chain), klen))
2712                     goto next_please;
2713 #else
2714                 if (HeKEY_hek(entry) == chain->refcounted_he_hek)
2715                     goto next_please;
2716                 if (HeKLEN(entry) == HEK_LEN(chain->refcounted_he_hek)
2717                     && HeKUTF8(entry) == HEK_UTF8(chain->refcounted_he_hek)
2718                     && memEQ(HeKEY(entry), HEK_KEY(chain->refcounted_he_hek),
2719                              HeKLEN(entry)))
2720                     goto next_please;
2721 #endif
2722             }
2723         }
2724         assert (!entry);
2725         entry = new_HE();
2726
2727 #ifdef USE_ITHREADS
2728         HeKEY_hek(entry)
2729             = share_hek_flags(REF_HE_KEY(chain),
2730                               chain->refcounted_he_keylen,
2731                               chain->refcounted_he_hash,
2732                               (chain->refcounted_he_data[0]
2733                                & (HVhek_UTF8|HVhek_WASUTF8)));
2734 #else
2735         HeKEY_hek(entry) = share_hek_hek(chain->refcounted_he_hek);
2736 #endif
2737         value = refcounted_he_value(chain);
2738         if (value == &PL_sv_placeholder)
2739             placeholders++;
2740         HeVAL(entry) = value;
2741
2742         /* Link it into the chain.  */
2743         HeNEXT(entry) = *oentry;
2744         *oentry = entry;
2745
2746         HvTOTALKEYS(hv)++;
2747
2748     next_please:
2749         chain = chain->refcounted_he_next;
2750     }
2751
2752     if (placeholders) {
2753         clear_placeholders(hv, placeholders);
2754         HvTOTALKEYS(hv) -= placeholders;
2755     }
2756
2757     /* We could check in the loop to see if we encounter any keys with key
2758        flags, but it's probably not worth it, as this per-hash flag is only
2759        really meant as an optimisation for things like Storable.  */
2760     HvHASKFLAGS_on(hv);
2761     DEBUG_A(Perl_hv_assert(aTHX_ hv));
2762
2763     return hv;
2764 }
2765
2766 SV *
2767 Perl_refcounted_he_fetch(pTHX_ const struct refcounted_he *chain, SV *keysv,
2768                          const char *key, STRLEN klen, int flags, U32 hash)
2769 {
2770     dVAR;
2771     /* Just to be awkward, if you're using this interface the UTF-8-or-not-ness
2772        of your key has to exactly match that which is stored.  */
2773     SV *value = &PL_sv_placeholder;
2774
2775     if (chain) {
2776         /* No point in doing any of this if there's nothing to find.  */
2777         bool is_utf8;
2778
2779         if (keysv) {
2780             if (flags & HVhek_FREEKEY)
2781                 Safefree(key);
2782             key = SvPV_const(keysv, klen);
2783             flags = 0;
2784             is_utf8 = (SvUTF8(keysv) != 0);
2785         } else {
2786             is_utf8 = ((flags & HVhek_UTF8) ? TRUE : FALSE);
2787         }
2788
2789         if (!hash) {
2790             if (keysv && (SvIsCOW_shared_hash(keysv))) {
2791                 hash = SvSHARED_HASH(keysv);
2792             } else {
2793                 PERL_HASH(hash, key, klen);
2794             }
2795         }
2796
2797         for (; chain; chain = chain->refcounted_he_next) {
2798 #ifdef USE_ITHREADS
2799             if (hash != chain->refcounted_he_hash)
2800                 continue;
2801             if (klen != chain->refcounted_he_keylen)
2802                 continue;
2803             if (memNE(REF_HE_KEY(chain),key,klen))
2804                 continue;
2805             if (!!is_utf8 != !!(chain->refcounted_he_data[0] & HVhek_UTF8))
2806                 continue;
2807 #else
2808             if (hash != HEK_HASH(chain->refcounted_he_hek))
2809                 continue;
2810             if (klen != (STRLEN)HEK_LEN(chain->refcounted_he_hek))
2811                 continue;
2812             if (memNE(HEK_KEY(chain->refcounted_he_hek),key,klen))
2813                 continue;
2814             if (!!is_utf8 != !!HEK_UTF8(chain->refcounted_he_hek))
2815                 continue;
2816 #endif
2817
2818             value = sv_2mortal(refcounted_he_value(chain));
2819             break;
2820         }
2821     }
2822
2823     if (flags & HVhek_FREEKEY)
2824         Safefree(key);
2825
2826     return value;
2827 }
2828
2829 /*
2830 =for apidoc refcounted_he_new
2831
2832 Creates a new C<struct refcounted_he>. As S<key> is copied, and value is
2833 stored in a compact form, all references remain the property of the caller.
2834 The C<struct refcounted_he> is returned with a reference count of 1.
2835
2836 =cut
2837 */
2838
2839 struct refcounted_he *
2840 Perl_refcounted_he_new(pTHX_ struct refcounted_he *const parent,
2841                        SV *const key, SV *const value) {
2842     dVAR;
2843     STRLEN key_len;
2844     const char *key_p = SvPV_const(key, key_len);
2845     STRLEN value_len = 0;
2846     const char *value_p = NULL;
2847     char value_type;
2848     char flags;
2849     bool is_utf8 = SvUTF8(key) ? TRUE : FALSE;
2850
2851     if (SvPOK(value)) {
2852         value_type = HVrhek_PV;
2853     } else if (SvIOK(value)) {
2854         value_type = SvUOK((const SV *)value) ? HVrhek_UV : HVrhek_IV;
2855     } else if (value == &PL_sv_placeholder) {
2856         value_type = HVrhek_delete;
2857     } else if (!SvOK(value)) {
2858         value_type = HVrhek_undef;
2859     } else {
2860         value_type = HVrhek_PV;
2861     }
2862
2863     if (value_type == HVrhek_PV) {
2864         /* Do it this way so that the SvUTF8() test is after the SvPV, in case
2865            the value is overloaded, and doesn't yet have the UTF-8flag set.  */
2866         value_p = SvPV_const(value, value_len);
2867         if (SvUTF8(value))
2868             value_type = HVrhek_PV_UTF8;
2869     }
2870     flags = value_type;
2871
2872     if (is_utf8) {
2873         /* Hash keys are always stored normalised to (yes) ISO-8859-1.
2874            As we're going to be building hash keys from this value in future,
2875            normalise it now.  */
2876         key_p = (char*)bytes_from_utf8((const U8*)key_p, &key_len, &is_utf8);
2877         flags |= is_utf8 ? HVhek_UTF8 : HVhek_WASUTF8;
2878     }
2879
2880     return refcounted_he_new_common(parent, key_p, key_len, flags, value_type,
2881                                     ((value_type == HVrhek_PV
2882                                       || value_type == HVrhek_PV_UTF8) ?
2883                                      (void *)value_p : (void *)value),
2884                                     value_len);
2885 }
2886
2887 static struct refcounted_he *
2888 S_refcounted_he_new_common(pTHX_ struct refcounted_he *const parent,
2889                            const char *const key_p, const STRLEN key_len,
2890                            const char flags, char value_type,
2891                            const void *value, const STRLEN value_len) {
2892     dVAR;
2893     struct refcounted_he *he;
2894     U32 hash;
2895     const bool is_pv = value_type == HVrhek_PV || value_type == HVrhek_PV_UTF8;
2896     STRLEN key_offset = is_pv ? value_len + 2 : 1;
2897
2898     PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_COMMON;
2899
2900 #ifdef USE_ITHREADS
2901     he = (struct refcounted_he*)
2902         PerlMemShared_malloc(sizeof(struct refcounted_he) - 1
2903                              + key_len
2904                              + key_offset);
2905 #else
2906     he = (struct refcounted_he*)
2907         PerlMemShared_malloc(sizeof(struct refcounted_he) - 1
2908                              + key_offset);
2909 #endif
2910
2911     he->refcounted_he_next = parent;
2912
2913     if (is_pv) {
2914         Copy((char *)value, he->refcounted_he_data + 1, value_len + 1, char);
2915         he->refcounted_he_val.refcounted_he_u_len = value_len;
2916     } else if (value_type == HVrhek_IV) {
2917         he->refcounted_he_val.refcounted_he_u_iv = SvIVX((const SV *)value);
2918     } else if (value_type == HVrhek_UV) {
2919         he->refcounted_he_val.refcounted_he_u_uv = SvUVX((const SV *)value);
2920     }
2921
2922     PERL_HASH(hash, key_p, key_len);
2923
2924 #ifdef USE_ITHREADS
2925     he->refcounted_he_hash = hash;
2926     he->refcounted_he_keylen = key_len;
2927     Copy(key_p, he->refcounted_he_data + key_offset, key_len, char);
2928 #else
2929     he->refcounted_he_hek = share_hek_flags(key_p, key_len, hash, flags);
2930 #endif
2931
2932     if (flags & HVhek_WASUTF8) {
2933         /* If it was downgraded from UTF-8, then the pointer returned from
2934            bytes_from_utf8 is an allocated pointer that we must free.  */
2935         Safefree(key_p);
2936     }
2937
2938     he->refcounted_he_data[0] = flags;
2939     he->refcounted_he_refcnt = 1;
2940
2941     return he;
2942 }
2943
2944 /*
2945 =for apidoc refcounted_he_free
2946
2947 Decrements the reference count of the passed in C<struct refcounted_he *>
2948 by one. If the reference count reaches zero the structure's memory is freed,
2949 and C<refcounted_he_free> iterates onto the parent node.
2950
2951 =cut
2952 */
2953
2954 void
2955 Perl_refcounted_he_free(pTHX_ struct refcounted_he *he) {
2956     dVAR;
2957     PERL_UNUSED_CONTEXT;
2958
2959     while (he) {
2960         struct refcounted_he *copy;
2961         U32 new_count;
2962
2963         HINTS_REFCNT_LOCK;
2964         new_count = --he->refcounted_he_refcnt;
2965         HINTS_REFCNT_UNLOCK;
2966         
2967         if (new_count) {
2968             return;
2969         }
2970
2971 #ifndef USE_ITHREADS
2972         unshare_hek_or_pvn (he->refcounted_he_hek, 0, 0, 0);
2973 #endif
2974         copy = he;
2975         he = he->refcounted_he_next;
2976         PerlMemShared_free(copy);
2977     }
2978 }
2979
2980 /* pp_entereval is aware that labels are stored with a key ':' at the top of
2981    the linked list.  */
2982 const char *
2983 Perl_fetch_cop_label(pTHX_ struct refcounted_he *const chain, STRLEN *len,
2984                      U32 *flags) {
2985     if (!chain)
2986         return NULL;
2987 #ifdef USE_ITHREADS
2988     if (chain->refcounted_he_keylen != 1)
2989         return NULL;
2990     if (*REF_HE_KEY(chain) != ':')
2991         return NULL;
2992 #else
2993     if ((STRLEN)HEK_LEN(chain->refcounted_he_hek) != 1)
2994         return NULL;
2995     if (*HEK_KEY(chain->refcounted_he_hek) != ':')
2996         return NULL;
2997 #endif
2998     /* Stop anyone trying to really mess us up by adding their own value for
2999        ':' into %^H  */
3000     if ((chain->refcounted_he_data[0] & HVrhek_typemask) != HVrhek_PV
3001         && (chain->refcounted_he_data[0] & HVrhek_typemask) != HVrhek_PV_UTF8)
3002         return NULL;
3003
3004     if (len)
3005         *len = chain->refcounted_he_val.refcounted_he_u_len;
3006     if (flags) {
3007         *flags = ((chain->refcounted_he_data[0] & HVrhek_typemask)
3008                   == HVrhek_PV_UTF8) ? SVf_UTF8 : 0;
3009     }
3010     return chain->refcounted_he_data + 1;
3011 }
3012
3013 /* As newSTATEOP currently gets passed plain char* labels, we will only provide
3014    that interface. Once it works out how to pass in length and UTF-8 ness, this
3015    function will need superseding.  */
3016 struct refcounted_he *
3017 Perl_store_cop_label(pTHX_ struct refcounted_he *const chain, const char *label)
3018 {
3019     PERL_ARGS_ASSERT_STORE_COP_LABEL;
3020
3021     return refcounted_he_new_common(chain, ":", 1, HVrhek_PV, HVrhek_PV,
3022                                     label, strlen(label));
3023 }
3024
3025 /*
3026 =for apidoc hv_assert
3027
3028 Check that a hash is in an internally consistent state.
3029
3030 =cut
3031 */
3032
3033 #ifdef DEBUGGING
3034
3035 void
3036 Perl_hv_assert(pTHX_ HV *hv)
3037 {
3038     dVAR;
3039     HE* entry;
3040     int withflags = 0;
3041     int placeholders = 0;
3042     int real = 0;
3043     int bad = 0;
3044     const I32 riter = HvRITER_get(hv);
3045     HE *eiter = HvEITER_get(hv);
3046
3047     PERL_ARGS_ASSERT_HV_ASSERT;
3048
3049     (void)hv_iterinit(hv);
3050
3051     while ((entry = hv_iternext_flags(hv, HV_ITERNEXT_WANTPLACEHOLDERS))) {
3052         /* sanity check the values */
3053         if (HeVAL(entry) == &PL_sv_placeholder)
3054             placeholders++;
3055         else
3056             real++;
3057         /* sanity check the keys */
3058         if (HeSVKEY(entry)) {
3059             NOOP;   /* Don't know what to check on SV keys.  */
3060         } else if (HeKUTF8(entry)) {
3061             withflags++;
3062             if (HeKWASUTF8(entry)) {
3063                 PerlIO_printf(Perl_debug_log,
3064                             "hash key has both WASUTF8 and UTF8: '%.*s'\n",
3065                             (int) HeKLEN(entry),  HeKEY(entry));
3066                 bad = 1;
3067             }
3068         } else if (HeKWASUTF8(entry))
3069             withflags++;
3070     }
3071     if (!SvTIED_mg((const SV *)hv, PERL_MAGIC_tied)) {
3072         static const char bad_count[] = "Count %d %s(s), but hash reports %d\n";
3073         const int nhashkeys = HvUSEDKEYS(hv);
3074         const int nhashplaceholders = HvPLACEHOLDERS_get(hv);
3075
3076         if (nhashkeys != real) {
3077             PerlIO_printf(Perl_debug_log, bad_count, real, "keys", nhashkeys );
3078             bad = 1;
3079         }
3080         if (nhashplaceholders != placeholders) {
3081             PerlIO_printf(Perl_debug_log, bad_count, placeholders, "placeholder", nhashplaceholders );
3082             bad = 1;
3083         }
3084     }
3085     if (withflags && ! HvHASKFLAGS(hv)) {
3086         PerlIO_printf(Perl_debug_log,
3087                     "Hash has HASKFLAGS off but I count %d key(s) with flags\n",
3088                     withflags);
3089         bad = 1;
3090     }
3091     if (bad) {
3092         sv_dump(MUTABLE_SV(hv));
3093     }
3094     HvRITER_set(hv, riter);             /* Restore hash iterator state */
3095     HvEITER_set(hv, eiter);
3096 }
3097
3098 #endif
3099
3100 /*
3101  * Local variables:
3102  * c-indentation-style: bsd
3103  * c-basic-offset: 4
3104  * indent-tabs-mode: t
3105  * End:
3106  *
3107  * ex: set ts=8 sts=4 sw=4 noet:
3108  */