This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Some SvREFCNT_foo are no longer macros
authorKarl Williamson <khw@cpan.org>
Tue, 10 Sep 2019 18:37:28 +0000 (12:37 -0600)
committerKarl Williamson <khw@cpan.org>
Sun, 15 Sep 2019 16:39:56 +0000 (10:39 -0600)
but are inline functions.  They should be listed in embed.fnc.

embed.fnc
inline.h
proto.h
sv.h

index 3285ca7..53e5e05 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -2251,6 +2251,11 @@ pX       |SSize_t|tmps_grow_p    |SSize_t ix
 Apd    |SV*    |sv_rvweaken    |NN SV *const sv
 Apd    |SV*    |sv_rvunweaken  |NN SV *const sv
 ATpxd  |SV*    |sv_get_backrefs|NN SV *const sv
+AiTMdp |SV *   |SvREFCNT_inc   |NULLOK SV *sv
+AiTMdp |SV *   |SvREFCNT_inc_NN|NN SV *sv
+AiTMdp |void   |SvREFCNT_inc_void|NULLOK SV *sv
+AiMdp  |void   |SvREFCNT_dec   |NULLOK SV *sv
+AiMdp  |void   |SvREFCNT_dec_NN|NN SV *sv
 : This is indirectly referenced by globals.c. This is somewhat annoying.
 p      |int    |magic_killbackrefs|NN SV *sv|NN MAGIC *mg
 Ap     |OP*    |newANONATTRSUB |I32 floor|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block
index 7df5ecb..951818a 100644 (file)
--- a/inline.h
+++ b/inline.h
@@ -196,6 +196,8 @@ Perl_SvREFCNT_inc(SV *sv)
 PERL_STATIC_INLINE SV *
 Perl_SvREFCNT_inc_NN(SV *sv)
 {
+    PERL_ARGS_ASSERT_SVREFCNT_INC_NN;
+
     SvREFCNT(sv)++;
     return sv;
 }
@@ -221,6 +223,9 @@ PERL_STATIC_INLINE void
 Perl_SvREFCNT_dec_NN(pTHX_ SV *sv)
 {
     U32 rc = SvREFCNT(sv);
+
+    PERL_ARGS_ASSERT_SVREFCNT_DEC_NN;
+
     if (LIKELY(rc > 1))
        SvREFCNT(sv) = rc - 1;
     else
diff --git a/proto.h b/proto.h
index 84f8a15..6a5eb57 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -63,6 +63,28 @@ PERL_CALLCONV void*  Perl_Slab_Alloc(pTHX_ size_t sz)
 PERL_CALLCONV void     Perl_Slab_Free(pTHX_ void *op);
 #define PERL_ARGS_ASSERT_SLAB_FREE     \
        assert(op)
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE void        Perl_SvREFCNT_dec(pTHX_ SV *sv);
+#define PERL_ARGS_ASSERT_SVREFCNT_DEC
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE void        Perl_SvREFCNT_dec_NN(pTHX_ SV *sv);
+#define PERL_ARGS_ASSERT_SVREFCNT_DEC_NN       \
+       assert(sv)
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE SV *        Perl_SvREFCNT_inc(SV *sv);
+#define PERL_ARGS_ASSERT_SVREFCNT_INC
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE SV *        Perl_SvREFCNT_inc_NN(SV *sv);
+#define PERL_ARGS_ASSERT_SVREFCNT_INC_NN       \
+       assert(sv)
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE void        Perl_SvREFCNT_inc_void(SV *sv);
+#define PERL_ARGS_ASSERT_SVREFCNT_INC_VOID
+#endif
 PERL_CALLCONV char *   Perl__byte_dump_string(pTHX_ const U8 * const start, const STRLEN len, const bool format);
 #define PERL_ARGS_ASSERT__BYTE_DUMP_STRING     \
        assert(start)
diff --git a/sv.h b/sv.h
index 86a0381..ffeac41 100644 (file)
--- a/sv.h
+++ b/sv.h
@@ -272,18 +272,18 @@ struct p5rx {
 Returns the value of the object's reference count. Exposed
 to perl code via Internals::SvREFCNT().
 
-=for apidoc Am|SV*|SvREFCNT_inc|SV* sv
+=for apidoc SvREFCNT_inc
 Increments the reference count of the given SV, returning the SV.
 
-All of the following C<SvREFCNT_inc>* macros are optimized versions of
+All of the following C<SvREFCNT_inc>* are optimized versions of
 C<SvREFCNT_inc>, and can be replaced with C<SvREFCNT_inc>.
 
-=for apidoc Am|SV*|SvREFCNT_inc_NN|SV* sv
+=for apidoc SvREFCNT_inc_NN
 Same as C<SvREFCNT_inc>, but can only be used if you know C<sv>
 is not C<NULL>.  Since we don't have to check the NULLness, it's faster
 and smaller.
 
-=for apidoc Am|void|SvREFCNT_inc_void|SV* sv
+=for apidoc SvREFCNT_inc_void
 Same as C<SvREFCNT_inc>, but can only be used if you don't need the
 return value.  The macro doesn't need to return a meaningful value.
 
@@ -312,10 +312,10 @@ value, and you know that C<sv> is not C<NULL>.  The macro doesn't need
 to return a meaningful value, or check for NULLness, so it's smaller
 and faster.
 
-=for apidoc Am|void|SvREFCNT_dec|SV* sv
+=for apidoc SvREFCNT_dec
 Decrements the reference count of the given SV.  C<sv> may be C<NULL>.
 
-=for apidoc Am|void|SvREFCNT_dec_NN|SV* sv
+=for apidoc SvREFCNT_dec_NN
 Same as C<SvREFCNT_dec>, but can only be used if you know C<sv>
 is not C<NULL>.  Since we don't have to check the NULLness, it's faster
 and smaller.