This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regcomp.c: Use calculated value instead of hard-coded
[perl5.git] / inline.h
index c55ce23..b321cc2 100644 (file)
--- a/inline.h
+++ b/inline.h
@@ -21,6 +21,15 @@ S_CvDEPTHp(const CV * const sv)
     return &((XPVCV*)SvANY(sv))->xcv_depth;
 }
 
+/* ----------------------------- regexp.h ----------------------------- */
+
+PERL_STATIC_INLINE struct regexp *
+S_ReANY(const REGEXP * const re)
+{
+    assert(isREGEXP(re));
+    return re->sv_u.svu_rx;
+}
+
 /* ------------------------------- sv.h ------------------------------- */
 
 PERL_STATIC_INLINE SV *
@@ -46,16 +55,25 @@ PERL_STATIC_INLINE void
 S_SvREFCNT_dec(pTHX_ SV *sv)
 {
     if (sv) {
-       if (SvREFCNT(sv)) {
-           if (--(SvREFCNT(sv)) == 0)
-               Perl_sv_free2(aTHX_ sv);
-       } else {
-           sv_free(sv);
-       }
+       U32 rc = SvREFCNT(sv);
+       if (rc > 1)
+           SvREFCNT(sv) = rc - 1;
+       else
+           Perl_sv_free2(aTHX_ sv, rc);
     }
 }
 
 PERL_STATIC_INLINE void
+S_SvREFCNT_dec_NN(pTHX_ SV *sv)
+{
+    U32 rc = SvREFCNT(sv);
+    if (rc > 1)
+       SvREFCNT(sv) = rc - 1;
+    else
+       Perl_sv_free2(aTHX_ sv, rc);
+}
+
+PERL_STATIC_INLINE void
 SvAMAGIC_on(SV *sv)
 {
     assert(SvROK(sv));
@@ -92,3 +110,31 @@ S_SvPADSTALE_off(SV *sv)
     assert(SvFLAGS(sv) & SVs_PADMY);
     return SvFLAGS(sv) &= ~SVs_PADSTALE;
 }
+#ifdef PERL_CORE
+PERL_STATIC_INLINE STRLEN
+S_sv_or_pv_pos_u2b(pTHX_ SV *sv, const char *pv, STRLEN pos, STRLEN *lenp)
+{
+    if (SvGAMAGIC(sv)) {
+       U8 *hopped = utf8_hop((U8 *)pv, pos);
+       if (lenp) *lenp = (STRLEN)(utf8_hop(hopped, *lenp) - hopped);
+       return (STRLEN)(hopped - (U8 *)pv);
+    }
+    return sv_pos_u2b_flags(sv,pos,lenp,SV_CONST_RETURN);
+}
+#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