summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerard Goossen <gerard@ggoossen.net>2011-01-17 22:12:53 +0100
committerFather Chrysostomos <sprout@cpan.org>2011-07-11 13:13:55 -0700
commitbbd913065e380df5bdf59cf693e631193415ca9b (patch)
tree164acb5a19fd84ed043bae823417f081e0cc642c
parentb852bf25024c0d639055357ed278f488e26294e4 (diff)
downloadperl-bbd913065e380df5bdf59cf693e631193415ca9b.tar.gz
use a flag to signal a stacking filetests instead of peeking at the next op.
Preparation for the codegeneration changes where the next op isn't accessible.
-rw-r--r--op.c4
-rw-r--r--op.h3
-rw-r--r--pp_sys.c6
3 files changed, 6 insertions, 7 deletions
diff --git a/op.c b/op.c
index fba667fb79..47ca0b2efa 100644
--- a/op.c
+++ b/op.c
@@ -7342,8 +7342,10 @@ Perl_ck_ftst(pTHX_ OP *o)
if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
o->op_private |= OPpFT_ACCESS;
if (PL_check[kidtype] == Perl_ck_ftst
- && kidtype != OP_STAT && kidtype != OP_LSTAT)
+ && kidtype != OP_STAT && kidtype != OP_LSTAT) {
o->op_private |= OPpFT_STACKED;
+ kid->op_private |= OPpFT_STACKING;
+ }
}
else {
#ifdef PERL_MAD
diff --git a/op.h b/op.h
index e184468c0c..cbcac7de2e 100644
--- a/op.h
+++ b/op.h
@@ -284,7 +284,8 @@ Deprecated. Use C<GIMME_V> instead.
/* Private for OP_FTXXX */
#define OPpFT_ACCESS 2 /* use filetest 'access' */
-#define OPpFT_STACKED 4 /* stacked filetest, as in "-f -x $f" */
+#define OPpFT_STACKED 4 /* stacked filetest, as "-f" in "-f -x $f" */
+#define OPpFT_STACKING 8 /* stacking filetest, as "-x" in "-f -x $f" */
/* Private for OP_(MAP|GREP)(WHILE|START) */
#define OPpGREP_LEX 2 /* iterate over lexical $_ */
diff --git a/pp_sys.c b/pp_sys.c
index 6ef266fcde..3325453aa3 100644
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -2914,11 +2914,7 @@ S_try_amagic_ftest(pTHX_ char chr) {
SPAGAIN;
- next = PL_op->op_next;
- if (next->op_type >= OP_FTRREAD &&
- next->op_type <= OP_FTBINARY &&
- next->op_private & OPpFT_STACKED
- ) {
+ if (PL_op->op_private & OPpFT_STACKING) {
if (SvTRUE(tmpsv))
/* leave the object alone */
return TRUE;