Skip to content

Commit

Permalink
Make sure cmp works on empty Lists
Browse files Browse the repository at this point in the history
It was returning Mu if one the the Lists was empty.  Spotted by raydiak++.

Fixes #4471
  • Loading branch information
lizmat committed Jul 21, 2021
1 parent 50bd171 commit efb3116
Showing 1 changed file with 25 additions and 20 deletions.
45 changes: 25 additions & 20 deletions src/core.c/Order.pm6
Expand Up @@ -77,27 +77,32 @@ multi sub infix:<cmp>(List:D \a, List:D \b) {
(my int $elems-b = b.elems), # reifies
(my $list-a := nqp::getattr(nqp::decont(a),List,'$!reified')),
(my $list-b := nqp::getattr(nqp::decont(b),List,'$!reified')),
(my int $elems = nqp::if(
nqp::islt_i($elems-a,$elems-b),
$elems-a,
$elems-b
)),
(my $i = -1),
nqp::while(
nqp::islt_i(($i = nqp::add_i($i,1)),$elems)
&& nqp::eqaddr(
(my $order := infix:<cmp>(
nqp::atpos($list-a,$i),
nqp::atpos($list-b,$i)
)),
Same
),
nqp::null
),
nqp::if(
nqp::eqaddr($order,Same),
ORDER(nqp::cmp_i($elems-a,$elems-b)), # same, length significant
$order # element different
(my int $elems = nqp::if(
nqp::islt_i($elems-a,$elems-b),
$elems-a,
$elems-b
)),
nqp::stmts( # elements to compare
(my $i = -1),
nqp::while(
nqp::islt_i(($i = nqp::add_i($i,1)),$elems)
&& nqp::eqaddr(
(my $order := infix:<cmp>(
nqp::atpos($list-a,$i),
nqp::atpos($list-b,$i)
)),
Same
),
nqp::null
),
nqp::if(
nqp::eqaddr($order,Same),
ORDER(nqp::cmp_i($elems-a,$elems-b)), # same, length significant
$order # element different
)
),
ORDER(nqp::cmp_i($elems-a,$elems-b)), # only length significant
)
)
)
Expand Down

0 comments on commit efb3116

Please sign in to comment.