Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 25cdb82

Browse files
committed
sv.h: SvPVx now equivalent to SvPV, et.al
These macros suffixed with 'x' are guaranteed to evaluate their arguments just once. Prior to this commit, they used PL_Sv to accomplish that. But since 1ef9039 in 5.37, the macros they call only evaluate their arguments once, so the PL_Sv is superfluous.
1 parent ea0856c commit 25cdb82

File tree

1 file changed

+12
-23
lines changed

1 file changed

+12
-23
lines changed

sv.h

+12-23
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)