This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Replaced pod/ rt.perl.org links to github.com
[perl5.git] / cv.h
diff --git a/cv.h b/cv.h
index dac83fa..435dee6 100644 (file)
--- a/cv.h
+++ b/cv.h
@@ -16,18 +16,13 @@ struct xpvcv {
 };
 
 /*
 };
 
 /*
-=head1 Handy Values
+=for apidoc Ayh||CV
 
 
-=for apidoc AmU||Nullcv
+=for apidoc ADmnU||Nullcv
 Null CV pointer.
 
 (deprecated - use C<(CV *)NULL> instead)
 
 Null CV pointer.
 
 (deprecated - use C<(CV *)NULL> instead)
 
-=head1 CV Manipulation Functions
-
-This section documents functions to manipulate CVs which are code-values,
-or subroutines.  For more information, see L<perlguts>.
-
 =for apidoc Am|HV*|CvSTASH|CV* cv
 Returns the stash of the CV.  A stash is the symbol table hash, containing
 the package-scoped variables in the package where the subroutine was defined.
 =for apidoc Am|HV*|CvSTASH|CV* cv
 Returns the stash of the CV.  A stash is the symbol table hash, containing
 the package-scoped variables in the package where the subroutine was defined.
@@ -49,7 +44,7 @@ See L<perlguts/Autoloading with XSUBs>.
 #define CvROOT(sv)     ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_root_u.xcv_root
 #define CvXSUB(sv)     ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_root_u.xcv_xsub
 #define CvXSUBANY(sv)  ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_start_u.xcv_xsubany
 #define CvROOT(sv)     ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_root_u.xcv_root
 #define CvXSUB(sv)     ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_root_u.xcv_xsub
 #define CvXSUBANY(sv)  ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_start_u.xcv_xsubany
-#define CvGV(sv)       S_CvGV(aTHX_ (CV *)(sv))
+#define CvGV(sv)       Perl_CvGV(aTHX_ (CV *)(sv))
 #define CvGV_set(cv,gv)        Perl_cvgv_set(aTHX_ cv, gv)
 #define CvHASGV(cv)    cBOOL(SvANY(cv)->xcv_gv_u.xcv_gv)
 #define CvFILE(sv)     ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_file
 #define CvGV_set(cv,gv)        Perl_cvgv_set(aTHX_ cv, gv)
 #define CvHASGV(cv)    cBOOL(SvANY(cv)->xcv_gv_u.xcv_gv)
 #define CvFILE(sv)     ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_file
@@ -61,14 +56,14 @@ See L<perlguts/Autoloading with XSUBs>.
     (CvFILE(sv) = CopFILE(cop), CvDYNFILE_off(sv))
 #endif
 #define CvFILEGV(sv)   (gv_fetchfile(CvFILE(sv)))
     (CvFILE(sv) = CopFILE(cop), CvDYNFILE_off(sv))
 #endif
 #define CvFILEGV(sv)   (gv_fetchfile(CvFILE(sv)))
-#define CvDEPTH(sv)    (*S_CvDEPTHp((const CV *)sv))
+#define CvDEPTH(sv)    (*Perl_CvDEPTH((const CV *)sv))
 /* For use when you only have a XPVCV*, not a real CV*.
 /* For use when you only have a XPVCV*, not a real CV*.
-   Must be assert protected as in S_CvDEPTHp before use. */
+   Must be assert protected as in Perl_CvDEPTH before use. */
 #define CvDEPTHunsafe(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_depth
 
 /* these CvPADLIST/CvRESERVED asserts can be reverted one day, once stabilized */
 #define CvPADLIST(sv)    (*(assert_(!CvISXSUB((CV*)(sv))) \
 #define CvDEPTHunsafe(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_depth
 
 /* these CvPADLIST/CvRESERVED asserts can be reverted one day, once stabilized */
 #define CvPADLIST(sv)    (*(assert_(!CvISXSUB((CV*)(sv))) \
-       &(((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist_u.xcv_padlist)))
+        &(((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist_u.xcv_padlist)))
 /* CvPADLIST_set is not public API, it can be removed one day, once stabilized */
 #ifdef DEBUGGING
 #  define CvPADLIST_set(sv, padlist) Perl_set_padlist((CV*)sv, padlist)
 /* CvPADLIST_set is not public API, it can be removed one day, once stabilized */
 #ifdef DEBUGGING
 #  define CvPADLIST_set(sv, padlist) Perl_set_padlist((CV*)sv, padlist)
@@ -76,7 +71,7 @@ See L<perlguts/Autoloading with XSUBs>.
 #  define CvPADLIST_set(sv, padlist) (CvPADLIST(sv) = (padlist))
 #endif
 #define CvHSCXT(sv)      *(assert_(CvISXSUB((CV*)(sv))) \
 #  define CvPADLIST_set(sv, padlist) (CvPADLIST(sv) = (padlist))
 #endif
 #define CvHSCXT(sv)      *(assert_(CvISXSUB((CV*)(sv))) \
-       &(((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist_u.xcv_hscxt))
+        &(((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist_u.xcv_hscxt))
 #ifdef DEBUGGING
 #  if PTRSIZE == 8
 #    define PoisonPADLIST(sv) \
 #ifdef DEBUGGING
 #  if PTRSIZE == 8
 #    define PoisonPADLIST(sv) \
@@ -97,20 +92,20 @@ See L<perlguts/Autoloading with XSUBs>.
 
 /* These two are sometimes called on non-CVs */
 #define CvPROTO(sv)                               \
 
 /* These two are sometimes called on non-CVs */
 #define CvPROTO(sv)                               \
-       (                                          \
-        SvPOK(sv)                                  \
-         ? SvTYPE(sv) == SVt_PVCV && CvAUTOLOAD(sv) \
-            ? SvEND(sv)+1 : SvPVX_const(sv)          \
-         : NULL                                       \
-       )
+        (                                          \
+         SvPOK(sv)                                  \
+          ? SvTYPE(sv) == SVt_PVCV && CvAUTOLOAD(sv) \
+             ? SvEND(sv)+1 : SvPVX_const(sv)          \
+          : NULL                                       \
+        )
 #define CvPROTOLEN(sv)                           \
 #define CvPROTOLEN(sv)                           \
-       (                                          \
-        SvPOK(sv)                                  \
-         ? SvTYPE(sv) == SVt_PVCV && CvAUTOLOAD(sv) \
-            ? SvLEN(sv)-SvCUR(sv)-2                  \
-            : SvCUR(sv)                               \
-         : 0                                           \
-       )
+        (                                          \
+         SvPOK(sv)                                  \
+          ? SvTYPE(sv) == SVt_PVCV && CvAUTOLOAD(sv) \
+             ? SvLEN(sv)-SvCUR(sv)-2                  \
+             : SvCUR(sv)                               \
+          : 0                                           \
+        )
 
 #define CVf_METHOD     0x0001  /* CV is explicitly marked as a method */
 #define CVf_LVALUE     0x0002  /* CV return value can be used as lvalue */
 
 #define CVf_METHOD     0x0001  /* CV is explicitly marked as a method */
 #define CVf_LVALUE     0x0002  /* CV return value can be used as lvalue */
@@ -122,14 +117,14 @@ See L<perlguts/Autoloading with XSUBs>.
 #define CVf_CLONED     0x0040  /* a clone of one of those */
 #define CVf_ANON       0x0080  /* CV is not pointed to by a GV */
 #define CVf_UNIQUE     0x0100  /* sub is only called once (eg PL_main_cv,
 #define CVf_CLONED     0x0040  /* a clone of one of those */
 #define CVf_ANON       0x0080  /* CV is not pointed to by a GV */
 #define CVf_UNIQUE     0x0100  /* sub is only called once (eg PL_main_cv,
-                                * require, eval). */
+                                 * require, eval). */
 #define CVf_NODEBUG    0x0200  /* no DB::sub indirection for this CV
 #define CVf_NODEBUG    0x0200  /* no DB::sub indirection for this CV
-                                  (esp. useful for special XSUBs) */
+                                   (esp. useful for special XSUBs) */
 #define CVf_CVGV_RC    0x0400  /* CvGV is reference counted */
 #define CVf_CVGV_RC    0x0400  /* CvGV is reference counted */
-#ifdef PERL_CORE
+#if defined(PERL_CORE) || defined(PERL_EXT)
 # define CVf_SLABBED   0x0800  /* Holds refcount on op slab  */
 #endif
 # define CVf_SLABBED   0x0800  /* Holds refcount on op slab  */
 #endif
-#define CVf_DYNFILE    0x1000  /* The filename isn't static  */
+#define CVf_DYNFILE    0x1000  /* The filename is malloced  */
 #define CVf_AUTOLOAD   0x2000  /* SvPVX contains AUTOLOADed sub name  */
 #define CVf_HASEVAL    0x4000  /* contains string eval  */
 #define CVf_NAMED      0x8000  /* Has a name HEK */
 #define CVf_AUTOLOAD   0x2000  /* SvPVX contains AUTOLOADed sub name  */
 #define CVf_HASEVAL    0x4000  /* contains string eval  */
 #define CVf_NAMED      0x8000  /* Has a name HEK */
@@ -231,8 +226,8 @@ PERL_STATIC_INLINE HEK *
 CvNAME_HEK(CV *sv)
 {
     return CvNAMED(sv)
 CvNAME_HEK(CV *sv)
 {
     return CvNAMED(sv)
-       ? ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_gv_u.xcv_hek
-       : 0;
+        ? ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_gv_u.xcv_hek
+        : 0;
 }
 
 /* helper for the common pattern:
 }
 
 /* helper for the common pattern:
@@ -247,15 +242,14 @@ CvNAME_HEK(CV *sv)
 /* This lowers the reference count of the previous value, but does *not*
    increment the reference count of the new value. */
 #define CvNAME_HEK_set(cv, hek) ( \
 /* This lowers the reference count of the previous value, but does *not*
    increment the reference count of the new value. */
 #define CvNAME_HEK_set(cv, hek) ( \
-       CvNAME_HEK((CV *)(cv))                                           \
-           ? unshare_hek(SvANY((CV *)(cv))->xcv_gv_u.xcv_hek)    \
-           : (void)0,                                             \
-       ((XPVCV*)MUTABLE_PTR(SvANY(cv)))->xcv_gv_u.xcv_hek = (hek), \
-       CvNAMED_on(cv)                                               \
+        CvNAME_HEK((CV *)(cv))                                          \
+            ? unshare_hek(SvANY((CV *)(cv))->xcv_gv_u.xcv_hek)   \
+            : (void)0,                                            \
+        ((XPVCV*)MUTABLE_PTR(SvANY(cv)))->xcv_gv_u.xcv_hek = (hek), \
+        CvNAMED_on(cv)                                              \
     )
 
 /*
     )
 
 /*
-=head1 CV reference counts and CvOUTSIDE
 
 =for apidoc m|bool|CvWEAKOUTSIDE|CV *cv
 
 
 =for apidoc m|bool|CvWEAKOUTSIDE|CV *cv