about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-02-15 09:46:33 +0000
committerEric Wong <e@yhbt.net>2020-02-16 00:06:21 +0000
commitaa0e67e63e58e0ee4fc3918bde25b9c04d48954a (patch)
tree789197f35d8601ba3ca79b3aca9a9464b13695aa
parent6940f5c8a8436a7a5c846d2079b9d8588872459f (diff)
downloadpublic-inbox-aa0e67e63e58e0ee4fc3918bde25b9c04d48954a.tar.gz
No point in passing something on stack only to stash it
into the $ctx which holds most other parameters used for
rendering the HTML.
-rw-r--r--lib/PublicInbox/View.pm14
-rw-r--r--lib/PublicInbox/WwwAtomStream.pm3
-rw-r--r--xt/perf-msgview.t3
3 files changed, 11 insertions, 9 deletions
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index d097d8ab..dcaee1ae 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -29,8 +29,9 @@ sub msg_page_i {
         my $more = $ctx->{more};
         if ($nr == 1) {
                 # $more cannot be true w/o $smsg being defined:
-                my $upfx = $more ? '../'.mid_escape($ctx->{smsg}->mid).'/' : '';
-                multipart_text_as_html(delete $ctx->{mime}, $upfx, $ctx);
+                $ctx->{mhref} = $more ? '../'.mid_escape($ctx->{smsg}->mid).'/'
+                                      : '';
+                multipart_text_as_html(delete $ctx->{mime}, $ctx);
                 ${delete $ctx->{obuf}} .= '</pre><hr>';
         } elsif ($more) {
                 ++$ctx->{end_nr};
@@ -83,10 +84,10 @@ sub msg_page_more {
         my $next = $ibx->over->next_by_mid($ctx->{mid}, \$id, \$prev);
         $ctx->{more} = $next ? [ $id, $prev, $next ] : undef;
         return '' unless $smsg;
-        my $upfx = '../' . mid_escape($smsg->mid) . '/';
+        $ctx->{mhref} = '../' . mid_escape($smsg->mid) . '/';
         my $mime = delete $smsg->{mime};
         _msg_page_prepare_obuf($mime->header_obj, $ctx, $nr);
-        multipart_text_as_html($mime, $upfx, $ctx);
+        multipart_text_as_html($mime, $ctx);
         ${delete $ctx->{obuf}} .= '</pre><hr>';
 }
 
@@ -486,11 +487,10 @@ sub thread_html_i { # PublicInbox::WwwStream::getline callback
 }
 
 sub multipart_text_as_html {
-        my (undef, $mhref, $ctx) = @_; # $mime = $_[0]
-        $ctx->{mhref} = $mhref;
+        # ($mime, $ctx) = @_; # msg_iter will do "$_[0] = undef"
 
         # scan through all parts, looking for displayable text
-        msg_iter($_[0], \&add_text_body, $ctx, 1);
+        msg_iter($_[0], \&add_text_body, $_[1], 1);
 }
 
 sub flush_quote {
diff --git a/lib/PublicInbox/WwwAtomStream.pm b/lib/PublicInbox/WwwAtomStream.pm
index ea871fe5..658934a2 100644
--- a/lib/PublicInbox/WwwAtomStream.pm
+++ b/lib/PublicInbox/WwwAtomStream.pm
@@ -142,7 +142,8 @@ sub feed_entry {
                 qq{<div\nxmlns="http://www.w3.org/1999/xhtml">} .
                 qq(<pre\nstyle="white-space:pre-wrap">);
         $ctx->{obuf} = \$s;
-        PublicInbox::View::multipart_text_as_html($mime, $href, $ctx);
+        $ctx->{mhref} = $href;
+        PublicInbox::View::multipart_text_as_html($mime, $ctx);
         delete $ctx->{obuf};
         $s .= '</pre></div></content></entry>';
 }
diff --git a/xt/perf-msgview.t b/xt/perf-msgview.t
index f676ca93..3ea92ec6 100644
--- a/xt/perf-msgview.t
+++ b/xt/perf-msgview.t
@@ -37,13 +37,14 @@ my $n = 0;
 my $t = timeit(1, sub {
         my $obuf = '';
         $ctx->{obuf} = \$obuf;
+        $ctx->{mhref} = '../';
         while (<$fh>) {
                 ($cmt, $type) = split / /;
                 next if $type ne 'blob';
                 ++$n;
                 $str = $git->cat_file($cmt);
                 $mime = PublicInbox::MIME->new($str);
-                PublicInbox::View::multipart_text_as_html($mime, '../', $ctx);
+                PublicInbox::View::multipart_text_as_html($mime, $ctx);
                 $obuf = '';
         }
 });