Given that @optype and @specialsv_name are hard coded tables, it seems
[p5sagit/p5-mst-13.2.git] / hv.h
diff --git a/hv.h b/hv.h
index 7fb9fc4..67432e9 100644 (file)
--- a/hv.h
+++ b/hv.h
@@ -47,17 +47,11 @@ typedef enum {
 } mro_alg;
 
 struct mro_meta {
-    AV          *mro_linear_dfs; /* cached dfs @ISA linearization */
-    AV          *mro_linear_c3; /* cached c3 @ISA linearization */
-    HV         *mro_isarev;    /* reverse @ISA dependencies (who depends on us?) */
-    HV         *mro_nextmethod; /* next::method caching */
-    mro_alg     mro_which;      /* which mro alg is in use? */
-    U32         sub_generation; /* Like PL_sub_generation, but stash-local */
-    I32         is_universal;   /* We are UNIVERSAL or a potentially indirect
-                                   member of @UNIVERSAL::ISA */
-    I32         fake;           /* setisa made this fake package,
-                                   gv_fetchmeth pays attention to this,
-                                   and "package" sets it back to zero */
+    AV      *mro_linear_dfs; /* cached dfs @ISA linearization */
+    AV      *mro_linear_c3;  /* cached c3 @ISA linearization */
+    HV      *mro_nextmethod; /* next::method caching */
+    U32     cache_gen;       /* Bumping this invalidates our method cache */
+    mro_alg mro_which;       /* which mro alg is in use? */
 };
 
 /* Subject to change.
@@ -266,7 +260,9 @@ C<SV*>.
 #define HvRITER_get(hv)        (SvOOK(hv) ? HvAUX(hv)->xhv_riter : -1)
 #define HvEITER_get(hv)        (SvOOK(hv) ? HvAUX(hv)->xhv_eiter : 0)
 #define HvNAME(hv)     HvNAME_get(hv)
-#define HvMROMETA(hv)  (HvAUX(hv)->xhv_mro_meta ? HvAUX(hv)->xhv_mro_meta : mro_meta_init(hv))
+#define HvMROMETA(hv)  (SvOOK(hv) \
+                       ? (HvAUX(hv)->xhv_mro_meta ? HvAUX(hv)->xhv_mro_meta : mro_meta_init(hv)) \
+                       : NULL)
 /* FIXME - all of these should use a UTF8 aware API, which should also involve
    getting the length. */
 /* This macro may go away without notice.  */
@@ -478,6 +474,15 @@ struct refcounted_he {
 #  define HINTS_REFCNT_TERM            NOOP
 #endif
 
+/* Hash actions
+ * Passed in PERL_MAGIC_uvar calls
+ */
+#define HV_DELETE          -1
+#define HV_FETCH_ISSTORE   0x01
+#define HV_FETCH_ISEXISTS  0x02
+#define HV_FETCH_LVALUE    0x04
+#define HV_FETCH_JUST_SV   0x08
+
 /*
  * Local variables:
  * c-indentation-style: bsd