This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Encode to CPAN version 2.46
[perl5.git] / cv.h
diff --git a/cv.h b/cv.h
index 96308a2..e8cb162 100644 (file)
--- a/cv.h
+++ b/cv.h
@@ -61,13 +61,21 @@ See L<perlguts/Autoloading with XSUBs>.
     (CvFILE(sv) = CopFILE(cop), CvDYNFILE_off(sv))
 #endif
 #define CvFILEGV(sv)   (gv_fetchfile(CvFILE(sv)))
+PERL_STATIC_INLINE I32 *
+S_CvDEPTHp(const CV * const sv)
+{
+    return SvTYPE(sv) == SVt_PVCV
+       ? &((XPVCV*)SvANY(sv))->xcv_depth
+       : &((XPVCV*)SvANY(sv))->xpv_cur_u.xpvcuru_fmdepth;
+}
 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
 #  define CvDEPTH(sv) (*({const CV *const _cvdepth = (const CV *)sv; \
-                         assert(SvTYPE(_cvdepth) == SVt_PVCV);  \
-                         &((XPVCV*)SvANY(_cvdepth))->xcv_depth; \
+                         assert(SvTYPE(_cvdepth) == SVt_PVCV         \
+                             || SvTYPE(_cvdepth) == SVt_PVFM);        \
+                         S_CvDEPTHp(_cvdepth);                         \
                        }))
 #else
-#  define CvDEPTH(sv)  ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_depth
+#  define CvDEPTH(sv)  (*S_CvDEPTHp((const CV *)sv))
 #endif
 #define CvPADLIST(sv)  ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist
 #define CvOUTSIDE(sv)  ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_outside
@@ -105,8 +113,12 @@ See L<perlguts/Autoloading with XSUBs>.
 #define CVf_NODEBUG    0x0200  /* no DB::sub indirection for this CV
                                   (esp. useful for special XSUBs) */
 #define CVf_CVGV_RC    0x0400  /* CvGV is reference counted */
+#ifdef PERL_CORE
+# define CVf_SLABBED   0x0800  /* Holds refcount on op slab  */
+#endif
 #define CVf_DYNFILE    0x1000  /* The filename isn't static  */
 #define CVf_AUTOLOAD   0x2000  /* SvPVX contains AUTOLOADed sub name  */
+#define CVf_HASEVAL    0x4000  /* contains string eval  */
 
 /* This symbol for optimised communication between toke.c and op.c: */
 #define CVf_BUILTIN_ATTRS      (CVf_METHOD|CVf_LVALUE)
@@ -166,6 +178,12 @@ See L<perlguts/Autoloading with XSUBs>.
 #define CvCVGV_RC_on(cv)       (CvFLAGS(cv) |= CVf_CVGV_RC)
 #define CvCVGV_RC_off(cv)      (CvFLAGS(cv) &= ~CVf_CVGV_RC)
 
+#ifdef PERL_CORE
+# define CvSLABBED(cv)         (CvFLAGS(cv) & CVf_SLABBED)
+# define CvSLABBED_on(cv)      (CvFLAGS(cv) |= CVf_SLABBED)
+# define CvSLABBED_off(cv)     (CvFLAGS(cv) &= ~CVf_SLABBED)
+#endif
+
 #define CvDYNFILE(cv)          (CvFLAGS(cv) & CVf_DYNFILE)
 #define CvDYNFILE_on(cv)       (CvFLAGS(cv) |= CVf_DYNFILE)
 #define CvDYNFILE_off(cv)      (CvFLAGS(cv) &= ~CVf_DYNFILE)
@@ -174,6 +192,10 @@ See L<perlguts/Autoloading with XSUBs>.
 #define CvAUTOLOAD_on(cv)      (CvFLAGS(cv) |= CVf_AUTOLOAD)
 #define CvAUTOLOAD_off(cv)     (CvFLAGS(cv) &= ~CVf_AUTOLOAD)
 
+#define CvHASEVAL(cv)          (CvFLAGS(cv) & CVf_HASEVAL)
+#define CvHASEVAL_on(cv)       (CvFLAGS(cv) |= CVf_HASEVAL)
+#define CvHASEVAL_off(cv)      (CvFLAGS(cv) &= ~CVf_HASEVAL)
+
 /* Flags for newXS_flags  */
 #define XS_DYNAMIC_FILENAME    0x01    /* The filename isn't static  */