Parcourir la source

Changed./scripts/struct.py to organize by header file

Avoids redundant counting of structs shared in multiple .c files, which
is very common. This is different from the other scripts,
code.py/data.py/stack.py, but this difference makes sense as struct
declarations have a very different lifetime.
Christopher Haster il y a 3 ans
Parent
commit
fe8f3d4f18
1 fichiers modifiés avec 8 ajouts et 10 suppressions
  1. 8 10
      scripts/structs.py

+ 8 - 10
scripts/structs.py

@@ -44,9 +44,7 @@ def collect(paths, **args):
             # find file numbers
             m = decl_pattern.match(line)
             if m:
-                decls[int(m.group('no'))] = (
-                    m.group('file'),
-                    int(m.group('dir')))
+                decls[int(m.group('no'))] = m.group('file')
         proc.wait()
         if proc.returncode != 0:
             if not args.get('verbose'):
@@ -77,8 +75,8 @@ def collect(paths, **args):
                     if (name is not None
                             and decl is not None
                             and size is not None):
-                        decl_file, decl_dir = decls.get(decl, ('', 0))
-                        results[(path, name)] = (size, decl_file, decl_dir)
+                        decl = decls.get(decl, '?')
+                        results[(decl, name)] = size
                     found = (m.group('tag') == 'structure_type')
                     name = None
                     decl = None
@@ -97,21 +95,21 @@ def collect(paths, **args):
             sys.exit(-1)
 
     flat_results = []
-    for (path, struct), (size, decl_file, decl_dir) in results.items():
+    for (file, struct), size in results.items():
         # map to source files
         if args.get('build_dir'):
-            path = re.sub('%s/*' % re.escape(args['build_dir']), '', path)
+            file = re.sub('%s/*' % re.escape(args['build_dir']), '', file)
         # only include structs declared in header files in the current
         # directory, ignore internal-only # structs (these are represented
         # in other measurements)
         if not args.get('everything'):
-            if not (decl_file.endswith('.h') and decl_dir == 0):
+            if not file.endswith('.h'):
                 continue
         # replace .o with .c, different scripts report .o/.c, we need to
         # choose one if we want to deduplicate csv files
-        path = re.sub('\.o$', '.c', path)
+        file = re.sub('\.o$', '.c', file)
 
-        flat_results.append((path, struct, size))
+        flat_results.append((file, struct, size))
 
     return flat_results