[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [tor/master] Add comments to annotate_ifdef_directives



commit 0b367f3386b0ec25f85716001690c95ae2e78c4d
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
Date:   Wed Sep 18 10:41:05 2019 -0400

    Add comments to annotate_ifdef_directives
---
 scripts/maint/annotate_ifdef_directives | 40 +++++++++++++++++++++++++++++++--
 1 file changed, 38 insertions(+), 2 deletions(-)

diff --git a/scripts/maint/annotate_ifdef_directives b/scripts/maint/annotate_ifdef_directives
index ca267a865..15121652d 100755
--- a/scripts/maint/annotate_ifdef_directives
+++ b/scripts/maint/annotate_ifdef_directives
@@ -2,21 +2,54 @@
 # Copyright (c) 2017-2019, The Tor Project, Inc.
 # See LICENSE for licensing information
 
+# This script iterates over a list of C files. For each file, it looks at the
+# #if/#else C macros, and annotates them with comments explaining what they
+# match.
+#
+# For example, it replaces this:
+#
+#  #ifdef HAVE_OCELOT
+#   // 500 lines of ocelot code
+#  #endif
+#
+# with this:
+#
+#  #ifdef HAVE_OCELOT
+#   // 500 lines of ocelot code
+#  #endif /* defined(HAVE_OCELOT) */
+#
+# Note that only #else and #endif lines are annotated.  Existing comments
+# on those lines are removed.
+
 import re
 
+# Any block with fewer than this many lines does not need annotations.
 LINE_OBVIOUSNESS_LIMIT = 4
 
 class Problem(Exception):
     pass
 
 def uncomment(s):
+    """
+    Remove existing trailing comments from an #else or #endif line.
+    """
     s = re.sub(r'//.*','',s)
     s = re.sub(r'/\*.*','',s)
     return s.strip()
 
 def translate(f_in, f_out):
-    whole_file = []
+    """
+    Read a file from f_in, and write its annotated version to f_out.
+    """
+    # A stack listing our current if/else state.  Each member of the stack
+    # is a list of directives.  Each directive is a 3-tuple of
+    #    (command, rest, lineno)
+    # where "command" is one of if/ifdef/ifndef/else/elif, and where
+    # "rest" is an expression in a format suitable for use with #if, and where
+    # lineno is the line number where the directive occurred.
     stack = []
+    # the stack element corresponding to the top level of the file.
+    whole_file = []
     cur_level = whole_file
     lineno = 0
     for line in f_in:
@@ -24,6 +57,7 @@ def translate(f_in, f_out):
         m = re.match(r'\s*#\s*(if|ifdef|ifndef|else|endif|elif)\b\s*(.*)',
                      line)
         if not m:
+            # no directive, so we can just write it out.
             f_out.write(line)
             continue
         command,rest = m.groups()
@@ -43,6 +77,8 @@ def translate(f_in, f_out):
             cur_level = new_level
             f_out.write(line)
         elif command in ("else", "elif"):
+            # We stay at the same level on the stack.  If we have an #else,
+            # we comment it.
             if len(cur_level) == 0 or cur_level[-1][0] == 'else':
                 raise Problem("Unexpected #%s on %d"% (command,lineno))
             if (len(cur_level) == 1 and command == 'else' and
@@ -52,6 +88,7 @@ def translate(f_in, f_out):
                 f_out.write(line)
             cur_level.append((command, rest, lineno))
         else:
+            # We pop one element on the stack, and comment an endif.
             assert command == 'endif'
             if len(stack) == 0:
                 raise Problem("Unmatched #%s on %s"% (command,lineno))
@@ -71,4 +108,3 @@ for fn in sys.argv[1:]:
     with open(fn+"_OUT", 'w') as output_file:
         translate(open(fn, 'r'), output_file)
     os.rename(fn+"_OUT", fn)
-



_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits