#define OPpTRANS_TO_UTF 2
#define OPpTRANS_IDENTICAL 4 /* right side is same as left */
#define OPpTRANS_SQUASH 8
-#define OPpTRANS_DELETE 16
+ /* 16 is used for OPpTARGET_MY */
#define OPpTRANS_COMPLEMENT 32
#define OPpTRANS_GROWS 64
+#define OPpTRANS_DELETE 128
+#define OPpTRANS_ALL (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF|OPpTRANS_IDENTICAL|OPpTRANS_SQUASH|OPpTRANS_COMPLEMENT|OPpTRANS_GROWS|OPpTRANS_DELETE)
/* Private for OP_REPEAT */
#define OPpREPEAT_DOLIST 64 /* List replication. */
/* Private of OP_FTXXX */
#define OPpFT_ACCESS 2 /* use filetest 'access' */
+#define OPpFT_STACKED 4 /* stacked filetest, as in "-f -x $f" */
#define OP_IS_FILETEST_ACCESS(op) \
(((op)->op_type) == OP_FTRREAD || \
((op)->op_type) == OP_FTRWRITE || \
((op)->op_type) == OP_FTEWRITE || \
((op)->op_type) == OP_FTEEXEC)
+/* Private for OP_(MAP|GREP)(WHILE|START) */
+#define OPpGREP_LEX 2 /* iterate over lexical $_ */
+
struct op {
BASEOP
};
#if defined(PL_OP_SLAB_ALLOC)
#define NewOp(m,var,c,type) \
- STMT_START { \
- var = (type *) Perl_Slab_Alloc(aTHX_ m,c*sizeof(type));\
- } STMT_END
+ (var = (type *) Perl_Slab_Alloc(aTHX_ m,c*sizeof(type)))
#define NewOpSz(m,var,size) \
- STMT_START { var = (OP *) Perl_Slab_Alloc(aTHX_ m,size); } STMT_END
+ (var = (OP *) Perl_Slab_Alloc(aTHX_ m,size))
#define FreeOp(p) Perl_Slab_Free(aTHX_ p)
#else
#define NewOp(m, var, c, type) Newz(m, var, c, type)
-#define NewOpSz(m, var, size) Newz(m, (char*)var, size, char)
+#define NewOpSz(m, var, size) \
+ (var = (OP*)safemalloc(size), memzero(var, size))
#define FreeOp(p) Safefree(p)
#endif