123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- #!/usr/bin/perl
- use strict;
- use warnings;
- if ($ARGV[0] eq '--help') {
- print << "EOF";
- Usage:
- $0 definitions.c
- EOF
- exit;
- }
- my ($cfname, $sfname, $gfname, $cpp) = @ARGV;
- my $F;
- open $F, "<", $cfname;
- my $text = join "", <$F>;
- close $F;
- my $s = qr/(?>\s*)/aso;
- my $w = qr/(?>\w+)/aso;
- my $argname = qr/$w(?:\[(?>\w+)\])?/aso;
- my $type_regex = qr/(?:$w$s\**$s)+/aso;
- my $arg_regex = qr/(?:$type_regex$s$argname)/aso;
- while ($text =~ /
- (?<=\n) # Definition starts at the start of line
- $type_regex # Return type
- $s$w # Function name
- $s\($s
- (?:
- $arg_regex(?:$s,$s$arg_regex)*+
- ($s,$s\.\.\.)? # varargs function
- |void
- )?
- $s\)
- (?:$s FUNC_ATTR_$w(?:\((?>[^)]*)\))?)*+ # Optional attributes
- (?=$s;) # Ending semicolon
- /axsogp) {
- my $match = "${^MATCH}";
- my $s = "${^PREMATCH}";
- $s =~ s/[^\n]++//g;
- my $line = 1 + length $s;
- print "${cfname}:${line}: $match\n";
- }
|