@@ -2074,29 +2074,18 @@ END_EXTERN_C
2074
2074
#define SvUVx (sv ) SvUV(sv)
2075
2075
#define SvNVx (sv ) SvNV(sv)
2076
2076
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)
2100
2089
2101
2090
#define SvIsCOW (sv ) (SvFLAGS(sv) & SVf_IsCOW)
2102
2091
#define SvIsCOW_on (sv ) (SvFLAGS(sv) |= SVf_IsCOW)
0 commit comments