(((smeta)->mro_which && (which) == (smeta)->mro_which) \
? (smeta)->mro_linear_current \
: Perl_mro_get_private_data(aTHX_ (smeta), (which)))
-#define mro_isa_changed_in(stash) mro_isa_changed_in3(stash, NULL, 0)
/* Subject to change.
Don't access this directly.
AV *xhv_backreferences; /* back references for weak references */
HE *xhv_eiter; /* current entry of iterator */
I32 xhv_riter; /* current root of iterator */
- struct mro_meta *xhv_mro_meta;
/* Concerning xhv_name_count: When non-zero, xhv_name is actually a pointer
* to an array of HEK pointers, this being the length. The first element is
* the name of the stash, which may be NULL. If xhv_name_count is positive,
* tive, then xhv_name[1] is the first effective name.
*/
I32 xhv_name_count;
+ struct mro_meta *xhv_mro_meta;
};
/* hash structure: */
#define HvNAMELEN_get(hv) \
((SvOOK(hv) && (HvAUX(hv)->xhv_name) && HvNAME_HEK_NN(hv)) \
? HEK_LEN(HvNAME_HEK_NN(hv)) : 0)
-#ifdef PERL_CORE
-# define HvENAME_HEK_NN(hv) \
+#define HvENAME_HEK_NN(hv) \
( \
HvAUX(hv)->xhv_name_count > 0 ? *(HEK **)HvAUX(hv)->xhv_name : \
HvAUX(hv)->xhv_name_count < -1 ? ((HEK **)HvAUX(hv)->xhv_name)[1] : \
HvAUX(hv)->xhv_name_count == -1 ? NULL : \
HvAUX(hv)->xhv_name \
)
-# define HvENAME_HEK(hv) \
+#define HvENAME_HEK(hv) \
(SvOOK(hv) && HvAUX(hv)->xhv_name ? HvENAME_HEK_NN(hv) : NULL)
-# define HvENAME_get(hv) \
+#define HvENAME_get(hv) \
((SvOOK(hv) && (HvAUX(hv)->xhv_name) && HvENAME_HEK_NN(hv)) \
? HEK_KEY(HvENAME_HEK_NN(hv)) : NULL)
-# define HvENAMELEN_get(hv) \
+#define HvENAMELEN_get(hv) \
((SvOOK(hv) && (HvAUX(hv)->xhv_name) && HvENAME_HEK_NN(hv)) \
? HEK_LEN(HvENAME_HEK_NN(hv)) : 0)
-#endif
/* the number of keys (including any placeholers) */
#define XHvTOTALKEYS(xhv) ((xhv)->xhv_keys)
#define HV_FETCH_LVALUE 0x10
#define HV_FETCH_JUST_SV 0x20
#define HV_DELETE 0x40
+#define HV_FETCH_EMPTY_HE 0x80 /* Leave HeVAL null. */
/*
=for apidoc newHV