зеркало из https://github.com/mozilla/pjs.git
173 строки
4.2 KiB
Perl
Executable File
173 строки
4.2 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
# $Id: ident,v 1.8 2006-12-07 04:59:38 reed%reedloden.com Exp $
|
|
|
|
# ident -- Look up identifiers
|
|
#
|
|
# Arne Georg Gleditsch <argggh@ifi.uio.no>
|
|
# Per Kristian Gjermshus <pergj@ifi.uio.no>
|
|
#
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
######################################################################
|
|
|
|
use lib 'lib/';
|
|
use LXR::Common;
|
|
use LXR::Config;
|
|
use DB_File;
|
|
|
|
%ty = (('M', 'preprocessor macro'),
|
|
('V', 'variable'),
|
|
('f', 'function prototype'),
|
|
('F', 'function'),
|
|
('C', 'class'), # C++
|
|
('c', '(forwarded) class'), # C++
|
|
('T', 'type'),
|
|
('S', 'struct type'),
|
|
('E', 'enum type'),
|
|
('U', 'union type'));
|
|
|
|
|
|
sub ident {
|
|
|
|
print("<P ALIGN=CENTER>\n",
|
|
"Type the full name of an identifier to summarize",
|
|
"<BR>(a function name, variable name, typedef, etc.)\n",
|
|
"<BR>Matches are case-sensitive.\n");
|
|
|
|
print("<form method=get action=\"ident\">\n");
|
|
|
|
foreach ($Conf->allvariables) {
|
|
if ($Conf->variable($_) ne $Conf->vardefault($_)) {
|
|
print("<input type=hidden name=\"",$_, "\" ",
|
|
"value=\"", $Conf->variable($_), "\">\n");
|
|
}
|
|
}
|
|
|
|
print("<B>Identifier: </B><input type=text name=\"i\" ",
|
|
"value=\"",$identifier,"\" size=50>\n",
|
|
"<input type=submit value=\"Find\">\n",
|
|
"</form>\n");
|
|
|
|
|
|
if ($identifier) {
|
|
tie(%xref, "DB_File", $Conf->dbdir."/xref",
|
|
O_RDONLY, undef, $DB_HASH) ||
|
|
&fatal("Could not open \"".$Conf->dbdir."/xref\"");
|
|
|
|
@refs = split(/\t/,$xref{$identifier});
|
|
|
|
print("<h1>$identifier</h1>\n");
|
|
|
|
if (@refs) {
|
|
tie(%fileidx, "DB_File", $Conf->dbdir."/fileidx",
|
|
O_RDONLY, undef, $DB_HASH) ||
|
|
&fatal("Could not open \"".$Conf->dbdir."/fileidx\"");
|
|
|
|
foreach (@refs) {
|
|
$f{$1} .= "$2\t" if /^(.)(.*)/;
|
|
}
|
|
|
|
foreach $t (keys(%ty)) {
|
|
if ($f{$t}) {
|
|
print("Defined as a $ty{$t} in:<ul>\n");
|
|
|
|
@_ = split(/\t/, $f{$t});
|
|
unshift(@_);
|
|
foreach (@_) {
|
|
($fnum, $line, @clss) = split(/:/, $_);
|
|
|
|
print("<li>",
|
|
&fileref("$fileidx{$fnum}, line $line",
|
|
"/$fileidx{$fnum}", $line));
|
|
|
|
if (@clss) {
|
|
if ($t eq 'F' || $t eq 'f') {
|
|
print(", as member of ");
|
|
if ($xref{$clss[0]}) {
|
|
print(&idref("class $clss[0]", $clss[0]));
|
|
} else {
|
|
print("class $clss[0]");
|
|
}
|
|
} elsif ($t eq 'C') {
|
|
print(", inheriting <ul>\n");
|
|
foreach (@clss) {
|
|
print("<li>");
|
|
if ($xref{$_}) {
|
|
print(&idref("class $_", $clss[0]));
|
|
} else {
|
|
print("class $_");
|
|
}
|
|
}
|
|
print("</ul>");
|
|
}
|
|
}
|
|
print("\n");
|
|
}
|
|
print("</ul>\n");
|
|
}
|
|
}
|
|
|
|
print("Referenced (in ",int(grep(/^R/, @refs))," files total) in:\n",
|
|
"<ul>\n");
|
|
$concise = 0;
|
|
foreach (@refs) {
|
|
if (/^R(.+):([\d,]+)/) {
|
|
$fnam = $fileidx{$1};
|
|
@fpos = split(/,/, $2);
|
|
if ($concise) {
|
|
print("<li>", &fileref("$fnam", "/$fnam"),
|
|
", ",$#fpos+1," times\n");
|
|
} else {
|
|
print("<li>$fnam:\n<ul>\n");
|
|
print(
|
|
"View "
|
|
."<a href=\"" . $Conf->bonsaihome ."/cvslog.cgi?file=/mozilla/"
|
|
.$fnam
|
|
."&root=/cvsroot\">change log</a> or Blame "
|
|
."<a href=\"" . $Conf->bonsaihome . "/cvsblame.cgi?&file=/mozilla/"
|
|
.$fnam
|
|
."&root=/cvsroot\">"
|
|
."annotations</a>"
|
|
."\n"
|
|
);
|
|
|
|
foreach (@fpos) {
|
|
print("<li>", &fileref("line $_",
|
|
"/$fnam", $_),"\n");
|
|
}
|
|
print("</ul>\n");
|
|
}
|
|
}
|
|
}
|
|
print("</ul>\n");
|
|
untie(%fileidx);
|
|
|
|
} else {
|
|
print("<br><b>Not used</b>");
|
|
}
|
|
|
|
untie(%xref);
|
|
}
|
|
}
|
|
|
|
($Conf, $HTTP, $Path) = &init;
|
|
$identifier = $HTTP->{'param'}->{'i'};
|
|
|
|
&makeheader('ident');
|
|
&ident;
|
|
&makefooter('ident');
|
|
|