diff options
author | Robin Houston <robin@cpan.org> | 2001-05-01 15:07:12 +0100 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-05-01 13:14:01 +0000 |
commit | 7e80da18e775cb5cc203f20486bcf5f748ca193a (patch) | |
tree | 9fdb6f3e6015041d2cb2f1b6b9beff0241cf5ae5 /ext | |
parent | ad46c0be20b917d8477a3e8e0270fa2c7a9e8382 (diff) | |
download | perl-7e80da18e775cb5cc203f20486bcf5f748ca193a.tar.gz |
optimised sort
Message-ID: <20010501140712.A4266@penderel>
p4raw-id: //depot/perl@9927
Diffstat (limited to 'ext')
-rw-r--r-- | ext/B/B/Deparse.pm | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/ext/B/B/Deparse.pm b/ext/B/B/Deparse.pm index c448fd644e..6e42a48046 100644 --- a/ext/B/B/Deparse.pm +++ b/ext/B/B/Deparse.pm @@ -13,7 +13,8 @@ use B qw(class main_root main_start main_cv svref_2object opnumber cstring OPf_KIDS OPf_REF OPf_STACKED OPf_SPECIAL OPpLVAL_INTRO OPpENTERSUB_AMPER OPpSLICE OPpCONST_BARE OPpTRANS_SQUASH OPpTRANS_DELETE OPpTRANS_COMPLEMENT OPpTARGET_MY - OPpCONST_ARYBASE OPpEXISTS_SUB + OPpCONST_ARYBASE OPpEXISTS_SUB OPpSORT_NUMERIC OPpSORT_INTEGER + OPpSORT_REVERSE SVf_IOK SVf_NOK SVf_ROK SVf_POK CVf_METHOD CVf_LOCKED CVf_LVALUE PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE PMf_SKIPWHITE @@ -2095,6 +2096,13 @@ sub indirop { $indir = $indir . " "; $kid = $kid->sibling; } + if ($name eq "sort" && $op->private & (OPpSORT_NUMERIC | OPpSORT_INTEGER)) { + $indir = ($op->private & OPpSORT_REVERSE) ? '{$b <=> $a} ' + : '{$a <=> $b} '; + } + elsif ($name eq "sort" && $op->private & OPpSORT_REVERSE) { + $indir = '{$b cmp $a} '; + } for (; !null($kid); $kid = $kid->sibling) { $expr = $self->deparse($kid, 6); push @exprs, $expr; |