diff options
Diffstat (limited to 'gv.h')
-rw-r--r-- | gv.h | 20 |
1 files changed, 8 insertions, 12 deletions
@@ -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) |