summaryrefslogtreecommitdiff
path: root/gv.h
diff options
context:
space:
mode:
Diffstat (limited to 'gv.h')
-rw-r--r--gv.h20
1 files changed, 8 insertions, 12 deletions
diff --git a/gv.h b/gv.h
index de8ec52dd8..c4e26c3024 100644
--- a/gv.h
+++ b/gv.h
@@ -43,26 +43,22 @@ struct gp {
assert(SvTYPE(_gv) == SVt_PVGV || SvTYPE(_gv) >= SVt_PVLV); \
&(GvXPVGV(_gv)->xnv_u.xgv_stash); \
}))
-# define GvNAME_get(gv) \
- ({ GV * const zzzz = (GV *) (gv); \
+# define GvNAME_HEK(gv) \
+ (*({ GV * const zzzz = (GV *) (gv); \
assert(isGV_with_GP(zzzz)); \
assert(SvTYPE(zzzz) == SVt_PVGV || SvTYPE(zzzz) >= SVt_PVLV); \
- 0 + (GvXPVGV(zzzz)->xgv_name); \
- })
-# define GvNAMELEN_get(gv) \
- ({ GV * const glank = (GV *) (gv); \
- assert(isGV_with_GP(glank)); \
- assert(SvTYPE(glank) == SVt_PVGV || SvTYPE(glank) >= SVt_PVLV); \
- 0 + (GvXPVGV(glank)->xgv_namelen); \
- })
+ &(GvXPVGV(zzzz)->xgv_namehek); \
+ }))
#else
# define GvGP(gv) ((gv)->sv_u.svu_gp)
# define GvFLAGS(gv) (GvXPVGV(gv)->xpv_cur)
# define GvSTASH(gv) (GvXPVGV(gv)->xnv_u.xgv_stash)
-# define GvNAME_get(gv) (0 + GvXPVGV(gv)->xgv_name)
-# define GvNAMELEN_get(gv) (0 + GvXPVGV(gv)->xgv_namelen)
+# define GvNAME_HEK(gv) (GvXPVGV(gv)->xgv_namehek)
#endif
+#define GvNAME_get(gv) (GvNAME_HEK(gv) ? HEK_KEY(GvNAME_HEK(gv)) : 0)
+#define GvNAMELEN_get(gv) (GvNAME_HEK(gv) ? HEK_LEN(GvNAME_HEK(gv)) : 0)
+
#define GvNAME(gv) GvNAME_get(gv)
#define GvNAMELEN(gv) GvNAMELEN_get(gv)