note about AVf_*
[p5sagit/p5-mst-13.2.git] / av.h
diff --git a/av.h b/av.h
index bacf614..f537d9e 100644 (file)
--- a/av.h
+++ b/av.h
@@ -21,8 +21,28 @@ struct xpvav {
     U8         xav_flags;
 };
 
+
+/* AVf_REAL is set for all AVs whose xav_array contents are refcounted.
+ * Some things like "@_" and the scratchpad list do not set this, to
+ * indicate that they are cheating (for efficiency) by not refcounting
+ * the AV's contents.
+ * 
+ * AVf_REIFY is only meaningful on such "fake" AVs (i.e. where AVf_REAL
+ * is not set).  It indicates that the fake AV is capable of becoming
+ * real if the array needs to be modified in some way.  Functions that
+ * modify fake AVs check both flags to call av_reify() as appropriate.
+ *
+ * Note that the Perl stack has neither flag set. (Thus, items that go
+ * on the stack are never refcounted.)
+ *
+ * These internal details are subject to change any time.  AV
+ * manipulations external to perl should not care about any of this.
+ * GSAR 1999-09-10
+ */
 #define AVf_REAL 1     /* free old entries */
 #define AVf_REIFY 2    /* can become real */
+
+/* XXX this is not used anywhere */
 #define AVf_REUSED 4   /* got undeffed--don't turn old memory into SVs now */
 
 #define Nullav Null(AV*)