Return-Path: Mailing-List: contact modperl-cvs-help@apache.org; run by ezmlm Delivered-To: mailing list modperl-cvs@apache.org Received: (qmail 90235 invoked by uid 500); 21 Jan 2001 18:11:16 -0000 Delivered-To: apmail-modperl-2.0-cvs@apache.org Received: (qmail 90231 invoked by uid 1066); 21 Jan 2001 18:11:15 -0000 Date: 21 Jan 2001 18:11:15 -0000 Message-ID: <20010121181115.90230.qmail@apache.org> From: dougm@apache.org To: modperl-2.0-cvs@apache.org Subject: cvs commit: modperl-2.0/lib/Apache ParseSource.pm dougm 01/01/21 10:11:15 Modified: lib/Apache ParseSource.pm Log: C::Scan 0.75-tobe kicks ass, no longer need for ugly workarounds Revision Changes Path 1.3 +5 -71 modperl-2.0/lib/Apache/ParseSource.pm Index: ParseSource.pm =================================================================== RCS file: /home/cvs/modperl-2.0/lib/Apache/ParseSource.pm,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ParseSource.pm 2001/01/07 23:42:07 1.2 +++ ParseSource.pm 2001/01/21 18:11:15 1.3 @@ -4,19 +4,10 @@ use Apache::Build (); use Config (); -our $VERSION = '0.01'; +our $VERSION = '0.02'; -BEGIN { - unless ($0 eq '-e') { - my $filter = join '::', __PACKAGE__, 'cscan_filter'; - my $cpp = join ' ', $^X, '-M'.__PACKAGE__, '-e', $filter, '--'; - (tied %Config::Config)->{cppstdin} = $cpp; - } -} - sub new { my $class = shift; - #$C::Scan::Warn = 1; bless { config => Apache::Build->new, }, $class; @@ -52,6 +43,7 @@ sub scan { require C::Scan; + C::Scan->VERSION(0.75); require Carp; my $self = shift; @@ -155,7 +147,9 @@ my $struct = { type => $type, elts => [map { - { type => $_->[0], name => $_->[2] } + my $type = $_->[0]; + $type .= $_->[1] if $_->[1]; + { type => $type, name => $_->[2] } } @$elts], }; @@ -213,66 +207,6 @@ 1; EOF close $pm; -} - -#rewrite some constructs that C::Scan cannot parse -sub cscan_filter { - chomp(my $include = scalar ); - - my $command = "echo \'$include\' | $Config::Config{cppstdin} @ARGV|"; - - open my $cmd, $command or die; - - my %typedef; - - my $apache_file = 0; - my %typedef_aliases = - (cmd_parms_struct => 'cmd_parms', - command_struct => 'command_rec', - module_struct => 'module'); - - my $alias_re = join '|', keys %typedef_aliases; - - while (<$cmd>) { - #C::Scan cannot parse this - s/const\s+char\s*\*\s+const\s*\*/const char **/g; - - s/\b($alias_re)\b/$typedef_aliases{$1}/o; - - if (m(^\s*\#\s* # Leading hash - (line\s*)? # 1: Optional line - ([0-9]+)\s* # 2: Line number - (.*) # 3: The rest - )x) { - my $file = $3; - $file = $1 if $file =~ /"(.*)"/; - $apache_file = ($file =~ m:apache-2\.0: or $file =~ /\.c$/); - #only rewrite forward typedef struct declarations for apache files - print; - } elsif (s/typedef\s+(const\s+char\s+\*\s*)(\w+)/typedef ($1)$2/) { - #C::Scan cannot parse this construct without ()'s - print; - } elsif ($apache_file and /^\s*typedef\s+struct\s+(\w+)\s+(\w+)\;/ and $1 eq $2) { - $typedef{$1} = 1; - #rewrite forward typedef struct declaration (done below) - print; - } elsif (/^\s*struct\s+(\w+)\s+\{/ and $typedef{$1}) { - my $name = $1; - s/^\s*struct\s+\w+/typedef struct/; - print; - while (my $line = <$cmd>) { - if ($line =~ s/^\s*\}\;\s*$/\} $name\;/) { - print $line; - last; - } - print $line; - } - } else { - print; - } - } - - close $cmd; } 1;