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