This patch replaces those 'my varname;' with 'our varname;', i.e. it uses global var, rather than passing arguments to subroutine. So it can be a bit faster. Signed-off-by: Shi Lei <shi_lei@xxxxxxxxxxxxxx> --- build-aux/check-spacing.pl | 218 ++++++++++++++++++------------------- 1 file changed, 107 insertions(+), 111 deletions(-) diff --git a/build-aux/check-spacing.pl b/build-aux/check-spacing.pl index 478e7ab..9e2a2a4 100755 --- a/build-aux/check-spacing.pl +++ b/build-aux/check-spacing.pl @@ -23,12 +23,15 @@ use strict; use warnings; +our $ret = 0; + # # CheckFunctionBody: # $_[0]: $data(in) -# $_[1]: $location(in), which format is file-path:line-num:line-code -# $_[2]: $fn_linenum(inout), maintains start line-num of function body -# Returns 0 in case of success or 1 on failure +# $_[1]: $file(in) +# $_[2]: $line(in) +# $_[3]: $fn_linenum(inout), maintains start line-num of function body +# Set $ret 1 on failure # # Check incorrect indentation and blank first line in function body. # For efficiency, it only checks the first line of function body. @@ -37,29 +40,28 @@ use warnings; # move it into this subroutine. But *state* requires version >= v5.10.) # sub CheckFunctionBody { - my $ret = 0; - my ($data, $location, $fn_linenum) = @_; + our ($data, $file, $line, $fn_linenum); # Check first line of function block - if ($$fn_linenum) { - if ($$data =~ /^\s*$/) { - print "Blank line before content in function body:\n$$location"; + if ($fn_linenum) { + if ($data =~ /^\s*$/) { + print "Blank line before content in function body:\n"; + print "$file:$.:\n$line"; $ret = 1; - } elsif ($$data !~ /^[ ]{4}\S/) { - unless ($$data =~ /^[ ]\w+:$/ || $$data =~ /^}/) { - print "Incorrect indentation in function body:\n$$location"; + } elsif ($data !~ /^[ ]{4}\S/) { + unless ($data =~ /^[ ]\w+:$/ || $data =~ /^}/) { + print "Incorrect indentation in function body:\n"; + print "$file:$.:\n$line"; $ret = 1; } } - $$fn_linenum = 0; + $fn_linenum = 0; } # Detect start of function block - if ($$data =~ /^{$/) { - $$fn_linenum = $.; + if ($data =~ /^{$/) { + $fn_linenum = $.; } - - return $ret; } # @@ -71,42 +73,40 @@ sub CheckFunctionBody { # (Also, the @incomment could be declared with *state* and move it in.) # sub KillComments { - my ($data, $incomment) = @_; + our ($data, $incomment); # Kill contents of multi-line comments # and detect end of multi-line comments - if ($$incomment) { - if ($$data =~ m,\*/,) { - $$incomment = 0; - $$data =~ s,^.*\*/,*/,; + if ($incomment) { + if ($data =~ m,\*/,) { + $incomment = 0; + $data =~ s,^.*\*/,*/,; } else { - $$data = ""; + $data = ""; } } # Kill single line comments, and detect # start of multi-line comments - if ($$data =~ m,/\*.*\*/,) { - $$data =~ s,/\*.*\*/,/* */,; - } elsif ($$data =~ m,/\*,) { - $$incomment = 1; - $$data =~ s,/\*.*,/*,; + if ($data =~ m,/\*.*\*/,) { + $data =~ s,/\*.*\*/,/* */,; + } elsif ($data =~ m,/\*,) { + $incomment = 1; + $data =~ s,/\*.*,/*,; } - - return; } # # CheckWhiteSpaces: # $_[0]: $data(in) -# $_[1]: $location(in), which format is file-path:line-num:line-code -# Returns 0 in case of success or 1 on failure +# $_[1]: $file(in) +# $_[1]: $line(in) +# Set $ret on failure # # Check whitespaces according to code spec of libvirt. # sub CheckWhiteSpaces { - my $ret = 0; - my ($data, $location) = @_; + our ($data, $file, $line); # We need to match things like # @@ -126,7 +126,7 @@ sub CheckWhiteSpaces { # later on. # For temporary modifications - my $tmpdata = $$data; + my $tmpdata = $data; while ($tmpdata =~ /(\w+)\s\((?!\*)/) { my $kw = $1; @@ -134,30 +134,34 @@ sub CheckWhiteSpaces { if ($kw =~ /^(?:if|for|while|switch|return)$/) { $tmpdata =~ s/(?:$kw\s\()/XXX(/; } else { - print "Whitespace after non-keyword:\n$$location"; + print "Whitespace after non-keyword:\n"; + print "$file:$.:\n$line"; $ret = 1; last; } } # Require whitespace immediately after keywords - if ($$data =~ /\b(?:if|for|while|switch|return)\(/) { - print "No whitespace after keyword:\n$$location"; + if ($data =~ /\b(?:if|for|while|switch|return)\(/) { + print "No whitespace after keyword:\n"; + print "$file:$.:\n$line"; $ret = 1; } # Forbid whitespace between )( of a function typedef - if ($$data =~ /\(\*\w+\)\s+\(/) { - print "Whitespace between ')' and '(':\n$$location"; + if ($data =~ /\(\*\w+\)\s+\(/) { + print "Whitespace between ')' and '(':\n"; + print "$file:$.:\n$line"; $ret = 1; } # Forbid whitespace following ( or prior to ) # but allow whitespace before ) on a single line # (optionally followed by a semicolon) - if (($$data =~ /\s\)/ && not $$data =~ /^\s+\);?$/) || - $$data =~ /\((?!$)\s/) { - print "Whitespace after '(' or before ')':\n$$location"; + if (($data =~ /\s\)/ && not $data =~ /^\s+\);?$/) || + $data =~ /\((?!$)\s/) { + print "Whitespace after '(' or before ')':\n"; + print "$file:$.:\n$line"; $ret = 1; } @@ -171,35 +175,37 @@ sub CheckWhiteSpaces { # errno == EINTR) # ; # - if ($$data =~ /\s[;,]/) { - unless ($$data =~ /\S; ; / || - $$data =~ /^\s+;/) { - print "Whitespace before semicolon or comma:\n$$location"; + if ($data =~ /\s[;,]/) { + unless ($data =~ /\S; ; / || + $data =~ /^\s+;/) { + print "Whitespace before semicolon or comma:\n"; + print "$file:$.:\n$line"; $ret = 1; } } # Require EOL, macro line continuation, or whitespace after ";". # Allow "for (;;)" as an exception. - if ($$data =~ /;[^ \\\n;)]/) { - print "Invalid character after semicolon:\n$$location"; + if ($data =~ /;[^ \\\n;)]/) { + print "Invalid character after semicolon:\n"; + print "$file:$.:\n$line"; $ret = 1; } # Require EOL, space, or enum/struct end after comma. - if ($$data =~ /,[^ \\\n)}]/) { - print "Invalid character after comma:\n$$location"; + if ($data =~ /,[^ \\\n)}]/) { + print "Invalid character after comma:\n"; + print "$file:$.:\n$line"; $ret = 1; } # Require spaces around assignment '=', compounds and '==' - if ($$data =~ /[^ ]\b[!<>&|\-+*\/%\^=]?=/ || - $$data =~ /=[^= \\\n]/) { - print "Spacing around '=' or '==':\n$$location"; + if ($data =~ /[^ ]\b[!<>&|\-+*\/%\^=]?=/ || + $data =~ /=[^= \\\n]/) { + print "Spacing around '=' or '==':\n"; + print "$file:$.:\n$line"; $ret = 1; } - - return $ret; } # @@ -210,46 +216,43 @@ sub CheckWhiteSpaces { # $_[3]: $cb_linenum(inout) # $_[4]: $cb_code(inout) # $_[5]: $cb_scolon(inout) -# Returns 0 in case of success or 1 on failure +# Set $ret 1 on failure # # Check whitespaces according to code spec of libvirt. # sub CheckCurlyBrackets { - my $ret = 0; - my ($data, $file, $line, $cb_linenum, $cb_code, $cb_scolon) = @_; + our ($data, $file, $line, $cb_linenum, $cb_code, $cb_scolon); # One line conditional statements with one line bodies should # not use curly brackets. - if ($$data =~ /^\s*(if|while|for)\b.*\{$/) { - $$cb_linenum = $.; - $$cb_code = $$line; - $$cb_scolon = 0; + if ($data =~ /^\s*(if|while|for)\b.*\{$/) { + $cb_linenum = $.; + $cb_code = $line; + $cb_scolon = 0; } # We need to check for exactly one semicolon inside the body, # because empty statements (e.g. with comment only) are # allowed - if ($$cb_linenum == $. - 1 && $$data =~ /^[^;]*;[^;]*$/) { - $$cb_code .= $$line; - $$cb_scolon = 1; + if ($cb_linenum == $. - 1 && $data =~ /^[^;]*;[^;]*$/) { + $cb_code .= $line; + $cb_scolon = 1; } - if ($$data =~ /^\s*}\s*$/ && - $$cb_linenum == $. - 2 && - $$cb_scolon) { + if ($data =~ /^\s*}\s*$/ && + $cb_linenum == $. - 2 && + $cb_scolon) { print "Curly brackets around single-line body:\n"; - print "$$file:$$cb_linenum-$.:\n$$cb_code$$line"; + print "$file:$cb_linenum-$.:\n$cb_code$line"; $ret = 1; # There _should_ be no need to reset the values; but to # keep my inner peace... - $$cb_linenum = 0; - $$cb_scolon = 0; - $$cb_code = ""; + $cb_linenum = 0; + $cb_scolon = 0; + $cb_code = ""; } - - return $ret; } # @@ -259,22 +262,21 @@ sub CheckCurlyBrackets { # $_[2]: $line(in) # $_[3]: @paren_stack(inout), which maintains information # of the parenthesis -# Returns 0 in case of success or 1 on failure +# Set $ret 1 on failure # # Check misaligned stuff in parenthesis: # 1. For misaligned arguments of function # 2. For misaligned conditions of [if|while|switch|...] # sub CheckMisalignment { - my $ret = 0; - my ($data, $file, $line, $paren_stack) = @_; + our ($data, $file, $line, @paren_stack); # Check alignment based on @paren_stack - if (@$paren_stack) { - if ($$data =~ /(\S+.*$)/) { - my $pos = $$paren_stack[-1][0]; - my $linenum = $$paren_stack[-1][1]; - my $code = $$paren_stack[-1][2]; + if (@paren_stack) { + if ($data =~ /(\S+.*$)/) { + my $pos = $paren_stack[-1][0]; + my $linenum = $paren_stack[-1][1]; + my $code = $paren_stack[-1][2]; if ($pos != length($`)) { my $pad = ""; my $indicator = ""; @@ -282,7 +284,7 @@ sub CheckMisalignment { $pad = " " x $pos . "...\n"; } print "Misaligned line in parenthesis:\n"; - print "$$file:$linenum-$.:\n$code$pad$$line"; + print "$file:$linenum-$.:\n$code$pad$line"; if ($pos > length($`)) { $indicator = " " x length($`); $indicator .= "~" x ($pos - length($`)); @@ -299,9 +301,9 @@ sub CheckMisalignment { } # Maintain @paren_stack - if ($$data =~ /.*[()]/) { + if ($data =~ /.*[()]/) { my $pos = 0; - my $temp = $$data; + my $temp = $data; $temp =~ s/\s+$//; # Kill the content between matched parenthesis and themselves @@ -310,12 +312,12 @@ sub CheckMisalignment { # Pop a item for the open-paren when finding close-paren while (($pos = index($temp, "\)", $pos)) >= 0) { - if (@$paren_stack) { - pop(@$paren_stack); + if (@paren_stack) { + pop(@paren_stack); $pos++; } else { print "Warning: found unbalanced parenthesis:\n"; - print "$$file:$.:\n$$line\n"; + print "$file:$.:\n$line\n"; $ret = 1; last; } @@ -330,36 +332,31 @@ sub CheckMisalignment { $correct = ($correct >= $recent) ? $correct : $recent; $correct += 4 - ($correct % 4); if ($correct < $pos) { - push @$paren_stack, [$correct, $., $$line]; + push @paren_stack, [$correct, $., $line]; last; } } - push @$paren_stack, [$pos+1, $., $$line]; + push @paren_stack, [$pos+1, $., $line]; $pos++; } } - - return $ret; } -my $ret = 0; - -foreach my $file (@ARGV) { +foreach our $file (@ARGV) { # Per-file variables for multiline Curly Bracket (cb_) check - my $cb_linenum = 0; - my $cb_code = ""; - my $cb_scolon = 0; - my $fn_linenum = 0; - my $incomment = 0; - my @paren_stack; + our $cb_linenum = 0; + our $cb_code = ""; + our $cb_scolon = 0; + our $fn_linenum = 0; + our $incomment = 0; + our @paren_stack = (); open FILE, $file; - while (defined (my $line = <FILE>)) { - my $has_define = 0; - my $data = $line; - my $location = "$file:$.:\n$line"; + while (defined (our $line = <FILE>)) { + our $has_define = 0; + our $data = $line; # Kill any quoted , ; = or " $data =~ s/'[";,=]'/'X'/g; @@ -376,14 +373,13 @@ foreach my $file (@ARGV) { # Ignore all macros except for #define next if $data =~ /^#/; - $ret = 1 if CheckFunctionBody(\$data, \$location, \$fn_linenum); + CheckFunctionBody(); - KillComments(\$data, \$incomment); + KillComments(); - $ret = 1 if CheckWhiteSpaces(\$data, \$location); + CheckWhiteSpaces(); - $ret = 1 if CheckCurlyBrackets(\$data, \$file, \$line, - \$cb_linenum, \$cb_code, \$cb_scolon); + CheckCurlyBrackets(); } ##################################################################### @@ -395,7 +391,7 @@ foreach my $file (@ARGV) { ##################################################################### next unless $file =~ /^src\/(?!esx|qemu|hyperv|lxc|conf|libxl|vbox|test|security)/; - $ret = 1 if CheckMisalignment(\$data, \$file, \$line, \@paren_stack); + CheckMisalignment(); } close FILE; } -- 2.17.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list