mklog: Always doubt in functions.
authorMarat Zakirov <m.zakirov@samsung.com>
Fri, 7 Nov 2014 08:15:19 +0000 (08:15 +0000)
committerMarat Zakirov <mzakirov@gcc.gnu.org>
Fri, 7 Nov 2014 08:15:19 +0000 (08:15 +0000)
contrib/

2014-11-07  Marat Zakirov  <m.zakirov@samsung.com>

* mklog: Always doubt in functions.
Add EOF protection.

From-SVN: r217212

contrib/ChangeLog
contrib/mklog

index 3878803bdf2ed7ad9e35550b534c62fc2e4ea003..9dcc7ea3ac9c77e8b689ef9e01bc9fe3505e6037 100644 (file)
@@ -1,3 +1,8 @@
+2014-11-07  Marat Zakirov  <m.zakirov@samsung.com>
+
+       * mklog: Always doubt in functions.  
+       Add EOF protection.  
+
 2014-10-31  Jan-Benedict Glaw  <jbglaw@lug-owl.de>
 
        * config-list.mk: Don't build Go for certain targets.
index 6ed4c6e8f51ebbc182cfb9b6bbe59281d1c8f4d9..8e3c6b619ac6bc62826dbcb5dd695bdad2201d75 100755 (executable)
@@ -108,10 +108,22 @@ sub remove_suffixes ($) {
        return $filename;
 }
 
+sub is_context_hunk_start {
+       return @_[0] =~ /^\*\*\*\*\*\** ([a-zA-Z0-9_].*)/;
+}
+
+sub is_unified_hunk_start {
+       return @_[0] =~ /^@@ .* @@ ([a-zA-Z0-9_].*)/;
+}
+
 # Check if line is a top-level declaration.
 # TODO: ignore preprocessor directives except maybe #define ?
 sub is_top_level {
        my ($function, $is_context_diff) = (@_);
+       if (is_unified_hunk_start ($function)
+           || is_context_hunk_start ($function)) {
+           return 1;
+       }
        if ($is_context_diff) {
                $function =~ s/^..//;
        } else {
@@ -200,14 +212,10 @@ foreach (@diff_lines) {
         $look_for_funs = 0;
     }
 
-    # Mark if we met doubtfully changed function.
-    $doubtfunc = 0;
-    if ($diff_lines[$line_idx] =~ /^@@ .* @@ ([a-zA-Z0-9_].*)/) {
-           $doubtfunc = 1;
+    if (is_unified_hunk_start ($diff_lines[$line_idx])) {
         $is_context_diff = 0;
     }
-    elsif ($diff_lines[$line_idx] =~ /^\*\*\*\*\*\** ([a-zA-Z0-9_].*)/) {
-           $doubtfunc = 1;
+    elsif (is_context_hunk_start ($diff_lines[$line_idx])) {
            $is_context_diff = 1;
     }
 
@@ -222,7 +230,6 @@ foreach (@diff_lines) {
     #
     # The third pattern looks for the starts of functions or classes
     # within a diff block both for context and unified diff files.
-
     if ($look_for_funs
         && (/^\*\*\*\*\*\** ([a-zA-Z0-9_].*)/
        || /^@@ .* @@ ([a-zA-Z0-9_].*)/
@@ -249,19 +256,19 @@ foreach (@diff_lines) {
        }
        # Check is function really modified
        $no_real_change = 0;
-       if ($doubtfunc) {
-               $idx = $line_idx;
+       $idx = $line_idx;
        # Skip line info in context diffs.
-               while ($is_context_diff && $diff_lines[$idx + 1] =~ /^[-\*]{3} [0-9]/) {
-                       ++$idx;
-               }
+       while ($idx <= $#diff_lines && $is_context_diff
+               && $diff_lines[$idx + 1] =~ /^[-\*]{3} [0-9]/) {
+               ++$idx;
+       }
        # Check all lines till the first change
        # for the presence of really changed function
-               do {
-                       ++$idx;
-                       $no_real_change = is_top_level ($diff_lines[$idx], $is_context_diff);
-               } while (!$no_real_change && ($diff_lines[$idx] !~ /^[-+!]/))
-       }
+       do {
+               ++$idx;
+               $no_real_change = $idx > $#diff_lines
+                                 || is_top_level ($diff_lines[$idx], $is_context_diff);
+       } while (!$no_real_change && ($diff_lines[$idx] !~ /^[-+!]/));
        if ($fn && !$seen_names{$fn} && !$no_real_change) {
            # If this is the first function in the file, we display it next
            # to the filename, so we need an extra space before the opening