Make XS sort routines work again
authorFather Chrysostomos <sprout@cpan.org>
Sat, 15 Oct 2011 21:05:33 +0000 (14:05 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 15 Oct 2011 21:24:27 +0000 (14:24 -0700)
commit2fc49ef14c391f64250e0f99fbbed2007b880289
tree09a7cf04ca5912c7f2c2dec482ff0d5638f8e51b
parent67ecba2f90752611c774e73ef7ad292d8d4a03c9
Make XS sort routines work again

These stopped working when the CvROOT and CvXSUB fields were merged
in 5.10.0:

$ perl5.8.9 -le 'print sort utf8::is_utf8 2,1'
Usage: utf8::is_utf8(sv) at -e line 1.
$ perl5.10.0 -le 'print sort utf8::is_utf8 2,1'
12

(In the latter case, the utf8::is_utf8 routine is not being called.)

pp_sort has this:

    if (!(cv && CvROOT(cv))) {
if (cv && CvISXSUB(cv)) {

But CvROOT is the same as CvXSUB, so that block is never entered for
XSUBs, so this piece of code later on:

    if (is_xsub)
PL_sortcop = (OP*)cv;
    else
PL_sortcop = CvSTART(cv);

sets PL_sortcop to CvSTART for XSUBs, but CvSTART is NULL.  Later on,
this if condition fails:

if (PL_sortcop) {

so the XSUB is treated as being absent.
MANIFEST
ext/XS-APItest/APItest.xs
ext/XS-APItest/t/sort.t [new file with mode: 0644]
pp_sort.c