blob: 649aafb34146cb35acff2b8a6cb0c8cbd0e496e5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
#!/usr/bin/env perl
#
# Copyright (C) 2017 Free Software Foundation, Inc.
#
# 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 3, 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, see <https://www.gnu.org/licenses/>.
use warnings;
use strict;
my @lines = <>;
my %forwards = map { /^sub (\w+)\s*\((.*)\);$/ ? ("$1" => "$2") : () } @lines;
my %subs = map { /^sub (\w+)\s*\((.*)\)$/ ? ("$1" => "$2") : () } @lines;
my $error_count = 0;
# $subs{"foo"} = "$$";
# $subs{"bar"} = "@";
# $forwards{"bar"} = "\$";
# Check that every subroutine has a matching forward declaration with
# the same prototype.
foreach my $sub (keys (%subs))
{
# XXX: The location of the subroutine is not reported.
if (grep { $sub eq $_ } keys (%forwards))
{
if ($forwards{$sub} ne $subs{$sub})
{
$error_count += 1;
warn ("prototype mismatch for \"$sub\" subroutine\n");
}
}
else
{
$error_count += 1;
warn ("missing prototype for \"$sub\" subroutine\n");
}
}
exit (($error_count == 0) ? 0 : 1);
|