Heuristic perl script to check for proper use of compensations.

This commit is contained in:
Sears Russell 2005-02-16 02:11:01 +00:00
parent fdf5344ec3
commit f68e6b9dd3
2 changed files with 84 additions and 0 deletions

80
utilities/check_compensations Executable file
View file

@ -0,0 +1,80 @@
#! /usr/bin/perl -w
use strict;
my @header = `find . -name '*.h'`;
my @source = `find . -name '*.c'`;
my %h;
my $nest = 0;
foreach my $i (@header) {
my @lines = `grep compensated_function $i`;
foreach my $j (@lines) {
if($j =~ /compensated_function[^\(]+ ([^\s\(]+)\s*\(/) {
$h{$1}++;
}
}
}
open EXTRAS, "additional_checked_functions";
while (defined(my $line = <EXTRAS>)) {
chomp $line;
$line =~ s/\#.*$//g;
$line =~ s/\s//g;
if($line =~ /\S/) {
$h{$line}++;
}
}
print "Found the following checked functions:\n";
print "------------------------------------- \n";
foreach my $i (sort keys %h) {
print("$i\n");
}
print "\n";
my $pwd = `pwd`;
chomp $pwd;
foreach my $i (@source) {
chomp $i;
open IN, $i;
print "$i\n";
# More accurate, but messes up line numbers. :(
# open IN, "utilities/cpp_no_inc <$i |";
$nest = 0;
my $num = 0;
while(my $line = <IN>) {
$num++;
my $in = 0;
if ($line =~ /\bbegin_action(_ret)?\b/) {
$nest++;
$in = 1;
}
if ($line =~ /\bend_action(_ret)?\b/ || $line =~ /\bcompensate(_ret)?\b/) {
$nest--;
if($in) {
warn "$pwd/$i:$num Cannot handle single line compensation checks\n";
}
}
if($line !~ /\bcompensated_function\b/) {
foreach my $j (keys %h) {
if(($line =~ /$j\s*\(/) && !$nest) {
warn "$pwd/$i:$num Unchecked invocation of $j\n";
}
}
if ($nest < 0) {
warn "$pwd/$i:$num Closed compensation check without open.\n";
$nest = 0;
}
}
}
if ($nest > 0) {
warn "$pwd/$i:$num Unclosed compensation check.\n";
}
close IN;
}

4
utilities/cpp_no_inc Executable file
View file

@ -0,0 +1,4 @@
#!/bin/bash
grep -v \#include |cpp|grep -v '^\# [0-9]'