This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regen/regcharclass_multi_char_folds.pl: Add some comments
[perl5.git] / gv.h
diff --git a/gv.h b/gv.h
index c182e82..d7ca92f 100644 (file)
--- a/gv.h
+++ b/gv.h
@@ -83,6 +83,18 @@ struct gp {
 
 Return the SV from the GV.
 
+=for apidoc Am|AV*|GvAV|GV* gv
+
+Return the AV from the GV.
+
+=for apidoc Am|HV*|GvHV|GV* gv
+
+Return the HV from the GV.
+
+=for apidoc Am|CV*|GvCV|GV* gv
+
+Return the CV from the GV.
+
 =cut
 */
 
@@ -129,8 +141,9 @@ Return the SV from the GV.
 
 #define GvLINE(gv)     (GvGP(gv)->gp_line)
 #define GvFILE_HEK(gv) (GvGP(gv)->gp_file_hek)
-#define GvFILE(gv)     (GvFILE_HEK(gv) ? HEK_KEY(GvFILE_HEK(gv)) : NULL)
-#define GvFILEGV(gv)   (gv_fetchfile(GvFILE(gv)))
+#define GvFILEx(gv)    HEK_KEY(GvFILE_HEK(gv))
+#define GvFILE(gv)     (GvFILE_HEK(gv) ? GvFILEx(gv) : NULL)
+#define GvFILEGV(gv)   (GvFILE_HEK(gv) ? gv_fetchfile(GvFILEx(gv)) : NULL)
 
 #define GvEGV(gv)      (GvGP(gv)->gp_egv)
 #define GvEGVx(gv)     (isGV_with_GP(gv) ? GvEGV(gv) : NULL)
@@ -205,7 +218,8 @@ Return the SV from the GV.
 #define GV_ADD         0x01    /* add, if symbol not already there
                                   For gv_name_set, adding a HEK for the first
                                   time, so don't try to free what's there.  */
-#define GV_ADDMULTI    0x02    /* add, pretending it has been added already */
+#define GV_ADDMULTI    0x02    /* add, pretending it has been added
+                                  already; used also by gv_init_* */
 #define GV_ADDWARN     0x04    /* add, but warn if symbol wasn't already there */
 #define GV_ADDINEVAL   0x08    /* add, as though we're doing so within an eval */
 #define GV_NOINIT      0x10    /* add, but don't init symbol, if type != PVGV */
@@ -222,8 +236,15 @@ Return the SV from the GV.
 #define GV_NO_SVGMAGIC 0x800   /* Skip get-magic on an SV argument;
                                   used only by gv_fetchsv(_nomg) */
 
+/* Flags for gv_fetchmeth_pvn and gv_autoload_pvn*/
+#define GV_SUPER       0x1000  /* SUPER::method */
+
+/* Flags for gv_autoload_*/
+#define GV_AUTOLOAD_ISMETHOD 1 /* autoloading a method? */
+
 /*      SVf_UTF8 (more accurately the return value from SvUTF8) is also valid
-       as a flag to gv_fetch_pvn_flags, so ensure it lies outside this range.
+       as a flag to various gv_* functions, so ensure it lies
+       outside this range.
 */
 
 #define GV_NOADD_MASK \
@@ -236,10 +257,21 @@ Return the SV from the GV.
 #define gv_efullname3(sv,gv,prefix) gv_efullname4(sv,gv,prefix,TRUE)
 #define gv_fetchmethod(stash, name) gv_fetchmethod_autoload(stash, name, TRUE)
 #define gv_fetchsv_nomg(n,f,t) gv_fetchsv(n,(f)|GV_NO_SVGMAGIC,t)
-#define gv_init(gv,stash,name,len,multi) gv_init_pvn(gv,stash,name,len,multi,0)
+#define gv_init(gv,stash,name,len,multi) \
+       gv_init_pvn(gv,stash,name,len,GV_ADDMULTI*!!(multi))
 #define gv_fetchmeth(stash,name,len,level) gv_fetchmeth_pvn(stash, name, len, level, 0)
 #define gv_fetchmeth_autoload(stash,name,len,level) gv_fetchmeth_pvn_autoload(stash, name, len, level, 0)
 #define gv_fetchmethod_flags(stash,name,flags) gv_fetchmethod_pv_flags(stash, name, flags)
+#define gv_autoload4(stash, name, len, method) \
+       gv_autoload_pvn(stash, name, len, !!(method))
+#define newGVgen(pack)  newGVgen_flags(pack, 0)
+#define gv_method_changed(gv)              \
+    (                                       \
+       assert_(isGV_with_GP(gv))             \
+       GvREFCNT(gv) > 1                       \
+           ? (void)++PL_sub_generation         \
+           : mro_method_changed_in(GvSTASH(gv)) \
+    )
 
 #define gv_AVadd(gv) gv_add_by_type((gv), SVt_PVAV)
 #define gv_HVadd(gv) gv_add_by_type((gv), SVt_PVHV)
@@ -250,8 +282,8 @@ Return the SV from the GV.
  * Local variables:
  * c-indentation-style: bsd
  * c-basic-offset: 4
- * indent-tabs-mode: t
+ * indent-tabs-mode: nil
  * End:
  *
- * ex: set ts=8 sts=4 sw=4 noet:
+ * ex: set ts=8 sts=4 sw=4 et:
  */