281 /* the number of keys (including any placeholers) */
282 #define XHvTOTALKEYS(xhv) ((xhv)->xhv_keys)
289 #define HvKEYS(hv) HvUSEDKEYS(hv)
290 #define HvUSEDKEYS(hv) (HvTOTALKEYS(hv) - HvPLACEHOLDERS_
+get(hv))
293 #define HvPLACEHOLDERS_get(hv) (SvMAGIC(hv) ? Perl_hv_placeholder
+s_get(aTHX_ (const HV *)hv) : 0)
hv.c
2536 I32
2537 Perl_hv_placeholders_get(pTHX_ const HV *hv)
2538 {
2539 dVAR;
2540 MAGIC * const mg = mg_find((const SV *)hv, PERL_MAGIC_rhash);
2541
2542 PERL_ARGS_ASSERT_HV_PLACEHOLDERS_GET;
2543
2544 return mg ? mg->mg_len : 0;
2545 }
mg.c
411 MAGIC*
412 Perl_mg_find(pTHX_ const SV *sv, int type)
413 {
414 PERL_UNUSED_CONTEXT;
415 if (sv) {
416 MAGIC *mg;
417 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
418 if (mg->mg_type == type)
419 return mg;
420 }
421 }
422 return NULL;
423 }
|