mask VMS hints bits in COPs
authorDavid Mitchell <davem@iabyn.com>
Fri, 5 Sep 2014 16:06:47 +0000 (17:06 +0100)
committerDavid Mitchell <davem@iabyn.com>
Wed, 10 Sep 2014 13:25:05 +0000 (14:25 +0100)
A couple of VMS-specific hints bits are stored in op_private on COPs.
Currently these are added using NATIVE_HINTS, which is defined as
PL_hints >> 24.
Since other hints have started using the top byte of PL_hints, this
has the possibility of inadvertently setting other bits in cop->op_private.
So mask out the bits we don't want. We need this before the next commit,
which will assert valid bits on debugging builds.

(This is VMS-specific, and has been applied blind)

op.h
vms/vmsish.h

diff --git a/op.h b/op.h
index 9593744..35bd97f 100644 (file)
--- a/op.h
+++ b/op.h
@@ -163,7 +163,8 @@ Deprecated.  Use C<GIMME_V> instead.
  in dynamic context */
 #define OPpENTERSUB_LVAL_MASK (OPpLVAL_INTRO|OPpENTERSUB_INARGS)
 
-
+/* VMS-specific hints in COPs */
+#define OPpHINT_M_VMSISH_MASK (OPpHINT_M_VMSISH_STATUS|OPpHINT_M_VMSISH_TIME)
 
 
 
index 8493150..c7c3660 100644 (file)
 #define HINT_V_VMSISH          24
 #define HINT_M_VMSISH_STATUS   0x40000000 /* system, $? return VMS status */
 #define HINT_M_VMSISH_TIME     0x80000000 /* times are local, not UTC */
-#define NATIVE_HINTS           (PL_hints >> HINT_V_VMSISH)  /* used in op.c */
+#define NATIVE_HINTS           ((PL_hints >> HINT_V_VMSISH) & OPpHINT_M_VMSISH_MASK)
 
 #ifdef PERL_IMPLICIT_CONTEXT
 #  define TEST_VMSISH(h)       (my_perl && PL_curcop && (PL_curcop->op_private & ((h) >> HINT_V_VMSISH)))