This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Unicode::Collate to 0.31 (Only the .pm version for now)
[perl5.git] / hv.c
1 /*    hv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4  *    2000, 2001, 2002, 2003, 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 of all that I have seen."  --Bilbo
13  */
14
15 /* 
16 =head1 Hash Manipulation Functions
17 */
18
19 #include "EXTERN.h"
20 #define PERL_IN_HV_C
21 #define PERL_HASH_INTERNAL_ACCESS
22 #include "perl.h"
23
24 #define HV_MAX_LENGTH_BEFORE_SPLIT 14
25
26 STATIC HE*
27 S_new_he(pTHX)
28 {
29     HE* he;
30     LOCK_SV_MUTEX;
31     if (!PL_he_root)
32         more_he();
33     he = PL_he_root;
34     PL_he_root = HeNEXT(he);
35     UNLOCK_SV_MUTEX;
36     return he;
37 }
38
39 STATIC void
40 S_del_he(pTHX_ HE *p)
41 {
42     LOCK_SV_MUTEX;
43     HeNEXT(p) = (HE*)PL_he_root;
44     PL_he_root = p;
45     UNLOCK_SV_MUTEX;
46 }
47
48 STATIC void
49 S_more_he(pTHX)
50 {
51     register HE* he;
52     register HE* heend;
53     XPV *ptr;
54     New(54, ptr, 1008/sizeof(XPV), XPV);
55     ptr->xpv_pv = (char*)PL_he_arenaroot;
56     PL_he_arenaroot = ptr;
57
58     he = (HE*)ptr;
59     heend = &he[1008 / sizeof(HE) - 1];
60     PL_he_root = ++he;
61     while (he < heend) {
62         HeNEXT(he) = (HE*)(he + 1);
63         he++;
64     }
65     HeNEXT(he) = 0;
66 }
67
68 #ifdef PURIFY
69
70 #define new_HE() (HE*)safemalloc(sizeof(HE))
71 #define del_HE(p) safefree((char*)p)
72
73 #else
74
75 #define new_HE() new_he()
76 #define del_HE(p) del_he(p)
77
78 #endif
79
80 STATIC HEK *
81 S_save_hek_flags(pTHX_ const char *str, I32 len, U32 hash, int flags)
82 {
83     char *k;
84     register HEK *hek;
85
86     New(54, k, HEK_BASESIZE + len + 2, char);
87     hek = (HEK*)k;
88     Copy(str, HEK_KEY(hek), len, char);
89     HEK_KEY(hek)[len] = 0;
90     HEK_LEN(hek) = len;
91     HEK_HASH(hek) = hash;
92     HEK_FLAGS(hek) = (unsigned char)flags;
93     return hek;
94 }
95
96 /* free the pool of temporary HE/HEK pairs retunrned by hv_fetch_ent
97  * for tied hashes */
98
99 void
100 Perl_free_tied_hv_pool(pTHX)
101 {
102     HE *ohe;
103     HE *he = PL_hv_fetch_ent_mh;
104     while (he) {
105         Safefree(HeKEY_hek(he));
106         ohe = he;
107         he = HeNEXT(he);
108         del_HE(ohe);
109     }
110     PL_hv_fetch_ent_mh = Nullhe;
111 }
112
113 #if defined(USE_ITHREADS)
114 HE *
115 Perl_he_dup(pTHX_ HE *e, bool shared, CLONE_PARAMS* param)
116 {
117     HE *ret;
118
119     if (!e)
120         return Nullhe;
121     /* look for it in the table first */
122     ret = (HE*)ptr_table_fetch(PL_ptr_table, e);
123     if (ret)
124         return ret;
125
126     /* create anew and remember what it is */
127     ret = new_HE();
128     ptr_table_store(PL_ptr_table, e, ret);
129
130     HeNEXT(ret) = he_dup(HeNEXT(e),shared, param);
131     if (HeKLEN(e) == HEf_SVKEY) {
132         char *k;
133         New(54, k, HEK_BASESIZE + sizeof(SV*), char);
134         HeKEY_hek(ret) = (HEK*)k;
135         HeKEY_sv(ret) = SvREFCNT_inc(sv_dup(HeKEY_sv(e), param));
136     }
137     else if (shared)
138         HeKEY_hek(ret) = share_hek_flags(HeKEY(e), HeKLEN(e), HeHASH(e),
139                                          HeKFLAGS(e));
140     else
141         HeKEY_hek(ret) = save_hek_flags(HeKEY(e), HeKLEN(e), HeHASH(e),
142                                         HeKFLAGS(e));
143     HeVAL(ret) = SvREFCNT_inc(sv_dup(HeVAL(e), param));
144     return ret;
145 }
146 #endif  /* USE_ITHREADS */
147
148 static void
149 S_hv_notallowed(pTHX_ int flags, const char *key, I32 klen,
150                 const char *msg)
151 {
152     SV *sv = sv_newmortal(), *esv = sv_newmortal();
153     if (!(flags & HVhek_FREEKEY)) {
154         sv_setpvn(sv, key, klen);
155     }
156     else {
157         /* Need to free saved eventually assign to mortal SV */
158         /* XXX is this line an error ???:  SV *sv = sv_newmortal(); */
159         sv_usepvn(sv, (char *) key, klen);
160     }
161     if (flags & HVhek_UTF8) {
162         SvUTF8_on(sv);
163     }
164     Perl_sv_setpvf(aTHX_ esv, "Attempt to %s a restricted hash", msg);
165     Perl_croak(aTHX_ SvPVX(esv), sv);
166 }
167
168 /* (klen == HEf_SVKEY) is special for MAGICAL hv entries, meaning key slot
169  * contains an SV* */
170
171 #define HV_FETCH_ISSTORE   0x01
172 #define HV_FETCH_ISEXISTS  0x02
173 #define HV_FETCH_LVALUE    0x04
174 #define HV_FETCH_JUST_SV   0x08
175
176 /*
177 =for apidoc hv_store
178
179 Stores an SV in a hash.  The hash key is specified as C<key> and C<klen> is
180 the length of the key.  The C<hash> parameter is the precomputed hash
181 value; if it is zero then Perl will compute it.  The return value will be
182 NULL if the operation failed or if the value did not need to be actually
183 stored within the hash (as in the case of tied hashes).  Otherwise it can
184 be dereferenced to get the original C<SV*>.  Note that the caller is
185 responsible for suitably incrementing the reference count of C<val> before
186 the call, and decrementing it if the function returned NULL.  Effectively
187 a successful hv_store takes ownership of one reference to C<val>.  This is
188 usually what you want; a newly created SV has a reference count of one, so
189 if all your code does is create SVs then store them in a hash, hv_store
190 will own the only reference to the new SV, and your code doesn't need to do
191 anything further to tidy up.  hv_store is not implemented as a call to
192 hv_store_ent, and does not create a temporary SV for the key, so if your
193 key data is not already in SV form then use hv_store in preference to
194 hv_store_ent.
195
196 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
197 information on how to use this function on tied hashes.
198
199 =cut
200 */
201
202 SV**
203 Perl_hv_store(pTHX_ HV *hv, const char *key, I32 klen_i32, SV *val, U32 hash)
204 {
205     HE *hek;
206     STRLEN klen;
207     int flags;
208
209     if (klen_i32 < 0) {
210         klen = -klen_i32;
211         flags = HVhek_UTF8;
212     } else {
213         klen = klen_i32;
214         flags = 0;
215     }
216     hek = hv_fetch_common (hv, NULL, key, klen, flags,
217                            (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, 0);
218     return hek ? &HeVAL(hek) : NULL;
219 }
220
221 SV**
222 Perl_hv_store_flags(pTHX_ HV *hv, const char *key, I32 klen, SV *val,
223                  register U32 hash, int flags)
224 {
225     HE *hek = hv_fetch_common (hv, NULL, key, klen, flags,
226                                (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash);
227     return hek ? &HeVAL(hek) : NULL;
228 }
229
230 /*
231 =for apidoc hv_store_ent
232
233 Stores C<val> in a hash.  The hash key is specified as C<key>.  The C<hash>
234 parameter is the precomputed hash value; if it is zero then Perl will
235 compute it.  The return value is the new hash entry so created.  It will be
236 NULL if the operation failed or if the value did not need to be actually
237 stored within the hash (as in the case of tied hashes).  Otherwise the
238 contents of the return value can be accessed using the C<He?> macros
239 described here.  Note that the caller is responsible for suitably
240 incrementing the reference count of C<val> before the call, and
241 decrementing it if the function returned NULL.  Effectively a successful
242 hv_store_ent takes ownership of one reference to C<val>.  This is
243 usually what you want; a newly created SV has a reference count of one, so
244 if all your code does is create SVs then store them in a hash, hv_store
245 will own the only reference to the new SV, and your code doesn't need to do
246 anything further to tidy up.  Note that hv_store_ent only reads the C<key>;
247 unlike C<val> it does not take ownership of it, so maintaining the correct
248 reference count on C<key> is entirely the caller's responsibility.  hv_store
249 is not implemented as a call to hv_store_ent, and does not create a temporary
250 SV for the key, so if your key data is not already in SV form then use
251 hv_store in preference to hv_store_ent.
252
253 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
254 information on how to use this function on tied hashes.
255
256 =cut
257 */
258
259 HE *
260 Perl_hv_store_ent(pTHX_ HV *hv, SV *keysv, SV *val, U32 hash)
261 {
262   return hv_fetch_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISSTORE, val, hash);
263 }
264
265 /*
266 =for apidoc hv_exists
267
268 Returns a boolean indicating whether the specified hash key exists.  The
269 C<klen> is the length of the key.
270
271 =cut
272 */
273
274 bool
275 Perl_hv_exists(pTHX_ HV *hv, const char *key, I32 klen_i32)
276 {
277     STRLEN klen;
278     int flags;
279
280     if (klen_i32 < 0) {
281         klen = -klen_i32;
282         flags = HVhek_UTF8;
283     } else {
284         klen = klen_i32;
285         flags = 0;
286     }
287     return hv_fetch_common(hv, NULL, key, klen, flags, HV_FETCH_ISEXISTS, 0, 0)
288         ? TRUE : FALSE;
289 }
290
291 /*
292 =for apidoc hv_fetch
293
294 Returns the SV which corresponds to the specified key in the hash.  The
295 C<klen> is the length of the key.  If C<lval> is set then the fetch will be
296 part of a store.  Check that the return value is non-null before
297 dereferencing it to an C<SV*>.
298
299 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
300 information on how to use this function on tied hashes.
301
302 =cut
303 */
304
305 SV**
306 Perl_hv_fetch(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 lval)
307 {
308     HE *hek;
309     STRLEN klen;
310     int flags;
311
312     if (klen_i32 < 0) {
313         klen = -klen_i32;
314         flags = HVhek_UTF8;
315     } else {
316         klen = klen_i32;
317         flags = 0;
318     }
319     hek = hv_fetch_common (hv, NULL, key, klen, flags,
320                            HV_FETCH_JUST_SV | (lval ? HV_FETCH_LVALUE : 0),
321                            Nullsv, 0);
322     return hek ? &HeVAL(hek) : NULL;
323 }
324
325 /*
326 =for apidoc hv_exists_ent
327
328 Returns a boolean indicating whether the specified hash key exists. C<hash>
329 can be a valid precomputed hash value, or 0 to ask for it to be
330 computed.
331
332 =cut
333 */
334
335 bool
336 Perl_hv_exists_ent(pTHX_ HV *hv, SV *keysv, U32 hash)
337 {
338     return hv_fetch_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISEXISTS, 0, hash)
339         ? TRUE : FALSE;
340 }
341
342 /* returns an HE * structure with the all fields set */
343 /* note that hent_val will be a mortal sv for MAGICAL hashes */
344 /*
345 =for apidoc hv_fetch_ent
346
347 Returns the hash entry which corresponds to the specified key in the hash.
348 C<hash> must be a valid precomputed hash number for the given C<key>, or 0
349 if you want the function to compute it.  IF C<lval> is set then the fetch
350 will be part of a store.  Make sure the return value is non-null before
351 accessing it.  The return value when C<tb> is a tied hash is a pointer to a
352 static location, so be sure to make a copy of the structure if you need to
353 store it somewhere.
354
355 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
356 information on how to use this function on tied hashes.
357
358 =cut
359 */
360
361 HE *
362 Perl_hv_fetch_ent(pTHX_ HV *hv, SV *keysv, I32 lval, register U32 hash)
363 {
364     return hv_fetch_common(hv, keysv, NULL, 0, 0, 
365                            (lval ? HV_FETCH_LVALUE : 0), Nullsv, hash);
366 }
367
368 HE *
369 S_hv_fetch_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen,
370                   int flags, int action, SV *val, register U32 hash)
371 {
372     XPVHV* xhv;
373     U32 n_links;
374     HE *entry;
375     HE **oentry;
376     SV *sv;
377     bool is_utf8;
378     int masked_flags;
379
380     if (!hv)
381         return 0;
382
383     if (keysv) {
384         key = SvPV(keysv, klen);
385         flags = 0;
386         is_utf8 = (SvUTF8(keysv) != 0);
387     } else {
388         is_utf8 = ((flags & HVhek_UTF8) ? TRUE : FALSE);
389     }
390
391     xhv = (XPVHV*)SvANY(hv);
392     if (SvMAGICAL(hv)) {
393         if (SvRMAGICAL(hv) && !(action & (HV_FETCH_ISSTORE|HV_FETCH_ISEXISTS)))
394           {
395             if (mg_find((SV*)hv, PERL_MAGIC_tied) || SvGMAGICAL((SV*)hv)) {
396                 sv = sv_newmortal();
397
398                 /* XXX should be able to skimp on the HE/HEK here when
399                    HV_FETCH_JUST_SV is true.  */
400
401                 if (!keysv) {
402                     keysv = newSVpvn(key, klen);
403                     if (is_utf8) {
404                         SvUTF8_on(keysv);
405                     }
406                 } else {
407                     keysv = newSVsv(keysv);
408                 }
409                 mg_copy((SV*)hv, sv, (char *)keysv, HEf_SVKEY);
410
411                 /* grab a fake HE/HEK pair from the pool or make a new one */
412                 entry = PL_hv_fetch_ent_mh;
413                 if (entry)
414                     PL_hv_fetch_ent_mh = HeNEXT(entry);
415                 else {
416                     char *k;
417                     entry = new_HE();
418                     New(54, k, HEK_BASESIZE + sizeof(SV*), char);
419                     HeKEY_hek(entry) = (HEK*)k;
420                 }
421                 HeNEXT(entry) = Nullhe;
422                 HeSVKEY_set(entry, keysv);
423                 HeVAL(entry) = sv;
424                 sv_upgrade(sv, SVt_PVLV);
425                 LvTYPE(sv) = 'T';
426                  /* so we can free entry when freeing sv */
427                 LvTARG(sv) = (SV*)entry;
428
429                 /* XXX remove at some point? */
430                 if (flags & HVhek_FREEKEY)
431                     Safefree(key);
432
433                 return entry;
434             }
435 #ifdef ENV_IS_CASELESS
436             else if (mg_find((SV*)hv, PERL_MAGIC_env)) {
437                 U32 i;
438                 for (i = 0; i < klen; ++i)
439                     if (isLOWER(key[i])) {
440                         const char *keysave = key;
441                         /* Will need to free this, so set FREEKEY flag
442                            on call to hv_fetch_common.  */
443                         key = savepvn(key,klen);
444                         key = (const char*)strupr((char*)key);
445
446                         if (flags & HVhek_FREEKEY)
447                             Safefree(keysave);
448
449                         /* This isn't strictly the same as the old hv_fetch
450                            magic, which made a call to hv_fetch, followed
451                            by a call to hv_store if that failed and lvalue
452                            was true.
453                            Which I believe could have been done by simply
454                            passing the lvalue through to the first hv_fetch.
455                            So I will do that here.  */
456                         return hv_fetch_common(hv, Nullsv, key, klen,
457                                                HVhek_FREEKEY,
458                                                action, Nullsv, 0);
459                     }
460             }
461 #endif
462         } /* ISFETCH */
463         else if (SvRMAGICAL(hv) && (action & HV_FETCH_ISEXISTS)) {
464             if (mg_find((SV*)hv, PERL_MAGIC_tied) || SvGMAGICAL((SV*)hv)) {
465                 SV* svret;
466                 /* I don't understand why hv_exists_ent has svret and sv,
467                    whereas hv_exists only had one.  */
468                 svret = sv_newmortal();
469                 sv = sv_newmortal();
470
471                 if (keysv || is_utf8) {
472                     if (!keysv) {
473                         keysv = newSVpvn(key, klen);
474                         SvUTF8_on(keysv);
475                     } else {
476                         keysv = newSVsv(keysv);
477                     }
478                     mg_copy((SV*)hv, sv, (char *)sv_2mortal(keysv), HEf_SVKEY);
479                 } else {
480                     mg_copy((SV*)hv, sv, key, klen);
481                 }
482                 if (flags & HVhek_FREEKEY)
483                     Safefree(key);
484                 magic_existspack(svret, mg_find(sv, PERL_MAGIC_tiedelem));
485                 /* This cast somewhat evil, but I'm merely using NULL/
486                    not NULL to return the boolean exists.
487                    And I know hv is not NULL.  */
488                 return SvTRUE(svret) ? (HE *)hv : NULL;
489                 }
490 #ifdef ENV_IS_CASELESS
491             else if (mg_find((SV*)hv, PERL_MAGIC_env)) {
492                 /* XXX This code isn't UTF8 clean.  */
493                 const char *keysave = key;
494                 /* Will need to free this, so set FREEKEY flag.  */
495                 key = savepvn(key,klen);
496                 key = (const char*)strupr((char*)key);
497                 is_utf8 = 0;
498                 hash = 0;
499
500                 if (flags & HVhek_FREEKEY) {
501                     Safefree(keysave);
502                 }
503                 flags |= HVhek_FREEKEY;
504             }
505 #endif
506         } /* ISEXISTS */
507         else if (action & HV_FETCH_ISSTORE) {
508             bool needs_copy;
509             bool needs_store;
510             hv_magic_check (hv, &needs_copy, &needs_store);
511             if (needs_copy) {
512                 bool save_taint = PL_tainted;   
513                 if (keysv || is_utf8) {
514                     if (!keysv) {
515                         keysv = newSVpvn(key, klen);
516                         SvUTF8_on(keysv);
517                     }
518                     if (PL_tainting)
519                         PL_tainted = SvTAINTED(keysv);
520                     keysv = sv_2mortal(newSVsv(keysv));
521                     mg_copy((SV*)hv, val, (char*)keysv, HEf_SVKEY);
522                 } else {
523                     mg_copy((SV*)hv, val, key, klen);
524                 }
525
526                 TAINT_IF(save_taint);
527                 if (!xhv->xhv_array /* !HvARRAY(hv) */ && !needs_store) {
528                     if (flags & HVhek_FREEKEY)
529                         Safefree(key);
530                     return Nullhe;
531                 }
532 #ifdef ENV_IS_CASELESS
533                 else if (mg_find((SV*)hv, PERL_MAGIC_env)) {
534                     /* XXX This code isn't UTF8 clean.  */
535                     const char *keysave = key;
536                     /* Will need to free this, so set FREEKEY flag.  */
537                     key = savepvn(key,klen);
538                     key = (const char*)strupr((char*)key);
539                     is_utf8 = 0;
540                     hash = 0;
541
542                     if (flags & HVhek_FREEKEY) {
543                         Safefree(keysave);
544                     }
545                     flags |= HVhek_FREEKEY;
546                 }
547 #endif
548             }
549         } /* ISSTORE */
550     } /* SvMAGICAL */
551
552     if (!xhv->xhv_array /* !HvARRAY(hv) */) {
553         if ((action & (HV_FETCH_LVALUE | HV_FETCH_ISSTORE))
554 #ifdef DYNAMIC_ENV_FETCH  /* if it's an %ENV lookup, we may get it on the fly */
555                  || (SvRMAGICAL((SV*)hv) && mg_find((SV*)hv, PERL_MAGIC_env))
556 #endif
557                                                                   )
558             Newz(503, xhv->xhv_array /* HvARRAY(hv) */,
559                  PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max+1 /* HvMAX(hv)+1 */),
560                  char);
561 #ifdef DYNAMIC_ENV_FETCH
562         else if (action & HV_FETCH_ISEXISTS) {
563             /* for an %ENV exists, if we do an insert it's by a recursive
564                store call, so avoid creating HvARRAY(hv) right now.  */
565         }
566 #endif
567         else {
568             /* XXX remove at some point? */
569             if (flags & HVhek_FREEKEY)
570                 Safefree(key);
571
572             return 0;
573         }
574     }
575
576     if (is_utf8) {
577         const char *keysave = key;
578         key = (char*)bytes_from_utf8((U8*)key, &klen, &is_utf8);
579         if (is_utf8)
580             flags |= HVhek_UTF8;
581         else
582             flags &= ~HVhek_UTF8;
583         if (key != keysave) {
584             if (flags & HVhek_FREEKEY)
585                 Safefree(keysave);
586             flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
587         }
588     }
589
590     if (HvREHASH(hv)) {
591         PERL_HASH_INTERNAL(hash, key, klen);
592         /* We don't have a pointer to the hv, so we have to replicate the
593            flag into every HEK, so that hv_iterkeysv can see it.  */
594         /* And yes, you do need this even though you are not "storing" because
595            you can flip the flags below if doing an lval lookup.  (And that
596            was put in to give the semantics Andreas was expecting.)  */
597         flags |= HVhek_REHASH;
598     } else if (!hash) {
599         if (keysv && (SvIsCOW_shared_hash(keysv))) {
600             hash = SvUVX(keysv);
601         } else {
602             PERL_HASH(hash, key, klen);
603         }
604     }
605
606     masked_flags = (flags & HVhek_MASK);
607     n_links = 0;
608
609 #ifdef DYNAMIC_ENV_FETCH
610     if (!xhv->xhv_array /* !HvARRAY(hv) */) entry = Null(HE*);
611     else
612 #endif
613     {
614         /* entry = (HvARRAY(hv))[hash & (I32) HvMAX(hv)]; */
615         entry = ((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
616     }
617     for (; entry; ++n_links, entry = HeNEXT(entry)) {
618         if (HeHASH(entry) != hash)              /* strings can't be equal */
619             continue;
620         if (HeKLEN(entry) != (I32)klen)
621             continue;
622         if (HeKEY(entry) != key && memNE(HeKEY(entry),key,klen))        /* is this it? */
623             continue;
624         if ((HeKFLAGS(entry) ^ masked_flags) & HVhek_UTF8)
625             continue;
626
627         if (action & (HV_FETCH_LVALUE|HV_FETCH_ISSTORE)) {
628             if (HeKFLAGS(entry) != masked_flags) {
629                 /* We match if HVhek_UTF8 bit in our flags and hash key's
630                    match.  But if entry was set previously with HVhek_WASUTF8
631                    and key now doesn't (or vice versa) then we should change
632                    the key's flag, as this is assignment.  */
633                 if (HvSHAREKEYS(hv)) {
634                     /* Need to swap the key we have for a key with the flags we
635                        need. As keys are shared we can't just write to the
636                        flag, so we share the new one, unshare the old one.  */
637                     HEK *new_hek = share_hek_flags(key, klen, hash,
638                                                    masked_flags);
639                     unshare_hek (HeKEY_hek(entry));
640                     HeKEY_hek(entry) = new_hek;
641                 }
642                 else
643                     HeKFLAGS(entry) = masked_flags;
644                 if (masked_flags & HVhek_ENABLEHVKFLAGS)
645                     HvHASKFLAGS_on(hv);
646             }
647             if (HeVAL(entry) == &PL_sv_placeholder) {
648                 /* yes, can store into placeholder slot */
649                 if (action & HV_FETCH_LVALUE) {
650                     if (SvMAGICAL(hv)) {
651                         /* This preserves behaviour with the old hv_fetch
652                            implementation which at this point would bail out
653                            with a break; (at "if we find a placeholder, we
654                            pretend we haven't found anything")
655
656                            That break mean that if a placeholder were found, it
657                            caused a call into hv_store, which in turn would
658                            check magic, and if there is no magic end up pretty
659                            much back at this point (in hv_store's code).  */
660                         break;
661                     }
662                     /* LVAL fetch which actaully needs a store.  */
663                     val = NEWSV(61,0);
664                     xhv->xhv_placeholders--;
665                 } else {
666                     /* store */
667                     if (val != &PL_sv_placeholder)
668                         xhv->xhv_placeholders--;
669                 }
670                 HeVAL(entry) = val;
671             } else if (action & HV_FETCH_ISSTORE) {
672                 SvREFCNT_dec(HeVAL(entry));
673                 HeVAL(entry) = val;
674             }
675         } else if (HeVAL(entry) == &PL_sv_placeholder) {
676             /* if we find a placeholder, we pretend we haven't found
677                anything */
678             break;
679         }
680         if (flags & HVhek_FREEKEY)
681             Safefree(key);
682         return entry;
683     }
684 #ifdef DYNAMIC_ENV_FETCH  /* %ENV lookup?  If so, try to fetch the value now */
685     if (!(action & HV_FETCH_ISSTORE) 
686         && SvRMAGICAL((SV*)hv) && mg_find((SV*)hv, PERL_MAGIC_env)) {
687         unsigned long len;
688         char *env = PerlEnv_ENVgetenv_len(key,&len);
689         if (env) {
690             sv = newSVpvn(env,len);
691             SvTAINTED_on(sv);
692             return hv_fetch_common(hv,keysv,key,klen,flags,HV_FETCH_ISSTORE,sv,
693                                    hash);
694         }
695     }
696 #endif
697
698     if (!entry && SvREADONLY(hv) && !(action & HV_FETCH_ISEXISTS)) {
699         S_hv_notallowed(aTHX_ flags, key, klen,
700                         "access disallowed key '%"SVf"' in"
701                         );
702     }
703     if (!(action & (HV_FETCH_LVALUE|HV_FETCH_ISSTORE))) {
704         /* Not doing some form of store, so return failure.  */
705         if (flags & HVhek_FREEKEY)
706             Safefree(key);
707         return 0;
708     }
709     if (action & HV_FETCH_LVALUE) {
710         val = NEWSV(61,0);
711         if (SvMAGICAL(hv)) {
712             /* At this point the old hv_fetch code would call to hv_store,
713                which in turn might do some tied magic. So we need to make that
714                magic check happen.  */
715             /* gonna assign to this, so it better be there */
716             return hv_fetch_common(hv, keysv, key, klen, flags,
717                                    HV_FETCH_ISSTORE, val, hash);
718             /* XXX Surely that could leak if the fetch-was-store fails?
719                Just like the hv_fetch.  */
720         }
721     }
722
723     /* Welcome to hv_store...  */
724
725     if (!xhv->xhv_array) {
726         /* Not sure if we can get here.  I think the only case of oentry being
727            NULL is for %ENV with dynamic env fetch.  But that should disappear
728            with magic in the previous code.  */
729         Newz(503, xhv->xhv_array /* HvARRAY(hv) */,
730              PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max+1 /* HvMAX(hv)+1 */),
731              char);
732     }
733
734     oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
735
736     entry = new_HE();
737     /* share_hek_flags will do the free for us.  This might be considered
738        bad API design.  */
739     if (HvSHAREKEYS(hv))
740         HeKEY_hek(entry) = share_hek_flags(key, klen, hash, flags);
741     else                                       /* gotta do the real thing */
742         HeKEY_hek(entry) = save_hek_flags(key, klen, hash, flags);
743     HeVAL(entry) = val;
744     HeNEXT(entry) = *oentry;
745     *oentry = entry;
746
747     if (val == &PL_sv_placeholder)
748         xhv->xhv_placeholders++;
749     if (masked_flags & HVhek_ENABLEHVKFLAGS)
750         HvHASKFLAGS_on(hv);
751
752     xhv->xhv_keys++; /* HvKEYS(hv)++ */
753     if (!n_links) {                             /* initial entry? */
754         xhv->xhv_fill++; /* HvFILL(hv)++ */
755     } else if ((xhv->xhv_keys > (IV)xhv->xhv_max)
756                || ((n_links > HV_MAX_LENGTH_BEFORE_SPLIT) && !HvREHASH(hv))) {
757         /* Use only the old HvKEYS(hv) > HvMAX(hv) condition to limit bucket
758            splits on a rehashed hash, as we're not going to split it again,
759            and if someone is lucky (evil) enough to get all the keys in one
760            list they could exhaust our memory as we repeatedly double the
761            number of buckets on every entry. Linear search feels a less worse
762            thing to do.  */
763         hsplit(hv);
764     }
765
766     return entry;
767 }
768
769 STATIC void
770 S_hv_magic_check(pTHX_ HV *hv, bool *needs_copy, bool *needs_store)
771 {
772     MAGIC *mg = SvMAGIC(hv);
773     *needs_copy = FALSE;
774     *needs_store = TRUE;
775     while (mg) {
776         if (isUPPER(mg->mg_type)) {
777             *needs_copy = TRUE;
778             switch (mg->mg_type) {
779             case PERL_MAGIC_tied:
780             case PERL_MAGIC_sig:
781                 *needs_store = FALSE;
782             }
783         }
784         mg = mg->mg_moremagic;
785     }
786 }
787
788 /*
789 =for apidoc hv_delete
790
791 Deletes a key/value pair in the hash.  The value SV is removed from the
792 hash and returned to the caller.  The C<klen> is the length of the key.
793 The C<flags> value will normally be zero; if set to G_DISCARD then NULL
794 will be returned.
795
796 =cut
797 */
798
799 SV *
800 Perl_hv_delete(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 flags)
801 {
802     STRLEN klen;
803     int k_flags = 0;
804
805     if (klen_i32 < 0) {
806         klen = -klen_i32;
807         k_flags |= HVhek_UTF8;
808     } else {
809         klen = klen_i32;
810     }
811     return hv_delete_common(hv, NULL, key, klen, k_flags, flags, 0);
812 }
813
814 /*
815 =for apidoc hv_delete_ent
816
817 Deletes a key/value pair in the hash.  The value SV is removed from the
818 hash and returned to the caller.  The C<flags> value will normally be zero;
819 if set to G_DISCARD then NULL will be returned.  C<hash> can be a valid
820 precomputed hash value, or 0 to ask for it to be computed.
821
822 =cut
823 */
824
825 SV *
826 Perl_hv_delete_ent(pTHX_ HV *hv, SV *keysv, I32 flags, U32 hash)
827 {
828     return hv_delete_common(hv, keysv, NULL, 0, 0, flags, hash);
829 }
830
831 SV *
832 S_hv_delete_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen,
833                    int k_flags, I32 d_flags, U32 hash)
834 {
835     register XPVHV* xhv;
836     register I32 i;
837     register HE *entry;
838     register HE **oentry;
839     SV *sv;
840     bool is_utf8;
841     int masked_flags;
842
843     if (!hv)
844         return Nullsv;
845
846     if (keysv) {
847         key = SvPV(keysv, klen);
848         k_flags = 0;
849         is_utf8 = (SvUTF8(keysv) != 0);
850     } else {
851         is_utf8 = ((k_flags & HVhek_UTF8) ? TRUE : FALSE);
852     }
853
854     if (SvRMAGICAL(hv)) {
855         bool needs_copy;
856         bool needs_store;
857         hv_magic_check (hv, &needs_copy, &needs_store);
858
859         if (needs_copy) {
860             entry = hv_fetch_common(hv, keysv, key, klen,
861                                     k_flags & ~HVhek_FREEKEY, HV_FETCH_LVALUE,
862                                     Nullsv, hash);
863             sv = entry ? HeVAL(entry) : NULL;
864             if (sv) {
865                 if (SvMAGICAL(sv)) {
866                     mg_clear(sv);
867                 }
868                 if (!needs_store) {
869                     if (mg_find(sv, PERL_MAGIC_tiedelem)) {
870                         /* No longer an element */
871                         sv_unmagic(sv, PERL_MAGIC_tiedelem);
872                         return sv;
873                     }           
874                     return Nullsv;              /* element cannot be deleted */
875                 }
876             }
877 #ifdef ENV_IS_CASELESS
878             else if (mg_find((SV*)hv, PERL_MAGIC_env)) {
879                 /* XXX This code isn't UTF8 clean.  */
880                 keysv = sv_2mortal(newSVpvn(key,klen));
881                 key = strupr(SvPVX(keysv));
882
883                 if (k_flags & HVhek_FREEKEY) {
884                     Safefree(keysave);
885                 }
886
887                 is_utf8 = 0;
888                 k_flags = 0;
889                 hash = 0;
890             }
891 #endif
892         }
893     }
894     xhv = (XPVHV*)SvANY(hv);
895     if (!xhv->xhv_array /* !HvARRAY(hv) */)
896         return Nullsv;
897
898     if (is_utf8) {
899     const char *keysave = key;
900     key = (char*)bytes_from_utf8((U8*)key, &klen, &is_utf8);
901
902         if (is_utf8)
903             k_flags |= HVhek_UTF8;
904         else
905             k_flags &= ~HVhek_UTF8;
906         if (key != keysave) {
907             if (k_flags & HVhek_FREEKEY) {
908                 /* This shouldn't happen if our caller does what we expect,
909                    but strictly the API allows it.  */
910                 Safefree(keysave);
911             }
912             k_flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
913         }
914         HvHASKFLAGS_on((SV*)hv);
915     }
916
917     if (HvREHASH(hv)) {
918         PERL_HASH_INTERNAL(hash, key, klen);
919     } else if (!hash) {
920         if (keysv && (SvIsCOW_shared_hash(keysv))) {
921             hash = SvUVX(keysv);
922         } else {
923             PERL_HASH(hash, key, klen);
924         }
925         PERL_HASH(hash, key, klen);
926     }
927
928     masked_flags = (k_flags & HVhek_MASK);
929
930     /* oentry = &(HvARRAY(hv))[hash & (I32) HvMAX(hv)]; */
931     oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
932     entry = *oentry;
933     i = 1;
934     for (; entry; i=0, oentry = &HeNEXT(entry), entry = *oentry) {
935         if (HeHASH(entry) != hash)              /* strings can't be equal */
936             continue;
937         if (HeKLEN(entry) != (I32)klen)
938             continue;
939         if (HeKEY(entry) != key && memNE(HeKEY(entry),key,klen))        /* is this it? */
940             continue;
941         if ((HeKFLAGS(entry) ^ masked_flags) & HVhek_UTF8)
942             continue;
943         if (k_flags & HVhek_FREEKEY)
944             Safefree(key);
945
946         /* if placeholder is here, it's already been deleted.... */
947         if (HeVAL(entry) == &PL_sv_placeholder)
948         {
949             if (SvREADONLY(hv))
950                 return Nullsv; /* if still SvREADONLY, leave it deleted. */
951
952            /* okay, really delete the placeholder. */
953            *oentry = HeNEXT(entry);
954            if (i && !*oentry)
955                xhv->xhv_fill--; /* HvFILL(hv)-- */
956            if (entry == xhv->xhv_eiter /* HvEITER(hv) */)
957                HvLAZYDEL_on(hv);
958            else
959                hv_free_ent(hv, entry);
960            xhv->xhv_keys--; /* HvKEYS(hv)-- */
961            if (xhv->xhv_keys == 0)
962                HvHASKFLAGS_off(hv);
963            xhv->xhv_placeholders--;
964            return Nullsv;
965         }
966         else if (SvREADONLY(hv) && HeVAL(entry) && SvREADONLY(HeVAL(entry))) {
967             S_hv_notallowed(aTHX_ k_flags, key, klen,
968                             "delete readonly key '%"SVf"' from"
969                             );
970         }
971
972         if (d_flags & G_DISCARD)
973             sv = Nullsv;
974         else {
975             sv = sv_2mortal(HeVAL(entry));
976             HeVAL(entry) = &PL_sv_placeholder;
977         }
978
979         /*
980          * If a restricted hash, rather than really deleting the entry, put
981          * a placeholder there. This marks the key as being "approved", so
982          * we can still access via not-really-existing key without raising
983          * an error.
984          */
985         if (SvREADONLY(hv)) {
986             HeVAL(entry) = &PL_sv_placeholder;
987             /* We'll be saving this slot, so the number of allocated keys
988              * doesn't go down, but the number placeholders goes up */
989             xhv->xhv_placeholders++; /* HvPLACEHOLDERS(hv)++ */
990         } else {
991             *oentry = HeNEXT(entry);
992             if (i && !*oentry)
993                 xhv->xhv_fill--; /* HvFILL(hv)-- */
994             if (entry == xhv->xhv_eiter /* HvEITER(hv) */)
995                 HvLAZYDEL_on(hv);
996             else
997                 hv_free_ent(hv, entry);
998             xhv->xhv_keys--; /* HvKEYS(hv)-- */
999             if (xhv->xhv_keys == 0)
1000                 HvHASKFLAGS_off(hv);
1001         }
1002         return sv;
1003     }
1004     if (SvREADONLY(hv)) {
1005         S_hv_notallowed(aTHX_ k_flags, key, klen,
1006                         "delete disallowed key '%"SVf"' from"
1007                         );
1008     }
1009
1010     if (k_flags & HVhek_FREEKEY)
1011         Safefree(key);
1012     return Nullsv;
1013 }
1014
1015 STATIC void
1016 S_hsplit(pTHX_ HV *hv)
1017 {
1018     register XPVHV* xhv = (XPVHV*)SvANY(hv);
1019     I32 oldsize = (I32) xhv->xhv_max+1; /* HvMAX(hv)+1 (sick) */
1020     register I32 newsize = oldsize * 2;
1021     register I32 i;
1022     register char *a = xhv->xhv_array; /* HvARRAY(hv) */
1023     register HE **aep;
1024     register HE **bep;
1025     register HE *entry;
1026     register HE **oentry;
1027     int longest_chain = 0;
1028     int was_shared;
1029
1030     PL_nomemok = TRUE;
1031 #if defined(STRANGE_MALLOC) || defined(MYMALLOC)
1032     Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
1033     if (!a) {
1034       PL_nomemok = FALSE;
1035       return;
1036     }
1037 #else
1038     New(2, a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
1039     if (!a) {
1040       PL_nomemok = FALSE;
1041       return;
1042     }
1043     Copy(xhv->xhv_array /* HvARRAY(hv) */, a, oldsize * sizeof(HE*), char);
1044     if (oldsize >= 64) {
1045         offer_nice_chunk(xhv->xhv_array /* HvARRAY(hv) */,
1046                         PERL_HV_ARRAY_ALLOC_BYTES(oldsize));
1047     }
1048     else
1049         Safefree(xhv->xhv_array /* HvARRAY(hv) */);
1050 #endif
1051
1052     PL_nomemok = FALSE;
1053     Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char);     /* zero 2nd half*/
1054     xhv->xhv_max = --newsize;   /* HvMAX(hv) = --newsize */
1055     xhv->xhv_array = a;         /* HvARRAY(hv) = a */
1056     aep = (HE**)a;
1057
1058     for (i=0; i<oldsize; i++,aep++) {
1059         int left_length = 0;
1060         int right_length = 0;
1061
1062         if (!*aep)                              /* non-existent */
1063             continue;
1064         bep = aep+oldsize;
1065         for (oentry = aep, entry = *aep; entry; entry = *oentry) {
1066             if ((HeHASH(entry) & newsize) != (U32)i) {
1067                 *oentry = HeNEXT(entry);
1068                 HeNEXT(entry) = *bep;
1069                 if (!*bep)
1070                     xhv->xhv_fill++; /* HvFILL(hv)++ */
1071                 *bep = entry;
1072                 right_length++;
1073                 continue;
1074             }
1075             else {
1076                 oentry = &HeNEXT(entry);
1077                 left_length++;
1078             }
1079         }
1080         if (!*aep)                              /* everything moved */
1081             xhv->xhv_fill--; /* HvFILL(hv)-- */
1082         /* I think we don't actually need to keep track of the longest length,
1083            merely flag if anything is too long. But for the moment while
1084            developing this code I'll track it.  */
1085         if (left_length > longest_chain)
1086             longest_chain = left_length;
1087         if (right_length > longest_chain)
1088             longest_chain = right_length;
1089     }
1090
1091
1092     /* Pick your policy for "hashing isn't working" here:  */
1093     if (longest_chain <= HV_MAX_LENGTH_BEFORE_SPLIT /* split worked?  */
1094         || HvREHASH(hv)) {
1095         return;
1096     }
1097
1098     if (hv == PL_strtab) {
1099         /* Urg. Someone is doing something nasty to the string table.
1100            Can't win.  */
1101         return;
1102     }
1103
1104     /* Awooga. Awooga. Pathological data.  */
1105     /*PerlIO_printf(PerlIO_stderr(), "%p %d of %d with %d/%d buckets\n", hv,
1106       longest_chain, HvTOTALKEYS(hv), HvFILL(hv),  1+HvMAX(hv));*/
1107
1108     ++newsize;
1109     Newz(2, a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
1110     was_shared = HvSHAREKEYS(hv);
1111
1112     xhv->xhv_fill = 0;
1113     HvSHAREKEYS_off(hv);
1114     HvREHASH_on(hv);
1115
1116     aep = (HE **) xhv->xhv_array;
1117
1118     for (i=0; i<newsize; i++,aep++) {
1119         entry = *aep;
1120         while (entry) {
1121             /* We're going to trash this HE's next pointer when we chain it
1122                into the new hash below, so store where we go next.  */
1123             HE *next = HeNEXT(entry);
1124             UV hash;
1125
1126             /* Rehash it */
1127             PERL_HASH_INTERNAL(hash, HeKEY(entry), HeKLEN(entry));
1128
1129             if (was_shared) {
1130                 /* Unshare it.  */
1131                 HEK *new_hek
1132                     = save_hek_flags(HeKEY(entry), HeKLEN(entry),
1133                                      hash, HeKFLAGS(entry));
1134                 unshare_hek (HeKEY_hek(entry));
1135                 HeKEY_hek(entry) = new_hek;
1136             } else {
1137                 /* Not shared, so simply write the new hash in. */
1138                 HeHASH(entry) = hash;
1139             }
1140             /*PerlIO_printf(PerlIO_stderr(), "%d ", HeKFLAGS(entry));*/
1141             HEK_REHASH_on(HeKEY_hek(entry));
1142             /*PerlIO_printf(PerlIO_stderr(), "%d\n", HeKFLAGS(entry));*/
1143
1144             /* Copy oentry to the correct new chain.  */
1145             bep = ((HE**)a) + (hash & (I32) xhv->xhv_max);
1146             if (!*bep)
1147                     xhv->xhv_fill++; /* HvFILL(hv)++ */
1148             HeNEXT(entry) = *bep;
1149             *bep = entry;
1150
1151             entry = next;
1152         }
1153     }
1154     Safefree (xhv->xhv_array);
1155     xhv->xhv_array = a;         /* HvARRAY(hv) = a */
1156 }
1157
1158 void
1159 Perl_hv_ksplit(pTHX_ HV *hv, IV newmax)
1160 {
1161     register XPVHV* xhv = (XPVHV*)SvANY(hv);
1162     I32 oldsize = (I32) xhv->xhv_max+1; /* HvMAX(hv)+1 (sick) */
1163     register I32 newsize;
1164     register I32 i;
1165     register I32 j;
1166     register char *a;
1167     register HE **aep;
1168     register HE *entry;
1169     register HE **oentry;
1170
1171     newsize = (I32) newmax;                     /* possible truncation here */
1172     if (newsize != newmax || newmax <= oldsize)
1173         return;
1174     while ((newsize & (1 + ~newsize)) != newsize) {
1175         newsize &= ~(newsize & (1 + ~newsize)); /* get proper power of 2 */
1176     }
1177     if (newsize < newmax)
1178         newsize *= 2;
1179     if (newsize < newmax)
1180         return;                                 /* overflow detection */
1181
1182     a = xhv->xhv_array; /* HvARRAY(hv) */
1183     if (a) {
1184         PL_nomemok = TRUE;
1185 #if defined(STRANGE_MALLOC) || defined(MYMALLOC)
1186         Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
1187         if (!a) {
1188           PL_nomemok = FALSE;
1189           return;
1190         }
1191 #else
1192         New(2, a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
1193         if (!a) {
1194           PL_nomemok = FALSE;
1195           return;
1196         }
1197         Copy(xhv->xhv_array /* HvARRAY(hv) */, a, oldsize * sizeof(HE*), char);
1198         if (oldsize >= 64) {
1199             offer_nice_chunk(xhv->xhv_array /* HvARRAY(hv) */,
1200                             PERL_HV_ARRAY_ALLOC_BYTES(oldsize));
1201         }
1202         else
1203             Safefree(xhv->xhv_array /* HvARRAY(hv) */);
1204 #endif
1205         PL_nomemok = FALSE;
1206         Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char); /* zero 2nd half*/
1207     }
1208     else {
1209         Newz(0, a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
1210     }
1211     xhv->xhv_max = --newsize;   /* HvMAX(hv) = --newsize */
1212     xhv->xhv_array = a;         /* HvARRAY(hv) = a */
1213     if (!xhv->xhv_fill /* !HvFILL(hv) */)       /* skip rest if no entries */
1214         return;
1215
1216     aep = (HE**)a;
1217     for (i=0; i<oldsize; i++,aep++) {
1218         if (!*aep)                              /* non-existent */
1219             continue;
1220         for (oentry = aep, entry = *aep; entry; entry = *oentry) {
1221             if ((j = (HeHASH(entry) & newsize)) != i) {
1222                 j -= i;
1223                 *oentry = HeNEXT(entry);
1224                 if (!(HeNEXT(entry) = aep[j]))
1225                     xhv->xhv_fill++; /* HvFILL(hv)++ */
1226                 aep[j] = entry;
1227                 continue;
1228             }
1229             else
1230                 oentry = &HeNEXT(entry);
1231         }
1232         if (!*aep)                              /* everything moved */
1233             xhv->xhv_fill--; /* HvFILL(hv)-- */
1234     }
1235 }
1236
1237 /*
1238 =for apidoc newHV
1239
1240 Creates a new HV.  The reference count is set to 1.
1241
1242 =cut
1243 */
1244
1245 HV *
1246 Perl_newHV(pTHX)
1247 {
1248     register HV *hv;
1249     register XPVHV* xhv;
1250
1251     hv = (HV*)NEWSV(502,0);
1252     sv_upgrade((SV *)hv, SVt_PVHV);
1253     xhv = (XPVHV*)SvANY(hv);
1254     SvPOK_off(hv);
1255     SvNOK_off(hv);
1256 #ifndef NODEFAULT_SHAREKEYS
1257     HvSHAREKEYS_on(hv);         /* key-sharing on by default */
1258 #endif
1259
1260     xhv->xhv_max    = 7;        /* HvMAX(hv) = 7 (start with 8 buckets) */
1261     xhv->xhv_fill   = 0;        /* HvFILL(hv) = 0 */
1262     xhv->xhv_pmroot = 0;        /* HvPMROOT(hv) = 0 */
1263     (void)hv_iterinit(hv);      /* so each() will start off right */
1264     return hv;
1265 }
1266
1267 HV *
1268 Perl_newHVhv(pTHX_ HV *ohv)
1269 {
1270     HV *hv = newHV();
1271     STRLEN hv_max, hv_fill;
1272
1273     if (!ohv || (hv_fill = HvFILL(ohv)) == 0)
1274         return hv;
1275     hv_max = HvMAX(ohv);
1276
1277     if (!SvMAGICAL((SV *)ohv)) {
1278         /* It's an ordinary hash, so copy it fast. AMS 20010804 */
1279         STRLEN i;
1280         bool shared = !!HvSHAREKEYS(ohv);
1281         HE **ents, **oents = (HE **)HvARRAY(ohv);
1282         char *a;
1283         New(0, a, PERL_HV_ARRAY_ALLOC_BYTES(hv_max+1), char);
1284         ents = (HE**)a;
1285
1286         /* In each bucket... */
1287         for (i = 0; i <= hv_max; i++) {
1288             HE *prev = NULL, *ent = NULL, *oent = oents[i];
1289
1290             if (!oent) {
1291                 ents[i] = NULL;
1292                 continue;
1293             }
1294
1295             /* Copy the linked list of entries. */
1296             for (oent = oents[i]; oent; oent = HeNEXT(oent)) {
1297                 U32 hash   = HeHASH(oent);
1298                 char *key  = HeKEY(oent);
1299                 STRLEN len = HeKLEN(oent);
1300                 int flags  = HeKFLAGS(oent);
1301
1302                 ent = new_HE();
1303                 HeVAL(ent)     = newSVsv(HeVAL(oent));
1304                 HeKEY_hek(ent)
1305                     = shared ? share_hek_flags(key, len, hash, flags)
1306                              :  save_hek_flags(key, len, hash, flags);
1307                 if (prev)
1308                     HeNEXT(prev) = ent;
1309                 else
1310                     ents[i] = ent;
1311                 prev = ent;
1312                 HeNEXT(ent) = NULL;
1313             }
1314         }
1315
1316         HvMAX(hv)   = hv_max;
1317         HvFILL(hv)  = hv_fill;
1318         HvTOTALKEYS(hv)  = HvTOTALKEYS(ohv);
1319         HvARRAY(hv) = ents;
1320     }
1321     else {
1322         /* Iterate over ohv, copying keys and values one at a time. */
1323         HE *entry;
1324         I32 riter = HvRITER(ohv);
1325         HE *eiter = HvEITER(ohv);
1326
1327         /* Can we use fewer buckets? (hv_max is always 2^n-1) */
1328         while (hv_max && hv_max + 1 >= hv_fill * 2)
1329             hv_max = hv_max / 2;
1330         HvMAX(hv) = hv_max;
1331
1332         hv_iterinit(ohv);
1333         while ((entry = hv_iternext_flags(ohv, 0))) {
1334             hv_store_flags(hv, HeKEY(entry), HeKLEN(entry),
1335                            newSVsv(HeVAL(entry)), HeHASH(entry),
1336                            HeKFLAGS(entry));
1337         }
1338         HvRITER(ohv) = riter;
1339         HvEITER(ohv) = eiter;
1340     }
1341
1342     return hv;
1343 }
1344
1345 void
1346 Perl_hv_free_ent(pTHX_ HV *hv, register HE *entry)
1347 {
1348     SV *val;
1349
1350     if (!entry)
1351         return;
1352     val = HeVAL(entry);
1353     if (val && isGV(val) && GvCVu(val) && HvNAME(hv))
1354         PL_sub_generation++;    /* may be deletion of method from stash */
1355     SvREFCNT_dec(val);
1356     if (HeKLEN(entry) == HEf_SVKEY) {
1357         SvREFCNT_dec(HeKEY_sv(entry));
1358         Safefree(HeKEY_hek(entry));
1359     }
1360     else if (HvSHAREKEYS(hv))
1361         unshare_hek(HeKEY_hek(entry));
1362     else
1363         Safefree(HeKEY_hek(entry));
1364     del_HE(entry);
1365 }
1366
1367 void
1368 Perl_hv_delayfree_ent(pTHX_ HV *hv, register HE *entry)
1369 {
1370     if (!entry)
1371         return;
1372     if (isGV(HeVAL(entry)) && GvCVu(HeVAL(entry)) && HvNAME(hv))
1373         PL_sub_generation++;    /* may be deletion of method from stash */
1374     sv_2mortal(HeVAL(entry));   /* free between statements */
1375     if (HeKLEN(entry) == HEf_SVKEY) {
1376         sv_2mortal(HeKEY_sv(entry));
1377         Safefree(HeKEY_hek(entry));
1378     }
1379     else if (HvSHAREKEYS(hv))
1380         unshare_hek(HeKEY_hek(entry));
1381     else
1382         Safefree(HeKEY_hek(entry));
1383     del_HE(entry);
1384 }
1385
1386 /*
1387 =for apidoc hv_clear
1388
1389 Clears a hash, making it empty.
1390
1391 =cut
1392 */
1393
1394 void
1395 Perl_hv_clear(pTHX_ HV *hv)
1396 {
1397     register XPVHV* xhv;
1398     if (!hv)
1399         return;
1400
1401     DEBUG_A(Perl_hv_assert(aTHX_ hv));
1402
1403     xhv = (XPVHV*)SvANY(hv);
1404
1405     if (SvREADONLY(hv) && xhv->xhv_array != NULL) {
1406         /* restricted hash: convert all keys to placeholders */
1407         I32 i;
1408         HE* entry;
1409         for (i = 0; i <= (I32) xhv->xhv_max; i++) {
1410             entry = ((HE**)xhv->xhv_array)[i];
1411             for (; entry; entry = HeNEXT(entry)) {
1412                 /* not already placeholder */
1413                 if (HeVAL(entry) != &PL_sv_placeholder) {
1414                     if (HeVAL(entry) && SvREADONLY(HeVAL(entry))) {
1415                         SV* keysv = hv_iterkeysv(entry);
1416                         Perl_croak(aTHX_
1417         "Attempt to delete readonly key '%"SVf"' from a restricted hash",
1418                                    keysv);
1419                     }
1420                     SvREFCNT_dec(HeVAL(entry));
1421                     HeVAL(entry) = &PL_sv_placeholder;
1422                     xhv->xhv_placeholders++; /* HvPLACEHOLDERS(hv)++ */
1423                 }
1424             }
1425         }
1426         return;
1427     }
1428
1429     hfreeentries(hv);
1430     xhv->xhv_placeholders = 0; /* HvPLACEHOLDERS(hv) = 0 */
1431     if (xhv->xhv_array /* HvARRAY(hv) */)
1432         (void)memzero(xhv->xhv_array /* HvARRAY(hv) */,
1433                       (xhv->xhv_max+1 /* HvMAX(hv)+1 */) * sizeof(HE*));
1434
1435     if (SvRMAGICAL(hv))
1436         mg_clear((SV*)hv);
1437
1438     HvHASKFLAGS_off(hv);
1439     HvREHASH_off(hv);
1440 }
1441
1442 /*
1443 =for apidoc hv_clear_placeholders
1444
1445 Clears any placeholders from a hash.  If a restricted hash has any of its keys
1446 marked as readonly and the key is subsequently deleted, the key is not actually
1447 deleted but is marked by assigning it a value of &PL_sv_placeholder.  This tags
1448 it so it will be ignored by future operations such as iterating over the hash,
1449 but will still allow the hash to have a value reaasigned to the key at some
1450 future point.  This function clears any such placeholder keys from the hash.
1451 See Hash::Util::lock_keys() for an example of its use.
1452
1453 =cut
1454 */
1455
1456 void
1457 Perl_hv_clear_placeholders(pTHX_ HV *hv)
1458 {
1459     I32 items;
1460     items = (I32)HvPLACEHOLDERS(hv);
1461     if (items) {
1462         HE *entry;
1463         I32 riter = HvRITER(hv);
1464         HE *eiter = HvEITER(hv);
1465         hv_iterinit(hv);
1466         /* This may look suboptimal with the items *after* the iternext, but
1467            it's quite deliberate. We only get here with items==0 if we've
1468            just deleted the last placeholder in the hash. If we've just done
1469            that then it means that the hash is in lazy delete mode, and the
1470            HE is now only referenced in our iterator. If we just quit the loop
1471            and discarded our iterator then the HE leaks. So we do the && the
1472            other way to ensure iternext is called just one more time, which
1473            has the side effect of triggering the lazy delete.  */
1474         while ((entry = hv_iternext_flags(hv, HV_ITERNEXT_WANTPLACEHOLDERS))
1475             && items) {
1476             SV *val = hv_iterval(hv, entry);
1477
1478             if (val == &PL_sv_placeholder) {
1479
1480                 /* It seems that I have to go back in the front of the hash
1481                    API to delete a hash, even though I have a HE structure
1482                    pointing to the very entry I want to delete, and could hold
1483                    onto the previous HE that points to it. And it's easier to
1484                    go in with SVs as I can then specify the precomputed hash,
1485                    and don't have fun and games with utf8 keys.  */
1486                 SV *key = hv_iterkeysv(entry);
1487
1488                 hv_delete_ent (hv, key, G_DISCARD, HeHASH(entry));
1489                 items--;
1490             }
1491         }
1492         HvRITER(hv) = riter;
1493         HvEITER(hv) = eiter;
1494     }
1495 }
1496
1497 STATIC void
1498 S_hfreeentries(pTHX_ HV *hv)
1499 {
1500     register HE **array;
1501     register HE *entry;
1502     register HE *oentry = Null(HE*);
1503     I32 riter;
1504     I32 max;
1505
1506     if (!hv)
1507         return;
1508     if (!HvARRAY(hv))
1509         return;
1510
1511     riter = 0;
1512     max = HvMAX(hv);
1513     array = HvARRAY(hv);
1514     /* make everyone else think the array is empty, so that the destructors
1515      * called for freed entries can't recusively mess with us */
1516     HvARRAY(hv) = Null(HE**); 
1517     HvFILL(hv) = 0;
1518     ((XPVHV*) SvANY(hv))->xhv_keys = 0;
1519
1520     entry = array[0];
1521     for (;;) {
1522         if (entry) {
1523             oentry = entry;
1524             entry = HeNEXT(entry);
1525             hv_free_ent(hv, oentry);
1526         }
1527         if (!entry) {
1528             if (++riter > max)
1529                 break;
1530             entry = array[riter];
1531         }
1532     }
1533     HvARRAY(hv) = array;
1534     (void)hv_iterinit(hv);
1535 }
1536
1537 /*
1538 =for apidoc hv_undef
1539
1540 Undefines the hash.
1541
1542 =cut
1543 */
1544
1545 void
1546 Perl_hv_undef(pTHX_ HV *hv)
1547 {
1548     register XPVHV* xhv;
1549     if (!hv)
1550         return;
1551     DEBUG_A(Perl_hv_assert(aTHX_ hv));
1552     xhv = (XPVHV*)SvANY(hv);
1553     hfreeentries(hv);
1554     Safefree(xhv->xhv_array /* HvARRAY(hv) */);
1555     if (HvNAME(hv)) {
1556         if(PL_stashcache)
1557             hv_delete(PL_stashcache, HvNAME(hv), strlen(HvNAME(hv)), G_DISCARD);
1558         Safefree(HvNAME(hv));
1559         HvNAME(hv) = 0;
1560     }
1561     xhv->xhv_max   = 7; /* HvMAX(hv) = 7 (it's a normal hash) */
1562     xhv->xhv_array = 0; /* HvARRAY(hv) = 0 */
1563     xhv->xhv_placeholders = 0; /* HvPLACEHOLDERS(hv) = 0 */
1564
1565     if (SvRMAGICAL(hv))
1566         mg_clear((SV*)hv);
1567 }
1568
1569 /*
1570 =for apidoc hv_iterinit
1571
1572 Prepares a starting point to traverse a hash table.  Returns the number of
1573 keys in the hash (i.e. the same as C<HvKEYS(tb)>).  The return value is
1574 currently only meaningful for hashes without tie magic.
1575
1576 NOTE: Before version 5.004_65, C<hv_iterinit> used to return the number of
1577 hash buckets that happen to be in use.  If you still need that esoteric
1578 value, you can get it through the macro C<HvFILL(tb)>.
1579
1580
1581 =cut
1582 */
1583
1584 I32
1585 Perl_hv_iterinit(pTHX_ HV *hv)
1586 {
1587     register XPVHV* xhv;
1588     HE *entry;
1589
1590     if (!hv)
1591         Perl_croak(aTHX_ "Bad hash");
1592     xhv = (XPVHV*)SvANY(hv);
1593     entry = xhv->xhv_eiter; /* HvEITER(hv) */
1594     if (entry && HvLAZYDEL(hv)) {       /* was deleted earlier? */
1595         HvLAZYDEL_off(hv);
1596         hv_free_ent(hv, entry);
1597     }
1598     xhv->xhv_riter = -1;        /* HvRITER(hv) = -1 */
1599     xhv->xhv_eiter = Null(HE*); /* HvEITER(hv) = Null(HE*) */
1600     /* used to be xhv->xhv_fill before 5.004_65 */
1601     return XHvTOTALKEYS(xhv);
1602 }
1603 /*
1604 =for apidoc hv_iternext
1605
1606 Returns entries from a hash iterator.  See C<hv_iterinit>.
1607
1608 You may call C<hv_delete> or C<hv_delete_ent> on the hash entry that the
1609 iterator currently points to, without losing your place or invalidating your
1610 iterator.  Note that in this case the current entry is deleted from the hash
1611 with your iterator holding the last reference to it.  Your iterator is flagged
1612 to free the entry on the next call to C<hv_iternext>, so you must not discard
1613 your iterator immediately else the entry will leak - call C<hv_iternext> to
1614 trigger the resource deallocation.
1615
1616 =cut
1617 */
1618
1619 HE *
1620 Perl_hv_iternext(pTHX_ HV *hv)
1621 {
1622     return hv_iternext_flags(hv, 0);
1623 }
1624
1625 /*
1626 =for apidoc hv_iternext_flags
1627
1628 Returns entries from a hash iterator.  See C<hv_iterinit> and C<hv_iternext>.
1629 The C<flags> value will normally be zero; if HV_ITERNEXT_WANTPLACEHOLDERS is
1630 set the placeholders keys (for restricted hashes) will be returned in addition
1631 to normal keys. By default placeholders are automatically skipped over.
1632 Currently a placeholder is implemented with a value that is
1633 C<&Perl_sv_placeholder>. Note that the implementation of placeholders and
1634 restricted hashes may change, and the implementation currently is
1635 insufficiently abstracted for any change to be tidy.
1636
1637 =cut
1638 */
1639
1640 HE *
1641 Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags)
1642 {
1643     register XPVHV* xhv;
1644     register HE *entry;
1645     HE *oldentry;
1646     MAGIC* mg;
1647
1648     if (!hv)
1649         Perl_croak(aTHX_ "Bad hash");
1650     xhv = (XPVHV*)SvANY(hv);
1651     oldentry = entry = xhv->xhv_eiter; /* HvEITER(hv) */
1652
1653     if ((mg = SvTIED_mg((SV*)hv, PERL_MAGIC_tied))) {
1654         SV *key = sv_newmortal();
1655         if (entry) {
1656             sv_setsv(key, HeSVKEY_force(entry));
1657             SvREFCNT_dec(HeSVKEY(entry));       /* get rid of previous key */
1658         }
1659         else {
1660             char *k;
1661             HEK *hek;
1662
1663             /* one HE per MAGICAL hash */
1664             xhv->xhv_eiter = entry = new_HE(); /* HvEITER(hv) = new_HE() */
1665             Zero(entry, 1, HE);
1666             Newz(54, k, HEK_BASESIZE + sizeof(SV*), char);
1667             hek = (HEK*)k;
1668             HeKEY_hek(entry) = hek;
1669             HeKLEN(entry) = HEf_SVKEY;
1670         }
1671         magic_nextpack((SV*) hv,mg,key);
1672         if (SvOK(key)) {
1673             /* force key to stay around until next time */
1674             HeSVKEY_set(entry, SvREFCNT_inc(key));
1675             return entry;               /* beware, hent_val is not set */
1676         }
1677         if (HeVAL(entry))
1678             SvREFCNT_dec(HeVAL(entry));
1679         Safefree(HeKEY_hek(entry));
1680         del_HE(entry);
1681         xhv->xhv_eiter = Null(HE*); /* HvEITER(hv) = Null(HE*) */
1682         return Null(HE*);
1683     }
1684 #ifdef DYNAMIC_ENV_FETCH  /* set up %ENV for iteration */
1685     if (!entry && SvRMAGICAL((SV*)hv) && mg_find((SV*)hv, PERL_MAGIC_env))
1686         prime_env_iter();
1687 #endif
1688
1689     if (!xhv->xhv_array /* !HvARRAY(hv) */)
1690         Newz(506, xhv->xhv_array /* HvARRAY(hv) */,
1691              PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max+1 /* HvMAX(hv)+1 */),
1692              char);
1693     /* At start of hash, entry is NULL.  */
1694     if (entry)
1695     {
1696         entry = HeNEXT(entry);
1697         if (!(flags & HV_ITERNEXT_WANTPLACEHOLDERS)) {
1698             /*
1699              * Skip past any placeholders -- don't want to include them in
1700              * any iteration.
1701              */
1702             while (entry && HeVAL(entry) == &PL_sv_placeholder) {
1703                 entry = HeNEXT(entry);
1704             }
1705         }
1706     }
1707     while (!entry) {
1708         /* OK. Come to the end of the current list.  Grab the next one.  */
1709
1710         xhv->xhv_riter++; /* HvRITER(hv)++ */
1711         if (xhv->xhv_riter > (I32)xhv->xhv_max /* HvRITER(hv) > HvMAX(hv) */) {
1712             /* There is no next one.  End of the hash.  */
1713             xhv->xhv_riter = -1; /* HvRITER(hv) = -1 */
1714             break;
1715         }
1716         /* entry = (HvARRAY(hv))[HvRITER(hv)]; */
1717         entry = ((HE**)xhv->xhv_array)[xhv->xhv_riter];
1718
1719         if (!(flags & HV_ITERNEXT_WANTPLACEHOLDERS)) {
1720             /* If we have an entry, but it's a placeholder, don't count it.
1721                Try the next.  */
1722             while (entry && HeVAL(entry) == &PL_sv_placeholder)
1723                 entry = HeNEXT(entry);
1724         }
1725         /* Will loop again if this linked list starts NULL
1726            (for HV_ITERNEXT_WANTPLACEHOLDERS)
1727            or if we run through it and find only placeholders.  */
1728     }
1729
1730     if (oldentry && HvLAZYDEL(hv)) {            /* was deleted earlier? */
1731         HvLAZYDEL_off(hv);
1732         hv_free_ent(hv, oldentry);
1733     }
1734
1735     /*if (HvREHASH(hv) && entry && !HeKREHASH(entry))
1736       PerlIO_printf(PerlIO_stderr(), "Awooga %p %p\n", hv, entry);*/
1737
1738     xhv->xhv_eiter = entry; /* HvEITER(hv) = entry */
1739     return entry;
1740 }
1741
1742 /*
1743 =for apidoc hv_iterkey
1744
1745 Returns the key from the current position of the hash iterator.  See
1746 C<hv_iterinit>.
1747
1748 =cut
1749 */
1750
1751 char *
1752 Perl_hv_iterkey(pTHX_ register HE *entry, I32 *retlen)
1753 {
1754     if (HeKLEN(entry) == HEf_SVKEY) {
1755         STRLEN len;
1756         char *p = SvPV(HeKEY_sv(entry), len);
1757         *retlen = len;
1758         return p;
1759     }
1760     else {
1761         *retlen = HeKLEN(entry);
1762         return HeKEY(entry);
1763     }
1764 }
1765
1766 /* unlike hv_iterval(), this always returns a mortal copy of the key */
1767 /*
1768 =for apidoc hv_iterkeysv
1769
1770 Returns the key as an C<SV*> from the current position of the hash
1771 iterator.  The return value will always be a mortal copy of the key.  Also
1772 see C<hv_iterinit>.
1773
1774 =cut
1775 */
1776
1777 SV *
1778 Perl_hv_iterkeysv(pTHX_ register HE *entry)
1779 {
1780     if (HeKLEN(entry) != HEf_SVKEY) {
1781         HEK *hek = HeKEY_hek(entry);
1782         int flags = HEK_FLAGS(hek);
1783         SV *sv;
1784
1785         if (flags & HVhek_WASUTF8) {
1786             /* Trouble :-)
1787                Andreas would like keys he put in as utf8 to come back as utf8
1788             */
1789             STRLEN utf8_len = HEK_LEN(hek);
1790             U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
1791
1792             sv = newSVpvn ((char*)as_utf8, utf8_len);
1793             SvUTF8_on (sv);
1794             Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
1795         } else if (flags & HVhek_REHASH) {
1796             /* We don't have a pointer to the hv, so we have to replicate the
1797                flag into every HEK. This hv is using custom a hasing
1798                algorithm. Hence we can't return a shared string scalar, as
1799                that would contain the (wrong) hash value, and might get passed
1800                into an hv routine with a regular hash  */
1801
1802             sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
1803             if (HEK_UTF8(hek))
1804                 SvUTF8_on (sv);
1805         } else {
1806             sv = newSVpvn_share(HEK_KEY(hek),
1807                                 (HEK_UTF8(hek) ? -HEK_LEN(hek) : HEK_LEN(hek)),
1808                                 HEK_HASH(hek));
1809         }
1810         return sv_2mortal(sv);
1811     }
1812     return sv_mortalcopy(HeKEY_sv(entry));
1813 }
1814
1815 /*
1816 =for apidoc hv_iterval
1817
1818 Returns the value from the current position of the hash iterator.  See
1819 C<hv_iterkey>.
1820
1821 =cut
1822 */
1823
1824 SV *
1825 Perl_hv_iterval(pTHX_ HV *hv, register HE *entry)
1826 {
1827     if (SvRMAGICAL(hv)) {
1828         if (mg_find((SV*)hv, PERL_MAGIC_tied)) {
1829             SV* sv = sv_newmortal();
1830             if (HeKLEN(entry) == HEf_SVKEY)
1831                 mg_copy((SV*)hv, sv, (char*)HeKEY_sv(entry), HEf_SVKEY);
1832             else mg_copy((SV*)hv, sv, HeKEY(entry), HeKLEN(entry));
1833             return sv;
1834         }
1835     }
1836     return HeVAL(entry);
1837 }
1838
1839 /*
1840 =for apidoc hv_iternextsv
1841
1842 Performs an C<hv_iternext>, C<hv_iterkey>, and C<hv_iterval> in one
1843 operation.
1844
1845 =cut
1846 */
1847
1848 SV *
1849 Perl_hv_iternextsv(pTHX_ HV *hv, char **key, I32 *retlen)
1850 {
1851     HE *he;
1852     if ( (he = hv_iternext_flags(hv, 0)) == NULL)
1853         return NULL;
1854     *key = hv_iterkey(he, retlen);
1855     return hv_iterval(hv, he);
1856 }
1857
1858 /*
1859 =for apidoc hv_magic
1860
1861 Adds magic to a hash.  See C<sv_magic>.
1862
1863 =cut
1864 */
1865
1866 void
1867 Perl_hv_magic(pTHX_ HV *hv, GV *gv, int how)
1868 {
1869     sv_magic((SV*)hv, (SV*)gv, how, Nullch, 0);
1870 }
1871
1872 #if 0 /* use the macro from hv.h instead */
1873
1874 char*   
1875 Perl_sharepvn(pTHX_ const char *sv, I32 len, U32 hash)
1876 {
1877     return HEK_KEY(share_hek(sv, len, hash));
1878 }
1879
1880 #endif
1881
1882 /* possibly free a shared string if no one has access to it
1883  * len and hash must both be valid for str.
1884  */
1885 void
1886 Perl_unsharepvn(pTHX_ const char *str, I32 len, U32 hash)
1887 {
1888     unshare_hek_or_pvn (NULL, str, len, hash);
1889 }
1890
1891
1892 void
1893 Perl_unshare_hek(pTHX_ HEK *hek)
1894 {
1895     unshare_hek_or_pvn(hek, NULL, 0, 0);
1896 }
1897
1898 /* possibly free a shared string if no one has access to it
1899    hek if non-NULL takes priority over the other 3, else str, len and hash
1900    are used.  If so, len and hash must both be valid for str.
1901  */
1902 STATIC void
1903 S_unshare_hek_or_pvn(pTHX_ HEK *hek, const char *str, I32 len, U32 hash)
1904 {
1905     register XPVHV* xhv;
1906     register HE *entry;
1907     register HE **oentry;
1908     register I32 i = 1;
1909     I32 found = 0;
1910     bool is_utf8 = FALSE;
1911     int k_flags = 0;
1912     const char *save = str;
1913
1914     if (hek) {
1915         hash = HEK_HASH(hek);
1916     } else if (len < 0) {
1917         STRLEN tmplen = -len;
1918         is_utf8 = TRUE;
1919         /* See the note in hv_fetch(). --jhi */
1920         str = (char*)bytes_from_utf8((U8*)str, &tmplen, &is_utf8);
1921         len = tmplen;
1922         if (is_utf8)
1923             k_flags = HVhek_UTF8;
1924         if (str != save)
1925             k_flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
1926     }
1927
1928     /* what follows is the moral equivalent of:
1929     if ((Svp = hv_fetch(PL_strtab, tmpsv, FALSE, hash))) {
1930         if (--*Svp == Nullsv)
1931             hv_delete(PL_strtab, str, len, G_DISCARD, hash);
1932     } */
1933     xhv = (XPVHV*)SvANY(PL_strtab);
1934     /* assert(xhv_array != 0) */
1935     LOCK_STRTAB_MUTEX;
1936     /* oentry = &(HvARRAY(hv))[hash & (I32) HvMAX(hv)]; */
1937     oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
1938     if (hek) {
1939         for (entry = *oentry; entry; i=0, oentry = &HeNEXT(entry), entry = *oentry) {
1940             if (HeKEY_hek(entry) != hek)
1941                 continue;
1942             found = 1;
1943             break;
1944         }
1945     } else {
1946         int flags_masked = k_flags & HVhek_MASK;
1947         for (entry = *oentry; entry; i=0, oentry = &HeNEXT(entry), entry = *oentry) {
1948             if (HeHASH(entry) != hash)          /* strings can't be equal */
1949                 continue;
1950             if (HeKLEN(entry) != len)
1951                 continue;
1952             if (HeKEY(entry) != str && memNE(HeKEY(entry),str,len))     /* is this it? */
1953                 continue;
1954             if (HeKFLAGS(entry) != flags_masked)
1955                 continue;
1956             found = 1;
1957             break;
1958         }
1959     }
1960
1961     if (found) {
1962         if (--HeVAL(entry) == Nullsv) {
1963             *oentry = HeNEXT(entry);
1964             if (i && !*oentry)
1965                 xhv->xhv_fill--; /* HvFILL(hv)-- */
1966             Safefree(HeKEY_hek(entry));
1967             del_HE(entry);
1968             xhv->xhv_keys--; /* HvKEYS(hv)-- */
1969         }
1970     }
1971
1972     UNLOCK_STRTAB_MUTEX;
1973     if (!found && ckWARN_d(WARN_INTERNAL))
1974         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
1975                     "Attempt to free non-existent shared string '%s'%s",
1976                     hek ? HEK_KEY(hek) : str,
1977                     (k_flags & HVhek_UTF8) ? " (utf8)" : "");
1978     if (k_flags & HVhek_FREEKEY)
1979         Safefree(str);
1980 }
1981
1982 /* get a (constant) string ptr from the global string table
1983  * string will get added if it is not already there.
1984  * len and hash must both be valid for str.
1985  */
1986 HEK *
1987 Perl_share_hek(pTHX_ const char *str, I32 len, register U32 hash)
1988 {
1989     bool is_utf8 = FALSE;
1990     int flags = 0;
1991     const char *save = str;
1992
1993     if (len < 0) {
1994       STRLEN tmplen = -len;
1995       is_utf8 = TRUE;
1996       /* See the note in hv_fetch(). --jhi */
1997       str = (char*)bytes_from_utf8((U8*)str, &tmplen, &is_utf8);
1998       len = tmplen;
1999       /* If we were able to downgrade here, then than means that we were passed
2000          in a key which only had chars 0-255, but was utf8 encoded.  */
2001       if (is_utf8)
2002           flags = HVhek_UTF8;
2003       /* If we found we were able to downgrade the string to bytes, then
2004          we should flag that it needs upgrading on keys or each.  Also flag
2005          that we need share_hek_flags to free the string.  */
2006       if (str != save)
2007           flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
2008     }
2009
2010     return share_hek_flags (str, len, hash, flags);
2011 }
2012
2013 STATIC HEK *
2014 S_share_hek_flags(pTHX_ const char *str, I32 len, register U32 hash, int flags)
2015 {
2016     register XPVHV* xhv;
2017     register HE *entry;
2018     register HE **oentry;
2019     register I32 i = 1;
2020     I32 found = 0;
2021     int flags_masked = flags & HVhek_MASK;
2022
2023     /* what follows is the moral equivalent of:
2024
2025     if (!(Svp = hv_fetch(PL_strtab, str, len, FALSE)))
2026         hv_store(PL_strtab, str, len, Nullsv, hash);
2027
2028         Can't rehash the shared string table, so not sure if it's worth
2029         counting the number of entries in the linked list
2030     */
2031     xhv = (XPVHV*)SvANY(PL_strtab);
2032     /* assert(xhv_array != 0) */
2033     LOCK_STRTAB_MUTEX;
2034     /* oentry = &(HvARRAY(hv))[hash & (I32) HvMAX(hv)]; */
2035     oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
2036     for (entry = *oentry; entry; i=0, entry = HeNEXT(entry)) {
2037         if (HeHASH(entry) != hash)              /* strings can't be equal */
2038             continue;
2039         if (HeKLEN(entry) != len)
2040             continue;
2041         if (HeKEY(entry) != str && memNE(HeKEY(entry),str,len)) /* is this it? */
2042             continue;
2043         if (HeKFLAGS(entry) != flags_masked)
2044             continue;
2045         found = 1;
2046         break;
2047     }
2048     if (!found) {
2049         entry = new_HE();
2050         HeKEY_hek(entry) = save_hek_flags(str, len, hash, flags);
2051         HeVAL(entry) = Nullsv;
2052         HeNEXT(entry) = *oentry;
2053         *oentry = entry;
2054         xhv->xhv_keys++; /* HvKEYS(hv)++ */
2055         if (i) {                                /* initial entry? */
2056             xhv->xhv_fill++; /* HvFILL(hv)++ */
2057         } else if (xhv->xhv_keys > (IV)xhv->xhv_max /* HvKEYS(hv) > HvMAX(hv) */) {
2058                 hsplit(PL_strtab);
2059         }
2060     }
2061
2062     ++HeVAL(entry);                             /* use value slot as REFCNT */
2063     UNLOCK_STRTAB_MUTEX;
2064
2065     if (flags & HVhek_FREEKEY)
2066         Safefree(str);
2067
2068     return HeKEY_hek(entry);
2069 }
2070
2071
2072 /*
2073 =for apidoc hv_assert
2074
2075 Check that a hash is in an internally consistent state.
2076
2077 =cut
2078 */
2079
2080 void
2081 Perl_hv_assert(pTHX_ HV *hv)
2082 {
2083   HE* entry;
2084   int withflags = 0;
2085   int placeholders = 0;
2086   int real = 0;
2087   int bad = 0;
2088   I32 riter = HvRITER(hv);
2089   HE *eiter = HvEITER(hv);
2090
2091   (void)hv_iterinit(hv);
2092
2093   while ((entry = hv_iternext_flags(hv, HV_ITERNEXT_WANTPLACEHOLDERS))) {
2094     /* sanity check the values */
2095     if (HeVAL(entry) == &PL_sv_placeholder) {
2096       placeholders++;
2097     } else {
2098       real++;
2099     }
2100     /* sanity check the keys */
2101     if (HeSVKEY(entry)) {
2102       /* Don't know what to check on SV keys.  */
2103     } else if (HeKUTF8(entry)) {
2104       withflags++;
2105        if (HeKWASUTF8(entry)) {
2106          PerlIO_printf(Perl_debug_log,
2107                        "hash key has both WASUFT8 and UTF8: '%.*s'\n",
2108                        (int) HeKLEN(entry),  HeKEY(entry));
2109          bad = 1;
2110        }
2111     } else if (HeKWASUTF8(entry)) {
2112       withflags++;
2113     }
2114   }
2115   if (!SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
2116     if (HvUSEDKEYS(hv) != real) {
2117       PerlIO_printf(Perl_debug_log, "Count %d key(s), but hash reports %d\n",
2118                     (int) real, (int) HvUSEDKEYS(hv));
2119       bad = 1;
2120     }
2121     if (HvPLACEHOLDERS(hv) != placeholders) {
2122       PerlIO_printf(Perl_debug_log,
2123                     "Count %d placeholder(s), but hash reports %d\n",
2124                     (int) placeholders, (int) HvPLACEHOLDERS(hv));
2125       bad = 1;
2126     }
2127   }
2128   if (withflags && ! HvHASKFLAGS(hv)) {
2129     PerlIO_printf(Perl_debug_log,
2130                   "Hash has HASKFLAGS off but I count %d key(s) with flags\n",
2131                   withflags);
2132     bad = 1;
2133   }
2134   if (bad) {
2135     sv_dump((SV *)hv);
2136   }
2137   HvRITER(hv) = riter;          /* Restore hash iterator state */
2138   HvEITER(hv) = eiter;
2139 }