This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
don't crash on deep recursion warnings in lexical subs (#118521)
[perl5.git] / inline.h
index 85bdc74..29a15ac 100644 (file)
--- a/inline.h
+++ b/inline.h
  * Each section names the header file that the functions "belong" to.
  */
 
+/* ------------------------------- av.h ------------------------------- */
+
+PERL_STATIC_INLINE I32
+S_av_top_index(pTHX_ AV *av)
+{
+    PERL_ARGS_ASSERT_AV_TOP_INDEX;
+    assert(SvTYPE(av) == SVt_PVAV);
+
+    return AvFILL(av);
+}
+
 /* ------------------------------- cv.h ------------------------------- */
 
 PERL_STATIC_INLINE I32 *
@@ -35,7 +46,7 @@ S_ReANY(const REGEXP * const re)
 PERL_STATIC_INLINE SV *
 S_SvREFCNT_inc(SV *sv)
 {
-    if (sv)
+    if (LIKELY(sv != NULL))
        SvREFCNT(sv)++;
     return sv;
 }
@@ -48,15 +59,15 @@ S_SvREFCNT_inc_NN(SV *sv)
 PERL_STATIC_INLINE void
 S_SvREFCNT_inc_void(SV *sv)
 {
-    if (sv)
+    if (LIKELY(sv != NULL))
        SvREFCNT(sv)++;
 }
 PERL_STATIC_INLINE void
 S_SvREFCNT_dec(pTHX_ SV *sv)
 {
-    if (sv) {
+    if (LIKELY(sv != NULL)) {
        U32 rc = SvREFCNT(sv);
-       if (rc > 1)
+       if (LIKELY(rc > 1))
            SvREFCNT(sv) = rc - 1;
        else
            Perl_sv_free2(aTHX_ sv, rc);
@@ -67,7 +78,7 @@ PERL_STATIC_INLINE void
 S_SvREFCNT_dec_NN(pTHX_ SV *sv)
 {
     U32 rc = SvREFCNT(sv);
-    if (rc > 1)
+    if (LIKELY(rc > 1))
        SvREFCNT(sv) = rc - 1;
     else
        Perl_sv_free2(aTHX_ sv, rc);
@@ -123,22 +134,6 @@ S_sv_or_pv_pos_u2b(pTHX_ SV *sv, const char *pv, STRLEN pos, STRLEN *lenp)
 }
 #endif
 
-/* ------------------------------- handy.h ------------------------------- */
-
-/* saves machine code for a common noreturn idiom typically used in Newx*() */
-#ifdef __clang__
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wunused-function"
-#endif
-static void
-S_croak_memory_wrap(void)
-{
-    Perl_croak_nocontext("%s",PL_memory_wrap);
-}
-#ifdef __clang__
-#pragma clang diagnostic pop
-#endif
-
 /* ------------------------------- utf8.h ------------------------------- */
 
 /* These exist only to replace the macros they formerly were so that their use