@@ -2074,29 +2074,18 @@ END_EXTERN_C
20742074#define SvUVx (sv ) SvUV(sv)
20752075#define SvNVx (sv ) SvNV(sv)
20762076
2077- #if defined(PERL_USE_GCC_BRACE_GROUPS )
2078-
2079- # define SvPVx (sv , len ) ({SV *_sv = (sv); SvPV(_sv, len); })
2080- # define SvPVx_const (sv , len ) ({SV *_sv = (sv); SvPV_const(_sv, len); })
2081- # define SvPVx_nolen (sv ) ({SV *_sv = (sv); SvPV_nolen(_sv); })
2082- # define SvPVx_nolen_const (sv ) ({SV *_sv = (sv); SvPV_nolen_const(_sv); })
2083- # define SvPVutf8x (sv , len ) ({SV *_sv = (sv); SvPVutf8(_sv, len); })
2084- # define SvPVbytex (sv , len ) ({SV *_sv = (sv); SvPVbyte(_sv, len); })
2085- # define SvPVbytex_nolen (sv ) ({SV *_sv = (sv); SvPVbyte_nolen(_sv); })
2086-
2087- #else /* __GNUC__ */
2088-
2089- /* These inlined macros use globals, which will require a thread
2090- * declaration in user code, so we avoid them under threads */
2091-
2092- # define SvPVx (sv , len ) ((PL_Sv = (sv)), SvPV(PL_Sv, len))
2093- # define SvPVx_const (sv , len ) ((PL_Sv = (sv)), SvPV_const(PL_Sv, len))
2094- # define SvPVx_nolen (sv ) ((PL_Sv = (sv)), SvPV_nolen(PL_Sv))
2095- # define SvPVx_nolen_const (sv ) ((PL_Sv = (sv)), SvPV_nolen_const(PL_Sv))
2096- # define SvPVutf8x (sv , len ) ((PL_Sv = (sv)), SvPVutf8(PL_Sv, len))
2097- # define SvPVbytex (sv , len ) ((PL_Sv = (sv)), SvPVbyte(PL_Sv, len))
2098- # define SvPVbytex_nolen (sv ) ((PL_Sv = (sv)), SvPVbyte_nolen(PL_Sv))
2099- #endif /* __GNU__ */
2077+ /* The following macro expansions evaluate their arguments just once. In
2078+ * earlier perl releases, the global variable PL_Sv was used as an intermediate
2079+ * in order to prevent multiple evaluations. The implementation changed in
2080+ * commit 1ef9039bccbfe64f47f201b6cfb7d6d23e0b08a7 to use inline functions
2081+ * instead. */
2082+ #define SvPVx (sv , len ) SvPV(sv, len)
2083+ #define SvPVx_const (sv , len ) SvPV_const(sv, len)
2084+ #define SvPVx_nolen (sv ) SvPV_nolen(sv)
2085+ #define SvPVx_nolen_const (sv ) SvPV_nolen_const(sv)
2086+ #define SvPVutf8x (sv , len ) SvPVutf8(sv, len)
2087+ #define SvPVbytex (sv , len ) SvPVbyte(sv, len)
2088+ #define SvPVbytex_nolen (sv ) SvPVbyte_nolen(sv)
21002089
21012090#define SvIsCOW (sv ) (SvFLAGS(sv) & SVf_IsCOW)
21022091#define SvIsCOW_on (sv ) (SvFLAGS(sv) |= SVf_IsCOW)
0 commit comments