/* op.h
*
- * Copyright (c) 1991-2003, Larry Wall
+ * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ * 2000, 2001, 2002, 2003, by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
#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. */
#define OPpEARLY_CV 32 /* foo() called before sub foo was parsed */
/* OP_?ELEM only */
#define OPpLVAL_DEFER 16 /* Defer creation of array/hash elem */
- /* OP_RV2?V, OP_GVSV only */
+ /* OP_RV2?V, OP_GVSV, OP_ENTERITER only */
#define OPpOUR_INTRO 16 /* Variable was in an our() */
/* OP_RV2[AH]V, OP_PAD[AH]V, OP_[AH]ELEM */
#define OPpMAYBE_LVSUB 8 /* We might be an lvalue to return */
#define OPpHUSH_VMSISH 64 /* hush DCL exit msg vmsish mode*/
#define OPpEXIT_VMSISH 128 /* exit(0) vs. exit(1) vmsish mode*/
+/* 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_FTREXEC || \
+ ((op)->op_type) == OP_FTEREAD || \
+ ((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
};
#include "reentr.h"
#endif
+#if defined(PL_OP_SLAB_ALLOC)
+#define NewOp(m,var,c,type) \
+ (var = (type *) Perl_Slab_Alloc(aTHX_ m,c*sizeof(type)))
+#define NewOpSz(m,var,size) \
+ (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) \
+ (var = (OP*)safemalloc(size), memzero(var, size))
+#define FreeOp(p) Safefree(p)
+#endif