This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #45513] Test failures on amd64-freebsd 6.2
[perl5.git] / op.h
diff --git a/op.h b/op.h
index 2631fa8..80f5703 100644 (file)
--- a/op.h
+++ b/op.h
  *     op_type         The type of the operation.
  *     op_opt          Whether or not the op has been optimised by the
  *                     peephole optimiser.
- *     op_static       Whether or not the op is statically defined.
- *                     This flag is used by the B::C compiler backend
- *                     and indicates that the op should not be freed.
  *
  *                     See the comments in S_clear_yystack() for more
  *                     details on the following three flags:
-
+ *
  *     op_latefree     tell op_free() to clear this op (and free any kids)
  *                     but not yet deallocate the struct. This means that
  *                     the op may be safely op_free()d multiple times
  *     op_latefreed    an op_latefree op has been op_free()d
  *     op_attached     this op (sub)tree has been attached to a CV
  *
- *     op_spare        two spare bits!
+ *     op_spare        three spare bits!
  *     op_flags        Flags common to all operations.  See OPf_* below.
  *     op_private      Flags peculiar to a particular operation (BUT,
  *                     by default, set to the number of children until
  *                     which may or may not check number of children).
  */
 
-#ifdef DEBUGGING_OPS
-#define OPCODE opcode
-#else
 #define OPCODE U16
-#endif
 
 #ifdef PERL_MAD
 #  define MADPROP_IN_BASEOP    MADPROP*        op_madprop;
     PADOFFSET  op_targ;                \
     unsigned   op_type:9;              \
     unsigned   op_opt:1;               \
-    unsigned   op_static:1;            \
     unsigned   op_latefree:1;          \
     unsigned   op_latefreed:1;         \
     unsigned   op_attached:1;          \
-    unsigned   op_spare:2;             \
+    unsigned   op_spare:3;             \
     U8         op_flags;               \
     U8         op_private;
 #endif
@@ -124,7 +116,7 @@ Deprecated.  Use C<GIMME_V> instead.
                                /*  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 " " */
+                               /*  On pushre, rx is used as part of split, e.g. split " " */
                                /*  On regcomp, "use re 'eval'" was in scope */
                                /*  On OP_READLINE, was <$filehandle> */
                                /*  On RV2[ACGHS]V, don't create GV--in
@@ -166,9 +158,6 @@ Deprecated.  Use C<GIMME_V> instead.
 #define OPpASSIGN_BACKWARDS    64      /* Left & right switched. */
 #define OPpASSIGN_CV_TO_GV     128     /* Possible optimisation for constants. */
 
-/* Private for OP_[AS]ASSIGN */
-#define OPpASSIGN_STATE                32      /* Assign to a "state" variable */
-
 /* Private for OP_MATCH and OP_SUBST{,CONST} */
 #define OPpRUNTIME             64      /* Pattern coming in on the stack */
 
@@ -323,7 +312,7 @@ struct pmop {
 #else
     REGEXP *    op_pmregexp;            /* compiled expression */
 #endif
-    U32                op_pmflags;
+    U32         op_pmflags;
     union {
        OP *    op_pmreplroot;          /* For OP_SUBST */
 #ifdef USE_ITHREADS
@@ -422,6 +411,8 @@ struct pmop {
 #  define PmopSTASHPV(o)       (PmopSTASH(o) ? HvNAME_get(PmopSTASH(o)) : NULL)
    /* op_pmstashstartu.op_pmstash is not refcounted */
 #  define PmopSTASHPV_set(o,pv)        PmopSTASH_set((o), gv_stashpv(pv,GV_ADD))
+/* Note that if this becomes non-empty, then S_forget_pmop in op.c will need
+   changing */
 #  define PmopSTASH_free(o)    
 #endif
 
@@ -640,7 +631,7 @@ struct loop {
 
 struct madprop {
     MADPROP* mad_next;
-    void *mad_val;
+    const void *mad_val;
     U32 mad_vlen;
 /*    short mad_count; */
     char mad_key;
@@ -655,7 +646,7 @@ struct token {
 #endif
 
 /*
- * Values that can be hold by mad_key :
+ * Values that can be held by mad_key :
  * ^       unfilled head spot
  * ,       literal ,
  * ;       literal ; (blank if implicit ; at end of block)
@@ -694,13 +685,14 @@ struct token {
  * E       tr/E/R/, /E/
  * f       folded constant op
  * F       peg op for format
+ * g       op was forced to be a word
  * i       if/unless modifier
  * I       if/elsif/unless statement
+ * k       local declarator
  * K       retired kid op
  * l       last index of array ($#foo)
  * L       label
  * m       modifier on regex
- * M       my assignment slurped into some other operator's target
  * n       sub or format name
  * o       current operator/declarator name
  * o       else/continue
@@ -713,7 +705,6 @@ struct token {
  * Q       optimized qw//
  * r       expression producing R
  * R       tr/E/R/ s/E/R/
- * R       assign slurped by split
  * s       sub signature
  * S       use import stub (no import)
  * S       retired sort block