about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--lib/PublicInbox/SearchThread.pm25
-rw-r--r--lib/PublicInbox/SearchView.pm4
-rw-r--r--lib/PublicInbox/View.pm4
3 files changed, 17 insertions, 16 deletions
diff --git a/lib/PublicInbox/SearchThread.pm b/lib/PublicInbox/SearchThread.pm
index 41fe859e..e0861328 100644
--- a/lib/PublicInbox/SearchThread.pm
+++ b/lib/PublicInbox/SearchThread.pm
@@ -141,9 +141,9 @@ sub order {
         $root->order_children( $ordersub );
 
         # and untangle it
-        my @kids = $root->children;
-        $self->{rootset} = \@kids;
-        $root->remove_child($_) for @kids;
+        my $kids = $root->children;
+        $self->{rootset} = $kids;
+        $root->remove_child($_) for @$kids;
 }
 
 package PublicInbox::SearchThread::Container;
@@ -163,7 +163,7 @@ sub add_child {
         croak "Cowardly refusing to become my own parent: $self"
           if $self == $child;
 
-        if (grep { $_ == $child } $self->children) {
+        if (grep { $_ == $child } @{$self->children}) {
                 # All is potentially correct with the world
                 $child->parent($self);
                 return;
@@ -220,14 +220,15 @@ sub children {
                 push @children, $visitor;
                 $visitor = $visitor->next
         }
-        return @children;
+        \@children;
 }
 
 sub set_children {
-        my $self = shift;
-        my $walk = $self->child( shift );
-        while (@_) { $walk = $walk->next( shift ) }
-        $walk->next(undef) if $walk;
+        my ($self, $children) = @_;
+        my $walk = $self->{child} = shift @$children;
+        do {
+                $walk = $walk->{next} = shift @$children;
+        } while ($walk);
 }
 
 sub order_children {
@@ -238,9 +239,9 @@ sub order_children {
 
         my $sub = sub {
                 my $cont = shift;
-                my @children = $cont->children;
-                return if @children < 2;
-                $cont->set_children( $ordersub->( @children ) );
+                my $children = $cont->children;
+                return if @$children < 2;
+                $cont->set_children( $ordersub->( $children ) );
         };
         $self->iterate_down( undef, $sub );
         undef $sub;
diff --git a/lib/PublicInbox/SearchView.pm b/lib/PublicInbox/SearchView.pm
index da311093..0d54c3df 100644
--- a/lib/PublicInbox/SearchView.pm
+++ b/lib/PublicInbox/SearchView.pm
@@ -156,10 +156,10 @@ sub mset_thread {
         $th->thread;
         if ($q->{r}) { # order by relevance
                 $th->order(sub {
-                        sort { (eval { $pct{$b->topmost->messageid} } || 0)
+                        [ sort { (eval { $pct{$b->topmost->messageid} } || 0)
                                         <=>
                                 (eval { $pct{$a->topmost->messageid} } || 0)
-                        } @_;
+                        } @{$_[0]} ];
                 });
         } else { # order by time (default for threaded view)
                 $th->order(*PublicInbox::View::sort_ts);
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 9f1bf460..e90efda1 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -856,10 +856,10 @@ sub skel_dump {
 }
 
 sub sort_ts {
-        sort {
+        [ sort {
                 (eval { $a->topmost->message->header('X-PI-TS') } || 0) <=>
                 (eval { $b->topmost->message->header('X-PI-TS') } || 0)
-        } @_;
+        } @{$_[0]} ];
 }
 
 sub _tryload_ghost ($$) {