update changelog
[p5sagit/Devel-BeginLift.git] / BeginLift.xs
index 0030357..ebf9279 100644 (file)
 
 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
 
+#ifndef linklist
+# define linklist(o) THX_linklist(aTHX_ o)
+STATIC OP *THX_linklist(pTHX_ OP *o) {
+  OP *first;
+  if(o->op_next)
+    return o->op_next;
+  first = cUNOPo->op_first;
+  if (first) {
+    OP *kid;
+    o->op_next = LINKLIST(first);
+    kid = first;
+    for (;;) {
+      if (kid->op_sibling) {
+   kid->op_next = LINKLIST(kid->op_sibling);
+   kid = kid->op_sibling;
+      } else {
+   kid->op_next = o;
+   break;
+      }
+    }
+  } else {
+    o->op_next = o;
+  }
+  return o->op_next;
+}
+#endif /* !linklist */
+
 STATIC OP *lift_cb(pTHX_ OP *o, CV *cv, void *user_data) {
   dSP;
   SV *sv;
@@ -103,13 +130,13 @@ MODULE = Devel::BeginLift  PACKAGE = Devel::BeginLift
 PROTOTYPES: DISABLE
 
 UV
-_setup (CV *cv)
+setup_for_cv (class, CV *cv)
   CODE:
     RETVAL = (UV)hook_op_check_entersubforcv (cv, lift_cb, NULL);
   OUTPUT:
     RETVAL
 
 void
-_teardown (UV id)
+teardown_for_cv (class, UV id)
   CODE:
     hook_op_check_entersubforcv_remove ((hook_op_check_id)id);