This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
File::Copy under OS/2
[perl5.git] / op.h
diff --git a/op.h b/op.h
index f3ef541..4b57b33 100644 (file)
--- a/op.h
+++ b/op.h
@@ -23,9 +23,9 @@
  *                     which may or may not check number of children).
  */
 
-typedef U16 PADOFFSET;
+typedef U32 PADOFFSET;
 
-#ifdef DEBUGGING
+#ifdef DEBUGGING_OPS
 #define OPCODE opcode
 #else
 #define OPCODE U16
@@ -41,7 +41,7 @@ typedef U16 PADOFFSET;
     U8         op_flags;               \
     U8         op_private;
 
-#define GIMME (op->op_flags & OPf_KNOW ? op->op_flags & OPf_LIST : cxstack[cxstack_ix].blk_gimme & G_ARRAY)
+#define GIMME (op->op_flags & OPf_KNOW ? op->op_flags & OPf_LIST : dowantarray())
 
 /* Public flags */
 #define OPf_LIST       1       /* Do operator in list context. */
@@ -63,6 +63,7 @@ typedef U16 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_(ENTER|LEAVE)EVAL, don't clear $@ */
 
 /* Private for lvalues */
 #define OPpLVAL_INTRO  128     /* Lvalue must be localized */
@@ -83,9 +84,12 @@ typedef U16 PADOFFSET;
 
 /* Private for OP_ENTERSUB, OP_RV2?V, OP_?ELEM */
   /* (lower bits carry hints) */
-#define OPpDEREF_DB            16      /* Debug subroutine. */
-#define OPpDEREF_AV            32      /* Want ref to AV. */
-#define OPpDEREF_HV            64      /* Want ref to HV. */
+#define OPpENTERSUB_AMPER      8       /* Used & form to call. */
+#define OPpENTERSUB_DB         16      /* Debug subroutine. */
+#define OPpDEREF               (32|64) /* Want ref to something: */
+#define OPpDEREF_AV            32      /*   Want ref to AV. */
+#define OPpDEREF_HV            64      /*   Want ref to HV. */
+#define OPpDEREF_SV            (32|64) /*   Want ref to SV. */
 
 /* Private for OP_CONST */
 #define OPpCONST_ENTERED       16      /* Has been entered as symbol. */
@@ -98,9 +102,15 @@ typedef U16 PADOFFSET;
 /* Private for OP_LIST */
 #define OPpLIST_GUESSED                64      /* Guessed that pushmark was needed. */
 
-/* Private for OP_LEAVE and friends */
+/* Private for OP_LEAVE, OP_DELETE, and friends(?) */
 #define OPpLEAVE_VOID          64      /* No need to copy out values. */
 
+/* Private for OP_DELETE */
+#define OPpSLICE               32      /* Operating on a list of keys */
+
+/* Private for OP_SORT, OP_PRTF, OP_SPRINTF, string cmp'n, and case changers */
+#define OPpLOCALE              64      /* Use locale */
+
 struct op {
     BASEOP
 };
@@ -147,6 +157,7 @@ struct pmop {
     REGEXP *   op_pmregexp;            /* compiled expression */
     SV *       op_pmshort;             /* for a fast bypass of execute() */
     U16                op_pmflags;
+    U16                op_pmpermflags;
     char       op_pmslen;
 };
 
@@ -164,7 +175,7 @@ struct pmop {
 #define PMf_WHITE      0x0800          /* pattern is \s+ */
 #define PMf_MULTILINE  0x1000          /* assume multiple lines */
 #define PMf_SINGLELINE 0x2000          /* assume single line */
-#define PMf_UNUSED     0x4000          /* (unused) */
+#define PMf_LOCALE     0x4000          /* use locale for character types */
 #define PMf_EXTENDED   0x8000          /* chuck embedded whitespace */
 
 struct svop {
@@ -182,12 +193,6 @@ struct pvop {
     char *     op_pv;
 };
 
-struct cvop {
-    BASEOP
-    CV *       op_cv;
-    OP *       op_cont;
-};
-
 struct loop {
     BASEOP
     OP *       op_first;
@@ -207,7 +212,6 @@ struct loop {
 #define cSVOP ((SVOP*)op)
 #define cGVOP ((GVOP*)op)
 #define cPVOP ((PVOP*)op)
-#define cCVOP ((CVOP*)op)
 #define cCOP ((COP*)op)
 #define cLOOP ((LOOP*)op)
 
@@ -220,7 +224,6 @@ struct loop {
 #define kSVOP ((SVOP*)kid)
 #define kGVOP ((GVOP*)kid)
 #define kPVOP ((PVOP*)kid)
-#define kCVOP ((CVOP*)kid)
 #define kCOP ((COP*)kid)
 #define kLOOP ((LOOP*)kid)