SYN SYN
[p5sagit/p5-mst-13.2.git] / ext / B / ramblings / flip-flop
index 183d541..e08333d 100644 (file)
@@ -1,21 +1,24 @@
 PP(pp_range)
 {
     if (GIMME == G_ARRAY)
-        return cCONDOP->op_true;
-    return SvTRUEx(PAD_SV(op->op_targ)) ? cCONDOP->op_false : cCONDOP->op_true;
+        return NORMAL;
+    if (SvTRUEx(PAD_SV(PL_op->op_targ)))
+       return cLOGOP->op_other;
+    else
+       return NORMAL;
 }
 
-pp_range is a CONDOP.
-In array context, it just returns op_true.
+pp_range is a LOGOP.
+In list context, it just returns op_next.
 In scalar context it checks the truth of targ and returns
-op_false if true, op_true if false.
+op_other if true, op_next if false.
 
 flip is an UNOP.
-It "looks after" its child which is always a pp_range CONDOP.
-In array context, it just returns the child's op_false.
+It "looks after" its child which is always a pp_range LOGOP.
+In list context, it just returns the child's op_other.
 In scalar context, there are three possible outcomes:
   (1) set child's targ to 1, our targ to 1 and return op_next.
-  (2) set child's targ to 1, our targ to 0, sp-- and return child's op_false.
+  (2) set child's targ to 1, our targ to 0, sp-- and return child's op_other.
   (3) Blank targ and  TOPs and return op_next.
 Case 1 happens for a "..." with a matching lineno... or true TOPs.
 Case 2 happens for a ".." with a matching lineno... or true TOPs.
@@ -37,14 +40,14 @@ Case 3 happens for a non-matching lineno or false TOPs.
 
 /* range */
 if (SvTRUE(curpad[op->op_targ]))
-    goto label(op_false);
-/* op_true */
+    goto label(op_other);
+/* op_next */
 ...
 /* flip */
-/* For "..." returns op_next. For ".." returns op_next or op_first->op_false */
+/* For "..." returns op_next. For ".." returns op_next or op_first->op_other */
 /* end of basic block */
 goto out;
-label(range op_false):
+label(range op_other):
 ...
 /* flop */
 out: