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