add missing flag in change#4892
[p5sagit/p5-mst-13.2.git] / op.h
diff --git a/op.h b/op.h
index 2129572..91cdb6b 100644 (file)
--- a/op.h
+++ b/op.h
@@ -77,6 +77,7 @@ typedef U32 PADOFFSET;
                                /*  On flipflop, we saw ... instead of .. */
                                /*  On UNOPs, saw bare parens, e.g. eof(). */
                                /*  On OP_ENTERSUB || OP_NULL, saw a "do". */
+                               /*  On OP_EXISTS, treat av as av, not avhv.  */
                                /*  On OP_(ENTER|LEAVE)EVAL, don't clear $@ */
                                /*  On OP_ENTERITER, loop var is per-thread */
                                 /*  On pushre, re is /\s+/ imp. by split " " */
@@ -136,7 +137,9 @@ typedef U32 PADOFFSET;
 #define OPpEARLY_CV            32      /* foo() called before sub foo was parsed */
   /* OP_?ELEM only */
 #define OPpLVAL_DEFER          16      /* Defer creation of array/hash elem */
-  /* for OP_RV2?V, lower bits carry hints */
+  /* OP_RV2?V, OP_GVSV only */
+#define OPpOUR_INTRO           16      /* Defer creation of array/hash elem */
+  /* for OP_RV2?V, lower bits carry hints (currently only HINT_STRICT_REFS) */
 
 /* Private for OPs with TARGLEX */
   /* (lower bits may carry MAXARG) */
@@ -158,7 +161,11 @@ typedef U32 PADOFFSET;
 /* Private for OP_DELETE */
 #define OPpSLICE               64      /* Operating on a list of keys */
 
-/* Private for OP_SORT, OP_PRTF, OP_SPRINTF, string cmp'n, and case changers */
+/* Private for OP_EXISTS */
+#define OPpEXISTS_SUB          64      /* Checking for &sub, not {} or [].  */
+
+/* Private for OP_SORT, OP_PRTF, OP_SPRINTF, OP_FTTEXT, OP_FTBINARY, */
+/*             string comparisons, and case changers. */
 #define OPpLOCALE              64      /* Use locale */
 
 /* Private for OP_SORT */
@@ -304,23 +311,28 @@ struct loop {
 
 
 #ifdef USE_ITHREADS
-#  define      cGVOPx(o)       ((GV*)PAD_SV(cPADOPx(o)->op_padix))
-#  define      cGVOP           ((GV*)PAD_SV(cPADOP->op_padix))
-#  define      cGVOPo          ((GV*)PAD_SV(cPADOPo->op_padix))
-#  define      kGVOP           ((GV*)PAD_SV(kPADOP->op_padix))
-#  define      cGVOP_set(v)    (PL_curpad[cPADOP->op_padix] = (SV*)(v))
-#  define      cGVOPo_set(v)   (PL_curpad[cPADOPo->op_padix] = (SV*)(v))
-#  define      kGVOP_set(v)    (PL_curpad[kPADOP->op_padix] = (SV*)(v))
+#  define      cGVOPx_gv(o)    ((GV*)PL_curpad[cPADOPx(o)->op_padix])
+#  define      IS_PADGV(v)     (v && SvTYPE(v) == SVt_PVGV && GvIN_PAD(v))
+#  define      IS_PADCONST(v)  (v && SvREADONLY(v))
+#  define      cSVOPx_sv(v)    (cSVOPx(v)->op_sv \
+                                ? cSVOPx(v)->op_sv : PL_curpad[(v)->op_targ])
+#  define      cSVOPx_svp(v)   (cSVOPx(v)->op_sv \
+                                ? &cSVOPx(v)->op_sv : &PL_curpad[(v)->op_targ])
 #else
-#  define      cGVOPx(o)       ((GV*)cSVOPx(o)->op_sv)
-#  define      cGVOP           ((GV*)cSVOP->op_sv)
-#  define      cGVOPo          ((GV*)cSVOPo->op_sv)
-#  define      kGVOP           ((GV*)kSVOP->op_sv)
-#  define      cGVOP_set(v)    (cPADOP->op_sv = (SV*)(v))
-#  define      cGVOPo_set(v)   (cPADOPo->op_sv = (SV*)(v))
-#  define      kGVOP_set(v)    (kPADOP->op_sv = (SV*)(v))
+#  define      cGVOPx_gv(o)    ((GV*)cSVOPx(o)->op_sv)
+#  define      IS_PADGV(v)     FALSE
+#  define      IS_PADCONST(v)  FALSE
+#  define      cSVOPx_sv(v)    (cSVOPx(v)->op_sv)
+#  define      cSVOPx_svp(v)   (&cSVOPx(v)->op_sv)
 #endif
 
+#define        cGVOP_gv                cGVOPx_gv(PL_op)
+#define        cGVOPo_gv               cGVOPx_gv(o)
+#define        kGVOP_gv                cGVOPx_gv(kid)
+#define cSVOP_sv               cSVOPx_sv(PL_op)
+#define cSVOPo_sv              cSVOPx_sv(o)
+#define kSVOP_sv               cSVOPx_sv(kid)
+
 #define Nullop Null(OP*)
 
 /* Lowest byte of PL_opargs */