From: Dave Mitchell Date: Tue, 22 May 2001 22:08:09 +0000 (+0100) Subject: big speedup X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=844495fbb8769a576a75dd72ddbc0cd5b94672b6;p=p5sagit%2Fp5-mst-13.2.git big speedup Message-Id: <200105222108.WAA09442@gizmo.fdgroup.co.uk> p4raw-id: //depot/perl@10182 --- diff --git a/emacs/e2ctags.pl b/emacs/e2ctags.pl index ef7a8d8..34e3e14 100644 --- a/emacs/e2ctags.pl +++ b/emacs/e2ctags.pl @@ -16,6 +16,7 @@ use strict; my $filename; my ($tag,$line_no,$line); my %tags = (); +my %filetags = (); my %files = (); my @lines = (); @@ -34,21 +35,17 @@ while (<>) { next if /struct/; if (/\x01/) { ($tag,$line_no) = /\x7F(\w+)\x01(\d+)/; - next unless $tag; - ##Take only the first entry per tag - next if defined($tags{$tag}); - $tags{$tag}{FILE} = $filename; - $tags{$tag}{LINE_NO} = $line_no; } else { tr/(//d; ($tag,$line_no) = /(\w+)\s*\x7F(\d+),/; - next unless $tag; - ##Take only the first entry per tag - next if defined($tags{$tag}); - $tags{$tag}{FILE} = $filename; - $tags{$tag}{LINE_NO} = $line_no; } + next unless $tag; + ##Take only the first entry per tag + next if defined($tags{$tag}); + $tags{$tag}{FILE} = $filename; + $tags{$tag}{LINE_NO} = $line_no; + push @{$filetags{$filename}}, $tag; } foreach $filename (keys %files) { @@ -56,8 +53,7 @@ foreach $filename (keys %files) { @lines = ; close FILE; chomp @lines; - foreach $tag ( keys %tags ) { - next unless $filename eq $tags{$tag}{FILE}; + foreach $tag ( @{$filetags{$filename}} ) { $line = $lines[$tags{$tag}{LINE_NO}-1]; if (length($line) >= 50) { $line = substr($line,0,50);