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