difforig Want-0.25-lHinV4 diff -u Want-0.25-lHinV4/Want.xs.orig --- Want-0.25-lHinV4/Want.xs.orig 2014-12-10 20:29:52.000000000 +0100 +++ Want-0.25-lHinV4/Want.xs 2015-04-28 13:07:43.000000000 +0200 @@ -282,7 +282,7 @@ else ll = l->length; /* printf("Looking for 0x%x starting at 0x%x\n", next, start); */ - for (o = start; o; p = o, o = o->op_sibling, ++cn) { + for (o = start; o; p = o, o = OpSIBLING(o), ++cn) { /* printf("(0x%x) %s -> 0x%x\n", o, PL_op_name[o->op_type], o->op_next);*/ if (o->op_type == OP_ENTERSUB && o->op_next == next) @@ -359,7 +359,7 @@ if (pm->op_type != OP_PUSHMARK) die("%s", "Want panicked: slice doesn't start with pushmark\n"); - if ( (l = pm->op_sibling) && (l->op_type == OP_LIST || (l->op_type == OP_NULL && l->op_targ == OP_LIST))) + if ( (l = OpSIBLING(pm)) && (l->op_type == OP_LIST || (l->op_type == OP_NULL && l->op_targ == OP_LIST))) return count_list(l, Nullop); else if (l) @@ -398,7 +398,7 @@ return 0; /*printf("count_list: returnop = 0x%x\n", returnop);*/ - for(o = cUNOPx(parent)->op_first; o; o=o->op_sibling) { + for(o = cUNOPx(parent)->op_first; o; o=OpSIBLING(o)) { /* printf("\t%-8s\t(0x%x)\n", PL_op_name[o->op_type], o->op_next);*/ if (returnop && o->op_type == OP_ENTERSUB && o->op_next == returnop) return i; @@ -528,7 +528,7 @@ PPCODE: /* This is a bit of a cheat, admittedly... */ if (o && o->op_type == OP_ENTERSUB && (first = cUNOPo->op_first) - && (second = first->op_sibling) && second->op_sibling != Nullop) + && (second = OpSIBLING(first)) && OpSIBLING(second) != Nullop) retval = "method_call"; else { retval = o ? (char *)PL_op_name[o->op_type] : "(none)";