Loop in S_init_perllib(), only calling S_incpush*() with INCPUSH_ADD_OLD_VERS
[p5sagit/p5-mst-13.2.git] / hv.h
diff --git a/hv.h b/hv.h
index e75d75f..9322377 100644 (file)
--- a/hv.h
+++ b/hv.h
@@ -50,10 +50,12 @@ struct mro_alg {
 };
 
 struct mro_meta {
-    /* repurposed as a hash holding the different MROs private data. */
-    AV      *mro_linear_dfs; /* cached dfs @ISA linearization */
-    /* repurposed as a pointer directly to the current MROs private data.  */
-    AV      *mro_linear_c3;  /* cached c3 @ISA linearization */
+    /* a hash holding the different MROs private data.  */
+    HV      *mro_linear_all;
+    /* a pointer directly to the current MROs private data.  If mro_linear_all
+       is NULL, this owns the SV reference, else it is just a pointer to a
+       value stored in and owned by mro_linear_all.  */
+    SV      *mro_linear_current;
     HV      *mro_nextmethod; /* next::method caching */
     U32     cache_gen;       /* Bumping this invalidates our method cache */
     U32     pkg_gen;         /* Bumps when local methods/@ISA change */
@@ -63,7 +65,7 @@ struct mro_meta {
 
 #define MRO_GET_PRIVATE_DATA(smeta, which)                \
     (((smeta)->mro_which && (which) == (smeta)->mro_which) \
-     ? MUTABLE_SV((smeta)->mro_linear_c3)                 \
+     ? (smeta)->mro_linear_current                        \
      : Perl_mro_get_private_data(aTHX_ (smeta), (which)))
 
 /* Subject to change.
@@ -365,6 +367,9 @@ C<SV*>.
 #define HVhek_FREEKEY  0x100 /* Internal flag to say key is malloc()ed.  */
 #define HVhek_PLACEHOLD        0x200 /* Internal flag to create placeholder.
                                * (may change, but Storable is a core module) */
+#define HVhek_KEYCANONICAL 0x400 /* Internal flag - key is in canonical form.
+                                   If the string is UTF-8, it cannot be
+                                   converted to bytes. */
 #define HVhek_MASK     0xFF
 
 /* Which flags enable HvHASKFLAGS? Somewhat a hack on a hack, as