This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Inline list constants
[perl5.git] / hv.h
diff --git a/hv.h b/hv.h
index 0d619f2..6ebd5d5 100644 (file)
--- a/hv.h
+++ b/hv.h
 /* These control hash traversal randomization and the environment variable PERL_PERTURB_KEYS.
  * Currently disabling this functionality will break a few tests, but should otherwise work fine.
  * See perlrun for more details. */
-#define PERL_HASH_RANDOMIZE_KEYS 1
-#define USE_PERL_PERTURB_KEYS 1
 
-
-#ifdef PERL_HASH_RANDOMIZE_KEYS
-#   if defined(DEBUGGING) || defined(USE_PERL_PERTURB_KEYS)
-#       define PL_HASH_RAND_BITS_ENABLED PL_hash_rand_bits_enabled
-#   endif
-#   define PERL_HASH_ITER_BUCKET(iter) (((iter)->xhv_riter) ^ ((iter)->xhv_rand))
+#if defined(PERL_PERTURB_KEYS_DISABLED)
+#   define PL_HASH_RAND_BITS_ENABLED        0
+#   define PERL_HASH_ITER_BUCKET(iter)      ((iter)->xhv_riter)
 #else
-#   define PERL_HASH_ITER_BUCKET(iter) ((iter)->xhv_riter)
+#   define PERL_HASH_RANDOMIZE_KEYS         1
+#   if defined(PERL_PERTURB_KEYS_RANDOM)
+#       define PL_HASH_RAND_BITS_ENABLED    1
+#   elif defined(PERL_PERTURB_KEYS_DETERMINISTIC)
+#       define PL_HASH_RAND_BITS_ENABLED    2
+#   else
+#       define USE_PERL_PERTURB_KEYS        1
+#       define PL_HASH_RAND_BITS_ENABLED    PL_hash_rand_bits_enabled
+#   endif
+#   define PERL_HASH_ITER_BUCKET(iter)      (((iter)->xhv_riter) ^ ((iter)->xhv_rand))
 #endif
 
 /* entry in hash value chain */
@@ -113,6 +117,7 @@ struct xpvhv_aux {
     U32         xhv_last_rand;  /* last random value for hash traversal,
                                    used to detect each() after insert for warnings */
 #endif
+    U32         xhv_fill_lazy;
 };
 
 /* hash structure: */
@@ -235,7 +240,7 @@ C<SV*>.
 #  define Nullhv Null(HV*)
 #endif
 #define HvARRAY(hv)    ((hv)->sv_u.svu_hash)
-#define HvFILL(hv)     Perl_hv_fill(aTHX_ (const HV *)(hv))
+#define HvFILL(hv)     Perl_hv_fill(aTHX_ MUTABLE_HV(hv))
 #define HvMAX(hv)      ((XPVHV*)  SvANY(hv))->xhv_max
 /* This quite intentionally does no flag checking first. That's your
    responsibility.  */